LoginSignup
15

More than 5 years have passed since last update.

facebookページのカバー写真をAPIで変更する方法

Posted at

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

というパラメータがある。

参考ページ

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15