- Post Button

Instagram APIでハッシュタグを収集しダッシュボードを作る方法
2021-03-21 07:03ブログ
SNS データ可視化
目次[非表示]
以前のブログでTwitter APIを使ってデータを取得する方法や、Googleデータポータルを使ってダッシュボードを作る方法などを解説しました。
今回は、自社商品や特定のキーワードでどのようにInstagram上で投稿されているのか、いち早く把握・共有するために、 上記のような画像付きダッシュボード を作るところまでを解説していきます。
Instagram APIとは

TwitterだけでなくInstagramにも無料のAPI機能が提供されています。こちらもTwitter APIと同じく下記のような問題を感じました。
- 運営元のFacebookのオフィシャル解説が分かりづらい
- 日本語で解説されたサイトはアカウント取得方法がほとんどでTwitterAPIに比べて記事数が少ない
- 最近APIの仕様変更があったようで用語や解説が乱立していて、もう何がなんだか分からない
あえて難しくしているのではないかと思われるInstagram APIですが、広報PR活動においてもチェックはかかせないでしょう。
APIはWEBページに投稿写真を表示させたり、アプリと連携させたりと様々な機能があるようですが、今回はハッシュタグや投稿内容を検索抽出する方法などを中心に解説していきたいと思います。
Instagram APIを使うための2つのポイント
①アカウントの取得
Instagram APIを使うには運営元のFacebookからアプリ登録や各種アカウント登録する必要があります。
解説サイトはTwitter APIほどではないですが乱立しており、恐らくここでかなりの方が離脱されているのではないかと思います。
※流れに関しては下記動画が比較的分かりやすいと思います。
Instagram API を使ってインスタに投稿した画像データを取得する - YouTube
Photo image of たけたけ@シンプルシンプルデザイン
たけたけ@シンプルシンプルデザイン
46 subscribers
Instagram API を使ってインスタに投稿した画像データを取得する
たけたけ@シンプルシンプルデザイン
Search
Watch later
Share
Copy link
Info
Shopping
Tap to unmute
If playback doesn't begin shortly, try restarting your device.
More videos
More videos
You're signed out
Videos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.
CancelConfirm
Share
Include playlist
An error occurred while retrieving sharing information. Please try again later.
0:00
0:00 / 9:07
•Live
•
アカウントの取得方法に関しては当ブログではあまり深く触れませんが、下記2つをFacebookの機能から取得する必要があります。
| 取得項目 | 例 | 内容 |
| InstagramビジネスアカウントID | 134895793791914 | Facebookページに紐付けられている整数で構成されたID |
| アクセストークン | u6xOaUb(中略)53jl6oFyZ | 英数字で構成された長い文字列 ※有効期限別に3種類存在する |
※アクセストークンに関しては「取得した短時間有効トークンを使って申請し、更に新たな長時間有効トークンを取得する」という少し複雑な流れになります。
②投稿データの取得
ここからはInstagramビジネスアカウントIDとアクセストークンを取得した前提で進めていきます。
基本的には下記流れの繰り返しとなります。
- ビジネスアカウントIDとアクセストークンを使い、検索したいハッシュタグのIDをリクエストする
- ビジネスアカウントIDとアクセストークンとハッシュタグIDを使い、検索タイプを設定したURLをリクエストする
- JSONデータでレスポンスが返ってくる
APIの種類
InstagramのAPIには大きく下記2種類に分かれるようです。
| APIの種類 | 対象データ(引用) |
| Instagram基本(Basic)API | InstagramユーザーからInstagramユーザーアクセストークンおよびアクセス許可を取得する Instagramユーザーのプロフィールを取得する Instagramユーザーの画像、動画、アルバムを取得する (つまりユーザーに紐づく画像やプロフィールのみ取得できる) |
| Instagramグラフ(Graph)API | 公開された写真、動画、ストーリーズの取得と管理 他のInstagramビジネスユーザーとInstagramクリエイターに関する基本データの取得 コメントとそれに対する返信のモデレーション メディアおよびプロフィールのインタラクションの測定 ハッシュタグの付いたメディアの発見 @mentionの発見 写真と動画の公開 (つまり色々取得できる) |
上記分類から、ある特定のハッシュタグを抽出するためには、InstagramグラフAPIが必要になります。
Instagramグラフ(Graph)APIで取れるデータ
InstagramグラフAPIでは、現在下記2種類のデータと各種項目を取得することができるようです。
▼利用可能な検索方法
| 種別 | 対象 | 検索制限 |
| recent_media | 24時間以内に投稿されたデータ | 7日間で30件のハッシュタグ |
| top_media | 人気の投稿に上がったデータ | 7日間で30件のハッシュタグ |
▼取得できるデータ
| 取得できる項目 | 内容 |
| id | 投稿ごとのユニークID |
| media_type | IMAGE(投稿写真1枚)かCAROUSEL_ALBUM(投稿写真2枚以上) |
| like_count | いいね数 |
| comments_count | コメント数 |
| permalink | 投稿URL |
| media_url | 画像タイプがIMAGEだった場合の画像URL |
| children | 画像が2枚以上だった際の画像データ |
| timestamp | 投稿日時 |
ハッシュタグデータの取得方法
ここからはPythonでの実際のデータ取得方法を解説していきます。
※スプレッドシートに出力するために最初からGoogle Apps Scriptを利用してしまうのが一番効率的かと思います。
1.検索したいハッシュタグのIDを探す
import requests
# あらかじめID等は取得しておく
instragramID = "xxxxxx"
ACCESS_TOKEN = "xxxxxx"
# 検索したいワード
query = "マキアート"
id_search_url = "https://graph.facebook.com/ig_hashtag_search?user_id=" + instragramID + "&q=" + query + "&access_token=" + ACCESS_TOKEN
response = requests.get(id_search_url)
hash_id = response.json()
print(hash_id)
# ハッシュタグIDを確認
# {'data': [{'id': '17843767135051777'}]}
上記「#マキアート」の例では、ハッシュタグIDが「17843767135051777」だということが分かります。
2.検索タイプと取得したい項目を設定
取得したハッシュタグIDをURLに入れ、取得したい項目をカンマで繋いで記載します。
# 検索タイプを選択
serch_type = "top_media"
url = "https://graph.facebook.com/" + hash_id + "/" + serch_type + "?user_id=" + instragramID + "&q=" + query + "&access_token=" + ACCESS_TOKEN + "&fields=id,media_type,media_url,permalink,like_count,comments_count,caption,timestamp,children{id,media_url}&limit=50
3.データをリクエスト
response = requests.get(url)
json_data = response.json()
print(json_data["data"][0])
"""
{'id': '18088737829004273', 'media_type': 'IMAGE', 'media_url': 'https://scontent-nrt1-1.cdninstagram.com/v/t51.2885-15/66848248_553399355194722_8335201075156652396_n.jpg?_nc_cat=107&ccb=1-3&_nc_sid=8ae9d6&_nc_ohc=neq5Y0Zrgb4AX-hl1I4&_nc_ht=scontent-nrt1-1.cdninstagram.com&oh=964ba86029363c627de15ed0cdf0a06c&oe=607E7526', 'permalink': 'https://www.instagram.com/p/B0gLfyjF5vv/', 'like_count': 357, 'comments_count': 1, 'caption': '.\nブラックマキアート美味しすぎ\n.\n.\n#新宿 #新宿カフェ #東京カフェ #カフェ #おしゃカフェ #オシャカフェ #カフェ巡り #マキアート #ブラックマキアート #こぼれるフルーツサンド #いいね返し #インスタカフェ #インスタカフェ部 \n#bookandbed #instagood #instalike #instafood #instacafe #likeforlikes #like4likes #likelike #lfl #strowberry #blackmacchiato #koborerufruitsand #black #cafe #mytokyo #tokyo #shinjuk', 'timestamp': '2019-07-29T13:44:54+0000'}
"""
データはMAX50件
Twitter APIは1回のリクエストで100~500件を取得できましたが、Instagramのハッシュタグ検索ではMAX50件となります。
50件を超えるものに関しては、取得したJSONに出現する「paging」というキーの中にある「next」の値に記載されているURLを読み込むことで取得が可能です。
# 下記のようなJSONでデータが返ってくる
{
"data": [\
{\
"id": "投稿ID",\
"media_type": "IMAGE",\
"media_url": "画像URL",\
"permalink": "投稿リンク",\
"like_count": いいね数,\
"comments_count": コメント数,\
"caption": "本文",\
"timestamp": "投稿日時"\
}\
],
"paging": {
"cursors": {
"after": "1ページ目のURL"
},
"next": "2ページ目のURL"
}
}
この方法はTwitterと似ていますが、Twitter APIが毎回異なるユニークなnextURLが生成されるのに対して、Instagramでは2ページ目以降全てのURLが同一となるのが大きな特徴のようです。
つまり2ページ目以降(51件以降)は同じURLを叩き続ける(返ってくるデータは更新される)必要があるということです。
Instagramはちと不安定!?
このAPIでは、2ページ目以降同じURLを叩き付けないとならないため、Twitterの方式よりはかなり不安定なようです。
取得済みのページが再度現れたりとデータが重複するケースが多く見られました。やり方が間違っているだけかもしれませんが、データ取得後に念の為重複確認・削除をしたほうが良いかもしれません。
ダッシュボードを作る
ここからは取得したデータでダッシュボードを作っていきます。以前解説した 広報活動ダッシュボード と同様、今回もGoogleデータポータルを活用していきます。
流れ
- InstagramグラフAPIからデータを取得する
- 取得データをスプレッドシートに出力する
- データポータルへ連携させる
本来はGASでデータの定期取得&スプレッドシート書き込みまで一貫して行えると理想だと思われますが、今回はPythonからデータ取得しているので、DataFrameなどにまとめてから、スプレッドシートに出力します。
Pythonからスプレッドシートへは「gspread」「gspread_dataframe」というライブラリを使うと出力ができます。
スプレッドシートに出力
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from gspread_dataframe import get_as_dataframe, set_with_dataframe
SCOPES = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
SERVICE_ACCOUNT_FILE = "xxx"
credentials = ServiceAccountCredentials.from_json_keyfile_name(SERVICE_ACCOUNT_FILE, SCOPES)
gs = gspread.authorize(credentials)
# スプレッドシートのURLから取得
SPREADSHEET_KEY = "xxx"
# ブックとシートを選択
workbook = gs.open_by_key(SPREADSHEET_KEY)
worksheet = workbook.worksheet("シート名")
df = pd.DataFrame()
df["id"] = ids
df["media_type"] = media_types
df["media_url"] = media_urls
df["permalink"] = permalinks
# df["like_count"] = like_counts #途中で取れなくなりました
df["comments_count"] = comments_counts
df["caption"] = captions
df["timestamp"] = timestamps
df["children"] = childrens
df = df[~df.duplicated(subset='id')]
df["thumb_nail"] = ""
df.loc[df['media_url'] != "None", 'thumb_nail'] = df['media_url']
df.loc[df['media_url'] == "None", 'thumb_nail'] = df['children']
# データフレームをスプレッドシートへ出力
set_with_dataframe(workbook.worksheet("シート名"), df)
データポータル側でIMAGE関数でサムネイル作成
出力したスプレッドシートをベースにデータポータルでダッシュボードを作っていきます。
データポータルには、URLデータから画像を取得してくる「IMAGE関数」というものがあります。スプレッドシートに落としてきた画像URLをIMAGE関数に入れた項目を作ることで、サムネイルを作ることができます。

