InstagramグラフAPIを使うとInstagramの投稿情報などを取得できる。ただ、APIの使用に必要なアクセストークンの取得にやや手間がかかる。Pythonで指定したハッシュタグ付きの最新投稿を取得してみたので、アクセストークンの取得も含めて手順をまとめておく。
環境
WSL2(Ubuntu20.04)。
$ lsb_release -dr Description: Ubuntu 20.04.5 LTS Release: 20.04 $ python3 -V Python 3.8.10
APIアクセストークンの取得
InstagramグラフAPIを使うため、FacebookグラフAPIのアクセストークンを取得する。FacebookとInstagramのアカウントはあるとする。Instagramアカウントはプロアカウントに切り替えておく。
FacebookページとInstagramプロアカウントの紐づけ
アクセストークン取得前に、FacebookページとInstagramプロアカウントを紐づけておく。Facebookページがなければ、Facebookのメニューの[ページ]を開いて、[新しいページを作成]から作成できる。
InstagramプロアカウントのFacebookページへの紐づけは、Facebookページの画面の[Instagram投稿を宣伝]>[アカウントをリンク]で行う。
Facebook for Developersでアプリの作成
次に、Facebook for Developersアカウントを作成する。Meta for Developersにアクセスして、アカウントを作成する。アカウントを作成したら、マイアプリの画面でアプリを作成する。今回は以下の設定で作成。
アプリタイプ:ビジネス
アプリ名:テストアプリ(任意名)
アプリの連絡先メールアドレス:登録メールアドレス(デフォルト)
ビジネスマネージャーアカウントをお持ちですか?:ビジネスマネージャアカウントが設定されていません(デフォルト)
アプリを作成したら、[アプリに製品を追加]からInstagramグラフAPIの[設定]ボタンを押す。これで、メニューの商品欄にInstagramグラフAPIが追加される。ここまでやったら、画面右下の[変更を保存]ボタンを押す。
permissonの追加
Facebook for Developersのトップメニューの[ツール]>[グラフAPIエクスプローラー]を開く。[Metaアプリ]で作成したアプリを選択し、[ユーザーまたはページ]で[ページアクセストークン]からFacebookページを選択してから、permissionを追加する。▼をクリックし、さらにOtherを開くとInstagramのpermissionが表示される。今回は以下5つを追加。
- instagram_basic
- instagram_content_publish
- instagram_manage_comments
- instagram_manage_insights
- instagram_manage_messages
permissionを追加し、[Generate Access Token]をクリックすると、Facebookでログインのポップアップ画面が表示される。この画面ではFacebookユーザーとして続行をクリック。
次に表示される画面では、今回は[現在のページのみにオプトイン]を選択。Facebookページを選択してから[続行]ボタンを押す。
続く画面では、今回は[現在のInstagramアカウントのみにオプトイン]を選択。Instagramプロアカウントを選択してから[続行]ボタンを押す。
アプリが要求するアクセス許可の確認画面が表示されるので、[続行]で先に進む。次の画面で[OK]を押すと、アクセストークンが表示される。
無期限アクセストークンの取得
ここまでで取得できたアクセストークンには期限があるので、無期限のアクセストークンを取得する。[ツール]>[グラフAPIエクスプローラー]でグラフAPIエクスプローラを開いてて、[Metaアプリ]で対称のアプリを選択し、アクセストークン左のiアイコンをクリックするとアクセストークン情報が表示される。
画面右下の[アクセストークンツールで開く]をクリックして、アクセストークンツールを開き、[アクセストークンを延長]をクリックすると、期限のないアクセストークンが表示される。
[デバッグ]ボタンを押すと無期限のアクセストークン情報が表示される。有効期限が「受け取らない」になっていればOK。
InstagramビジネスアカウントID の取得
アクセストークンのほかにAPI使用に必要なInstagramビジネスアカウントIDを取得する。Facebook for Developersのトップメニューの[ツール]>[グラフAPIエクスプローラー]を開く。クエリに「me?fields=accounts{instagram_business_account}」を指定して、[送信]ボタンを押して表示されるレスポンスのinstagram_business_accountがInstagramビジネスアカウントID。
指定ハッシュタグ付きの最新投稿を取得
無期限アクセストークンとInstagram ビジネスアカウントIDが取得できたので、指定したハッシュタグが付いた最新の投稿をAPIで取得してみる。
はじめに、APIのエンドポイントアクセスに使うRequestsをインストールしておく。
$ pip3 install requests
指定ハッシュタグ付きの最新投稿を取得する手順としては、IG Hashtag SearchでハッシュタグIDを取得して、そのIDをもとにIGハッシュタグ付きの最近のメディアで最新投稿を検索する。以下コードでは、ハッシュタグ「スイーツ」が付いた最新の投稿を取得する。
from pprint import pprint import requests API_VER = 'v15.0' INSTA_ACCOUNT_ID = 'xxxxxxxxxx' # Instagram ビジネスアカウントID INSTA_ACCESS_TOKEN = 'xxxxxxxxxxx' # 無期限アクセストークン # ハッシュタグ「スイーツ」のIDを取得 query = 'スイーツ' ig_hashtag_search_url = f'https://graph.facebook.com/{API_VER}/ig_hashtag_search?user_id={INSTA_ACCOUNT_ID}&q={query}&access_token={INSTA_ACCESS_TOKEN}' response = requests.get(ig_hashtag_search_url) res = response.json()['data'] hashtag_id = res[0]['id'] print('hashtag_id=', hashtag_id) # ハッシュタグ「スイーツ」がついた最新投稿を取得 recent_media_url = f'https://graph.facebook.com/{hashtag_id}/recent_media?user_id={INSTA_ACCOUNT_ID}&fields=id,media_type,media_url,comments_count,like_count,caption,permalink,timestamp&access_token={INSTA_ACCESS_TOKEN}' response = requests.get(recent_media_url) res = response.json()['data'] pprint(res)
上記コードを実行すると、以下のような結果が得られる。
hashtag_id= 17843787853011507 [{'caption': 'xxxxx\n' '#xxxxx\n' '#xxxxx', 'comments_count': 0, 'id': '11111111111111', 'like_count': 0, 'media_type': 'IMAGE', 'media_url': ''https://xxxxx', 'permalink': 'https://www.instagram.com/p/xxxxx/', 'timestamp': '2023-01-14T07:30:42+0000'}, {'caption': 'xxxxxxxxxxxxx\n' '\n' '#xxxxxxxxxxxxxxxxxx', 'comments_count': 0, ...
0 件のコメント:
コメントを投稿