catch-img

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


目次[非表示]

  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ほどではないですが乱立しており、恐らくここでかなりの方が離脱されているのではないかと思います。

※流れに関しては下記動画が比較的分かりやすいと思います。

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

取得項目
内容
InstagramビジネスアカウントID

134895793791914

Facebookページに紐付けられている整数で構成されたID
アクセストークン
u6xOaUb(中略)53jl6oFyZ
英数字で構成された長い文字列
※有効期限別に3種類存在する

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

②投稿データの取得

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

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

  1. ビジネスアカウントIDとアクセストークンを使い、検索したいハッシュタグのIDをリクエストする
  2. ビジネスアカウントIDとアクセストークンとハッシュタグIDを使い、検索タイプを設定したURLをリクエストする
  3. 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データポータルを活用していきます。

流れ

  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支援の株式会社ガーオン



関連記事

広報・PRやプレスリリースまわりでお困りのことはございませんか?
多数の企業サポートを行ってきた当社が解決いたします。
お気軽にお問合せください。