AccessTokenの取得
まずは、facebookページをAPIから操作するためのAccessTokenを取得する。
AccessTokenの取得方法
facebookページの管理権限を持っているアカウントで、manage_page
のPermissionを付与した状態でOAuth認証を行う。
その上で、/me/accounts
というAPIにアクセスすると、自分が管理権限を持っているfacebookページの情報が取得でき、その中にAccessTokenが含まれている。
{
"data": [
{
"category": "Producer",
"name": "Sample",
"access_token": "xxxxxxxx...",
"perms": [
"ADMINISTER",
"EDIT_PROFILE",
"CREATE_CONTENT",
"MODERATE_CONTENT",
"CREATE_ADS",
"BASIC_ADMIN"
],
"id": "111..."
}
]
}
cover写真の変更方法
cover写真の変更APIは、/{page_id}
にPOST通信し、cover
というパラメータにPhotoIDを渡すというもの。
直接写真をアップロードするのではなく、一度Facebook上に写真をアップし割り振られたPhotoIDを渡さないといけない、という。ああ、めんどくさい。
そのため、まずは写真アップロードAPIでページ上に写真をアップしなければいけないのだが、そうするとカバー写真にしようとしている写真が一度タイムラインに載ってしまい、ネタバレしてしまう。
facebookは一応そういったケースを想定したのかしていないのか、非公開で写真をアップする方法を提供してくれていた。
非公開で写真をアップロードする方法
写真アップロードは/{page_id}/photos
にPOST通信で行うことができる。
この時、published
というパラメータにfalse
を渡すと、非公開で写真をアップロードすることができる。
POST https://graph.facebook.com/{page_id}/photos?
access_token={page_access_token}&
source={photo data}&
published=false
アップロードに成功すると、PhotoIDがレスポンスで返ってくる。
{
"id": "111..."
}
facebookページのタイムラインやアルバムを見てみても、写真自体は存在していない。
あくまでも非公開で投稿し、PhotoIDを割り振ってもらった状態。
実際にCover写真を変更してみる
PhotoIDが取得できれば、後はカバー写真変更APIにこの値を渡してあげるだけである。
POST https://graph.facebook.com/{page_id}?
access_token={page_access_token}&
cover={photo_id}
成功すると、true
とだけレスポンスが返ってくる。(いい加減JSONで統一してくれ)
他にも、
- カバー写真のy軸の位置を調整できる
offset_y
- タイムラインにカバー写真を変更したということを載せるかどうかの
no_feed_story
というパラメータがある。
参考ページ