happy_ryo

2018.03.20

Instagram Graph API で Instagram に画像を投稿してみた

お久しぶりです、happy_ryoです。
最近、友だちとボルダリングを始めた結果ダーツにハマり、自宅にダーツボードを設置しました。

今回のお題

今回は Facebook が徐々に整備している Instagram Graph API のうち、Facebook Marketing Partners と Instagram Partners 向けに Closed beta として提供されている Content Publishing API を使って見たのでその事を書こうと思います。

ちなみに、既存の Instagram プラットフォーム上に用意された API では投稿用のエンドポイントは用意されておらず、諸々の物議を醸し出している Instagram プラットフォーム上の API 廃止騒動の中にあって、かつてから待望されていた「Instagram クライアント上以外のサービスからの投稿機能」を実装出来るようになることは、幾つかあるGoodニュースの一つです。この勢いで DirectMessage に関するエンドポイントが用意されると幸せですね。

Content Publishing API の概要と注意事項

2018/03/20 時点では、上記の通り FMP か Instagram Partners になっていないと、この API を利用することはできません。

利用に必要なパーミッション

  • manage_pages
  • instagram_basic
  • instagram_content_publish

manage_pages は Content Publishing API を利用するのに必須ではありませんが、Content Publishing API を利用する為に Instagram と連携した Facebook Page を取得したりするのに必要になります。

エンドポイントの構成

  • /user/media
  • /user/media_publish

/user/media で media を登録し、取得した media の id を用いて、/user/media_publish で Instagram 上に media をパブリッシングする作りになっています。

Content Publishing API の使い方

POST:/user/media

https://developers.facebook.com/docs/instagram-api/reference/user/media

投稿したい画像を Media Object Container として登録する際に、このエンドポイントを利用します。

設定出来る項目

  • image_url
  • caption
  • user_tags
  • location_id

image_url 以外は optional の項目です。また、直接画像を Post するタイプのエンドポイントではなく、投稿したい画像の URL を文字列で投稿する必要がある事に注意してください。既に Web 上に存在している画像の場合は問題ありませんが、そうで無い場合は自前の環境に投稿対象の画像をアップロードしてWeb上に公開する必要があります。リクエストに成功すると、Media Object の id がレスポンスとして返ってきます。

caption への投稿内容にハッシュタグ形式(e.g., #test)やメンション形式(e.g., @test)の文字列を含めると通常の Instagram クライアントからの投稿と同様に動作します。

制限

作成した Media Object Container は、24時間以内にパブリッシングしないと無効になります。

  • Videos
  • Shopping tags
  • Branded content tags
  • Filters
  • Multi-image posts

上記の、Instagram クライアントからは利用できる機能が今のところ利用できません。とはいえ、user_tags や location_id も数日前までは利用できない状態だったものが追加実装されたので、将来的には利用できるようになるかも知れません。

上記の機能の他に、投稿出来る画像に以下の制限があります。

  • 最大サイズ8MB
  • JPEG、PNG、BMP、アニメーションではないGIF のみ許可
  • 縦横比が 4:5 から 1.91:1 であること
  • 最小画像サイズは 150*150
  • 最大画像サイズは 1920*1080

POST:/user/media_publish

https://developers.facebook.com/docs/instagram-api/reference/user/media_publish

POST:/user/media で作成した Media Object Container をパブリッシングする為のエンドポイントです。

設定出来る項目

  • creation_id

Media Object Container の id を指定して投稿することしか出来ません。リクエストに成功すると、投稿された media の id だけが返ってきます。投稿された media の詳細な情報を取得したい場合、この id は GET:/user/media で取得できる自分の投稿した media 一覧で取得出来る情報の id と対応しているので、そちらと突合することで情報を収集する事が出来ます。

 

後書き

これまで、Instagram クライアントからしか画像が投稿できなかった事が嘘のようにアッサリと投稿出来ました。Instagram プラットフォーム側の API が廃止されることで Instagram Graph API が順次拡張されており、Web hock を利用して、自分へのコメントやメンション、Stories の期限切れをリアルタイムに関知出来るようになったり、Instagram プラットフォームの時には取得出来なかった公開した Stories の media id が取得出来るようになったりと色々便利になったところも増えているので、この勢いで幾つか移行の発表されていないエンドポイントもしっかり移行されて、ぼくの心に平穏をプレゼントして欲しいです。

 

え?実際に投稿してないじゃんって?API経由の投稿と、クライアントからの投稿の見分けが付かなくて絵面的に面白くなかったので許してください。(Facebookに Closed Beta 利用の申請をして、コードからも、Graph API explorer からも紹介した二つのエンドポイントを利用して投稿出来ることは確認しているので、今のところ不具合は無さそうです)