雲のメモ帳

猫とクラウドと旅行が好きなインフラエンジニアです。 日々の調べたことや興味が持ったことをこのブログにアウトプットします。

Instagram Graph APIとPythonでInstagramからユーザーの投稿画像をダウンロードする

これはなに?

Instagramの画像データ使って画像解析したいなーとおもったので、下処理としてInstagram Graph API使って画像のURL取得と実際に大量の画像を一括ダウンロードするPythonスクリプトを作ってみました。

環境

  • 分析環境: Jupyter notebook
  • 言語: Python3

利用しているDockerImageは以下です。必要に応じて自身の環境でBuildしてください。

github.com

処理概要

  1. Instagram Graph APIのアクセス情報と入力パラメータの指定
  2. 該当のユーザーのMedia情報を取得。一度に取得できる件数に制限があるので、複数回に分けてデータ取得し、最後にDataframeを結合する。
  3. 各画像のURLを取得する。2.で取得したMedia情報の中のpermalinkカラムのURLに/mediaを足すと画像取得のためのURLになるのですが、実際画像を取得するにはリダイレクト先のURLを取得する必要があるので、一度Getして返ってきたURLを保存する。
    • ヘッダー情報にUser-Agentを入れないと画像URLではなくログインURLが返ってきたので、値は空でヘッダーにUser-Agentを入れてます。
  4. 最後に画像データをローカルにダウンロードする。3.で取得したリダイレクト先URLのデータをGetしてローカルにJpgとして保管する。
    • ファイル名は投稿日時にMediaIDを足すことで必ず一意になるようにしました。

ソースコード

  • 以下の箇所は自身の環境に応じて良しなに修正してください。
    • user_business_account_id : ビジネスアカウントID
    • your_token: トークン
    • username : Instagram ユーザー名

gista96ef053ffa51f3f4bf766f6d35103ba

実行結果

ポルカの公式インスタアカウント(polka_fukuoka)のデータを取得してみると以下のようになります。取得画像数としては90枚弱で処理時間としては数十秒となりました。 画像取得よりもリダイレクトURLの取得処理のほうが時間がかかってそうでした。 f:id:ykoomaru:20210917225017p:plain

最後に

画像データが取得できたので、後はAzureのComputer VisionかAWSのAmazon Rekognitionで画像解析して遊ぼうと思います!