出来上がり
出来上がったデータポータルは下記画像リンクより確認可能です。
定期クローリングをすれば常に最新のデータを表示することもできます。今回はGASが不安定だったためPythonを経由して行っていますが、データ取得を最初からGoogle Apps Script(GAS)で行えば、定期実行も簡単に行えるでしょう。
以上、Instagram API(ハッシュタグ検索)でできることの解説でした。
※当社では広報活動のサポートの他、TwitterやInstagramなどのデータ抽出や、データスクレイピングの代行も行っています。 お問い合せフォーム よりお気軽にお問い合せください。
▼合わせて読みたい
前の記事 \
\
\
ヤフーニュース等に掲載されました 次の記事 \
\
\
雑誌・新聞の発行部数推移ダッシュボードを公開しました
- Post Button
関連記事
経済YouTube2025年総決算|データが示す"真の王者"と"隠れた実力者
2025-12-27
2025年の経済YouTubeチャンネルを総括します。PIVOT減速、NewsPicks逆転、TBS急成長。そして隠れた王者楽待を深堀り。
調査PRがAI時代に再評価される5つの理由 ~LLM検索で選ばれるための新戦略~
2025-12-20
AI検索(LLM)時代、なぜ「調査PR」が最強の戦略なのか?Ahrefsの最新データとCheckr社の事例をもとに、ChatGPT等で自社が引用されるための5つの理由を解説します。
AI導入、「やる気」だけでは進まない? 米国PR業界719名調査が明かす、本当の課題とは
2025-12-10
PRWeekとボストン大学の共同調査から、広報・PR代理店にAIが浸透しない理由と解決策について解説します。
天才エンジニアが作ったLLM Councilを魔改造してプレスリリース作成ツールを作ってみた
2025-12-04
生成AIを活用したプレスリリース作成専用のツール「Press Council」をご紹介します。
ニュース取得特化ライブラリ newspaper4k は実際に使えるのか検証してみる
2025-11-20
ニュース取得ライブラリ newspaper4k は実際に使えるのか ITメディアの実際の記事で検証して解説します。
2025年7-9月期 雑誌印刷部数を分析する
2025-11-09
2025年7-9月期 雑誌印刷部数を分析します。
広報・PRやプレスリリースまわりでお困りのことはございませんか?
多数の企業サポートを行ってきた当社が解決いたします。
お気軽にお問合せください。
企業情報
© Gaaaon Inc. All Rights Reserved.
Twitter Widget Iframe

シェアする









