Gaaaon
PR.ready_
Instagram APIでハッシュタグを収集しダッシュボードを作る方法
Data

Instagram APIでハッシュタグを収集しダッシュボードを作る方法

InstagramAPIを利用して画像付きダッシュボードを作る方法を解説します。

  • Facebook

シェアする

  • Post Button

catch-img

Instagram APIでハッシュタグを収集しダッシュボードを作る方法

2021-03-21 07:03ブログ

SNS データ可視化

目次[非表示]

  1. Instagram APIとは

  2. Instagram APIを使うための2つのポイント

    1. ①アカウントの取得
    2. ②投稿データの取得
  3. APIの種類

    1. Instagramグラフ(Graph)APIで取れるデータ
  4. ハッシュタグデータの取得方法

    1. 1.検索したいハッシュタグのIDを探す
    2. 2.検索タイプと取得したい項目を設定
    3. 3.データをリクエスト
      1. Instagramはちと不安定!?
  5. ダッシュボードを作る

    1. 流れ
    2. スプレッドシートに出力
    3. データポータル側でIMAGE関数でサムネイル作成
  6. 出来上がり

以前のブログで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.

Watch on

0:00

0:00 / 9:07

•Live

アカウントの取得方法に関しては当ブログではあまり深く触れませんが、下記2つをFacebookの機能から取得する必要があります。

取得項目内容
InstagramビジネスアカウントID134895793791914Facebookページに紐付けられている整数で構成されたID
アクセストークンu6xOaUb(中略)53jl6oFyZ英数字で構成された長い文字列
※有効期限別に3種類存在する

※アクセストークンに関しては「取得した短時間有効トークンを使って申請し、更に新たな長時間有効トークンを取得する」という少し複雑な流れになります。

②投稿データの取得

ここからはInstagramビジネスアカウントIDとアクセストークンを取得した前提で進めていきます。

基本的には下記流れの繰り返しとなります。

  1. ビジネスアカウントIDとアクセストークンを使い、検索したいハッシュタグのIDをリクエストする
  2. ビジネスアカウントIDとアクセストークンとハッシュタグIDを使い、検索タイプを設定したURLをリクエストする
  3. JSONデータでレスポンスが返ってくる

APIの種類

InstagramのAPIには大きく下記2種類に分かれるようです。

APIの種類対象データ(引用)
Instagram基本(Basic)APIInstagramユーザーからInstagramユーザーアクセストークンおよびアクセス許可を取得する
Instagramユーザーのプロフィールを取得する
Instagramユーザーの画像、動画、アルバムを取得する
(つまりユーザーに紐づく画像やプロフィールのみ取得できる)
Instagramグラフ(Graph)API公開された写真、動画、ストーリーズの取得と管理
他のInstagramビジネスユーザーとInstagramクリエイターに関する基本データの取得
コメントとそれに対する返信のモデレーション
メディアおよびプロフィールのインタラクションの測定
ハッシュタグの付いたメディアの発見
@mentionの発見
写真と動画の公開
(つまり色々取得できる)

上記分類から、ある特定のハッシュタグを抽出するためには、InstagramグラフAPIが必要になります。

Instagramグラフ(Graph)APIで取れるデータ

InstagramグラフAPIでは、現在下記2種類のデータと各種項目を取得することができるようです。

▼利用可能な検索方法

種別対象検索制限
recent_media24時間以内に投稿されたデータ7日間で30件のハッシュタグ
top_media人気の投稿に上がったデータ7日間で30件のハッシュタグ

▼取得できるデータ

取得できる項目内容
id投稿ごとのユニークID
media_typeIMAGE(投稿写真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データポータルを活用していきます。

流れ

  1. InstagramグラフAPIからデータを取得する
  2. 取得データをスプレッドシートに出力する
  3. データポータルへ連携させる

本来は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などのデータ抽出や、データスクレイピングの代行も行っています。 お問い合せフォーム よりお気軽にお問い合せください。

▼合わせて読みたい

【難解!?】Twitter APIを使って投稿データを収集する方法 | 広報・PR支援の株式会社ガーオンTwitter Search APIを非エンジニアの方にも、なるべく分かりやすく解説し、全体概要や費用などを解説した上で、具体的なデータ取得方法まで解説していきたいと思います。広報・PR支援の株式会社ガーオン

【ML-Ask】感情分析AIは実際に使えるのか検証してみる | 広報・PR支援の株式会社ガーオン朝日新聞の記事にも使われている「ML-Ask」という感情分析モデルを実際に使ってみて検証していきたいと思います。広報・PR支援の株式会社ガーオン

朝日新聞の要約AIはヤフートピックスの夢を見るか ~ディープラーニングを用いた令和時代のプレスリリースの作り方~ | 広報・PR支援の株式会社ガーオン朝日新聞の記事データをもとに開発されたという、ディープラーニングを活用した自動要約生成APIをご紹介します。広報・PR支援の株式会社ガーオン

ソーシャルデータから読み解くボヘミアンラプソディの口コミ形成とメディア露出効果 | 広報・PR支援の株式会社ガーオンボヘミアン・ラプソディの大ヒットにはSNSやテレビはどのような影響を与えていたのでしょうか。YouTubeとの相乗効果も合わせて検証します。広報・PR支援の株式会社ガーオン

Amazonの人工知能を使ってSNS等の口コミを感情分析する方法 | 広報・PR支援の株式会社ガーオンアマゾンの自然言語処理サービス Amazon Comprehendを使って口コミを分析してみます。広報・PR支援の株式会社ガーオン

【記事に繋がる】プレスリリースの書き方・送り方 | 広報・PR支援の株式会社ガーオンプレスリリースの書き方の”コツ”をPRプランナーがわかりやすく解説します。プレスリリースとはの解説から、7つのポイントや、6W5Hの使い方の他、広報PRにオススメの具体的なツールの紹介や、ヤフーニュースに掲載してもらうポイントを解説します。広報・PR支援の株式会社ガーオン

前の記事 \ prev-article-image\ \ ヤフーニュース等に掲載されました 次の記事 \ next-article-image\ \ 雑誌・新聞の発行部数推移ダッシュボードを公開しました

  • Facebook

シェアする

  • 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

© Gaaaon Inc. All Rights Reserved.

Twitter Widget Iframe