【実装解説】Instagram graph APIでハッシュタグ検索と投稿情報取得!

今回はInstagram graph APIを使って、ハッシュタグ検索をし投稿情報を取得する方法を解説します。

  • InstagramAPIのハッシュタグ検索について詳しく知りたい
  • Instagramの投稿データをハッシュタグごとに取得する方法が知りたい

こんな人におすすめの記事です。

実際に使っているからこそ分かる、分かりづらい部分や注意点を踏まえて解説して行きます。

このサイトではInstagramのAPIについて、網羅的に解説しています。
(ぜひブックマークなどして必要な時にみてください)

ページ 概要
InstagramAPIとは 基本的な情報やできること・できないこと(まず見てほしい)
APIセットアップ Instagram APIのセットアップ方法(実装するなら必須)
基本表示APIの実装方法 自分のアカウントの投稿やプロフィールの取得方法
ビジネスディスカバリーAPIの実装方法 他人のアカウントの投稿やプロフィールの取得方法
ハッシュタグ検索する実装方法(当記事) 特定のハッシュタグの投稿情報の取得方法
自動投稿をする方法 APIを使ってInstagram投稿をする方法

Instagram graph APIのハッシュタグ検索について

Instagramのハッシュタグ検索のAPIは2つあり、それぞれ取得できる情報が違います。

  1. 人気投稿取得API: 該当のハッシュタグが付いた投稿を人気順に取得できる
  2. 最新の投稿取得API: 該当のハッシュタグが付いた24時間以内の投稿を取得できる

それぞれを自分の目的に合った形で使っていくことになります。

ハッシュタグが付いた人気投稿の取得API

人気投稿の取得APIは、エンドポイント {ig-hashtag-id}/top_mediaのAPIです。

公式ドキュメント

人気投稿の取得APIを使うと、指定した数だけ、Instagramのロジックに基づいた人気上位の投稿を取得できます。

人気順位のロジックは、Instagramアプリでハッシュタグ検索をしたときと同じです。

私は1回で3,000投稿近くまで取得したことがあり、その前後までは確実に取ることができます。
(仕様上は制限なく取得可能なはずです。)

特定のハッシュタグの投稿から、評価が高いものを順に取得したいときに使うといいでしょう。

また後述の最新投稿の取得APIは、24時間以内のものしか取れません。
多くの投稿情報がほしい、とりあえず投稿情報を取りたいときもこちらを使うことになります。

ハッシュタグが付いた最新投稿の取得API

最新投稿の取得APIは、エンドポイント {ig-hashtag-id}/recent_mediaのAPIです。

公式ドキュメント

最新投稿と言っていますが、厳密にはAPIを叩いた時から24時間以内に投稿されたものが取れるAPIになります。

昨日の投稿という意味ではないので注意をしましょう。

毎日特定の日時に24時間以内の全投稿を取得したい場合や、先日の#が付いた投稿数を知りたい時などに使えます。

(補足)最新投稿の取得APIはInstagramで見れる最新投稿とは違う

最新投稿の取得APIで取れる投稿は、PC版Instagramで見れるハッシュタグごとの最新投稿と異なります。

最新投稿の取得APIは、APIを叩いた時から24時間以内にポストされた投稿を返す仕様です。

一方でPC版Instagramでハッシュタグ検索をした際の最新投稿は、#が付いた日時を起点に最新順になっています。
(古い投稿を編集してハッシュタグをつけると最新として表示される)

Instagramでは最新投稿で出ているのに、APIでは返ってこない際は、古い投稿に直近で#が付いた可能性が高いです。

ハッシュタグAPIの注意点

1週間で取れるハッシュタグは30個まで

ハッシュタグ検索系のAPIは、1つのトークンにつき、7日間で30個までのハッシュタグしか検索ができません。

人気投稿APIと最新投稿APIを合わせて30個になります。

もし30個よりも多くのハッシュタグ検索をしたい場合、トークンを多く持ち、30個を超えた時点でトークン変更をするなどの対策が必要です。

画像情報は約8時間で期限が切れるので注意

これはInstagramのAPI全てで言えることなのですが、取得した画像/動画URLは、約8時間で無効になります。

そのため「画像/動画URLをDBに格納していつでも呼び出して表示」ということができません…

一度URLから画像や動画をダウンロードし、別途格納しておく必要があります。

Instagram ハッシュタグAPIを使って情報を取得してみる

Instagram Graph APIのハッシュタグ検索は、下記の順番で実施していきます。

  1. ハッシュタグごとに振られているハッシュタグIDを取得する(また別のAPI)
  2. ハッシュタグIDを使ってハッシュタグ検索をする

「#海」は「1740327582374」、「#山」は「174627388473」といった具合に、ハッシュタグにはそれぞれ一意のIDがあります。

人気投稿取得APIも、最新投稿取得APIも、まずはこのハッシュタグIDを取得して、そのIDを使って投稿を取得しなくてはいけません。

なお実装イメージはApp Scriptで行ったものを添付しております。

ハッシュタグIDの取得

ハッシュタグIDの取得は、エンドポイント{ig-hashtag-search}を使います。

公式ドキュメント

ビジネスアカウントIDとアクセストークンは、初期設定時に取得したものを入れてください。

const hashTagName = '検索したいハッシュタグ';
const instaBusinessId = 'みなさんのビジネスアカウントID';
const accessToken = 'みなさんのアクセストークン';


// InstagramAPIでハッシュタグIDを取得する
function getIgHashId() {
 try {
  const url = `https://graph.facebook.com/v17.0/ig_hashtag_search?user_id=${instaBusinessId}&q=${hashTagName}&access_token=${accessToken}`;
  const response = instagramApi(url, 'GET', '', accessToken);

  const data = JSON.parse(response.getContentText());
  const hashTagId = data.data[0].id;
  
  return hashTagId;
 } catch (error) {
  console.error('Instagram APIのリクエスト中にエラーが発生しました:', error);
  return null;
 }
}


// APIを叩く関数
function instagramApi(url, method, payload, accessToken) {
 try {
  const headers = {
   'Authorization': 'Bearer ' + accessToken
   };
  const options = {
   'method': method,
   'headers': headers,
   'payload': payload
  };

  const response = UrlFetchApp.fetch(url, options);
  return response;
 } catch (error) {
  console.error('Instagram APIのリクエスト中にエラーが発生しました:', error);
  return null;
 }
}

ハッシュタグIDは、17文字程度の数字の羅列になります。

「17373895743895789」といった具合です。

ハッシュタグが付いた投稿情報を取得してみる

取得したハッシュタグIDを使って、最新投稿の取得APIを叩いてみます。

先ほどのハッシュタグID検索の関数に加えて、下記関数を使います。

const hashTagName = '検索したいハッシュタグ';
const instaBusinessId = 'みなさんのビジネスアカウントID';
const accessToken = 'みなさんのアクセストークン';

// 最近投稿を取得するAPIを叩く関数
function searchTopHashTagPosts() {

 // ハッシュタグIDを取得するAPIを叩く関数呼び出し
 const hashTagId = getIgHashId();

 try {
  const url = `https://graph.facebook.com/${hashTagId}/recent_media?user_id=${instaBusinessId}&fields=caption,comments_count,id,like_count,media_type,media_url,permalink,timestamp,children%7Bmedia_url%7D&access_token=${accessToken}&limit=35`;
  const response = instagramApi(url, 'GET', '');

  if (response.getResponseCode() !== 200) {
   console.error('Instagram APIのリクエストが失敗しました:', response.getResponseCode());
   return null;
  }

 const data = JSON.parse(response.getContentText());
 const instagramMedia = data.data;
 console.log(instagramMedia); //データ出力

 return instagramMedia;
 } catch (error) {
  console.error('Instagram APIのリクエスト中にエラーが発生しました:', error);
  return null;
 }
}

APIのURL内 fieldsで取得したい情報をしています。

実際に取得し、それぞれのイメージを確認してみてください。

50個以上投稿データを取りたい場合

InstagramのAPIでは基本、投稿情報は50個ずつ返却されます。

返却データの中に、次の50個が取れるURLも返ってくるので、50個以上取得したい場合そちらを使います
(これを繰り返して500個、1,000個と取って行きます)

入っているのは、返却されるjsonデータ内部直下の`paging`という変数です。

50個ずつでなく35個ずつが安全(かも)

InstagramAPIを叩いてると、1回の取得数が多すぎるとエラーが返ってくる時があります。

このエラーが返ってきたら、1回の取得数を35個にしてみてください

ドキュメントにも「応答は、ページあたりの結果が最大50件のlimitでページネーションされます」とありますが、35個でエラー解消したりします…

ただいつもエラーが起きるというわけでもないので、もしエラーが出たら試してみてください。

今何個ハッシュタグ検索をしているか知る方法

7日間で取得できるハッシュタグ数は、トークンごとに30個までという制限があります。

いろいろと試していると、「今何個検索してるっけ?」となることも。

そんなときに使えるのが、最近検索されたハッシュタグIDを一覧で取得するAPI、{ig-user-id}/recently_searched_hashtagsです。

constinstaBusinessId = 'みなさんのビジネスアカウントID';
constaccessToken = 'みなさんのアクセストークン';

// 7日間で検索しているハッシュタグ数の検索API
functiongetRecentlySearchedHashtags(){

 consturl = `https://graph.facebook.com/v17.0/${instaBusinessId}/recently_searched_hashtags?limit=30&access_token=${accessToken}`;
 constresponse = instagramApi(url, 'GET', '', accessToken);

 constdata = JSON.parse(response.getContentText());
 console.log(data) //データ出力
}


// APIを叩く関数
function instagramApi(url, method, payload, accessToken) {
try {
const headers = {
'Authorization': 'Bearer ' + accessToken
};
const options = {
'method': method,
'headers': headers,
'payload': payload
};


const response = UrlFetchApp.fetch(url, options);
return response;
} catch (error) {
console.error('Instagram APIのリクエスト中にエラーが発生しました:', error);
return null;
}
}

返却値の中には、下記のようなイメージで7日間で取得したハッシュタグIDの一覧が入っています。

{ data: [ { id: '17963541234567890' },{ id: '17963541234567890' },{ id: '17963541234567890' } ] }

この個数を数えることで、今何個のハッシュタグ検索をしているかが分かります。

Instagram APIでハッシュタグ検索をしてみよう

Instagram Graph APIのハッシュタグ検索について、それを使った実装方法について解説しました。

ハッシュタグに関するAPIは4つあります。

  • 人気投稿の取得API
  • 最新投稿の取得API
  • ハッシュタグIDの取得API
  • 検索したハッシュタグID一覧取得API

それぞれ活用し、皆さんの理想の実装ができれば幸いです。

旅アトリーチでお客様の投稿を掲載!

弊社サービス、旅アトリーチを使うと、お客様のSNS投稿を簡単・安全に掲載できます

  • お客様のSNS投稿をHPで掲載したい
  • お客様のSNS投稿を増やしたい
  • 公式HPからの直予約率を上げたい

といった施設様、HP制作会社様などは、ぜひ一度ご連絡をください!

6 件のコメント

  • はじめまして、コメント失礼いたします。
    記事の内容が大変参考になっております。ありがとうございます。

    1つだけお伺いしたいのですが、使用するアクセストークンとは、ユーザーアクセストークンとページアクセストークンのどちらでしょうか?
    色々な記事を拝見していると、長期ページアクセストークンを取得してそれをハッシュタグ検索に使用しているようなのですが、私の環境では長期ページアクセストークンを使うと400エラーになってどうしてもうまくいかず、長期ページアクセストークンを取得するのに使用した長期ユーザーアクセストークンであれば問題なくハッシュタグ検索ができます。
    ビジネスアカウントIDは長期ページアクセストークンを使って問題なく取得できます。
    それらのトークンの取得は下記のドキュメントを参考に進めました。
    https://developers.facebook.com/docs/facebook-login/guides/access-tokens/get-long-lived
    もし可能なら、わかる範囲でご教授いただけますと幸いです。

    • はじめまして!コメントいただきありがとうございます。

      使用しているアクセストークンは、ユーザーアクセストークンとなります。
      弊社でここ最近取得(23年6月)したページアクセストークンでも、400エラーが発生し情報取得ができませんでした。

      過去1年間ハッシュタグ検索APIを使用していますが、そちらも同じくユーザーアクセストークンとなります。

      最後になりますが、弊社の記事がお役に立っているということで大変嬉しいです。

      引き続き、よろしくお願いいたします。

  • 初めまして。とても参考になる記事ありがとうございますm(_ _)m

    可能であれば以下一点お伺いしたいです。
    ハッシュタグ検索でメディア情報を取ってきた時、投稿したユーザーの情報(ユーザー名等)は入っていますでしょうか?

    初めましてで恐縮ですが、ご教示頂けると助かります。

    • さこたまさし様

      嬉しいお言葉ありがとうございます。

      ご質問ですが、投稿したユーザーの情報は入っておりません。
      以前はアカウントIDが取得できたようですが、個人情報の取り扱いが厳しくなり返却されなくなりました…

      またハッシュタグ検索のAPIに関わらず、他人の投稿を取得するAPIのほぼ全てで、ユーザーの情報は取得できないのが現状です。

      詳細は下記記事にて記述しております。
      https://tabiato.co.jp/biz/blog/instagram-api/

      引き続き、当社のサイトをよろしくお願いいたします。

  • 初めまして!大変有益な情報をありがとうございますm(__)m!
    実際にpythonで実行したところ、リール投稿が取得できませんでした。
    リールのトップ投稿を取得する方法はありますか?

    • 始めまして!ご返信が遅くなり申し訳ございません。
      また、お褒めの言葉をいただきありがとうございます!

      リール投稿ですが、投稿の情報自体は取得できることが弊社で確認できております。
      ただしかなりの数の取得が必要になる可能性がございます。弊社でも情報が取得できない場合もございます。

      また、リール投稿の動画情報(URL)は取得ができません。
      公式ドキュメントでは、「多くのリール動画には音楽が付いており、著作権上の問題から動画URLをAPIで提供していない」と記載がございます。

      つまりお答えをまとめますと、下記の通りとなります。
      ・(不安定ですが)しっかりと数を取ればリール投稿の情報(投稿のコメントや日付、いいね数など)は取得可能です。
      ・ただし、著作権の問題から動画情報は取得ができません。

      動画情報が取れないのであれば、リール投稿が取れないのとほぼ同じですが、、、
      この情報がお役に立てると幸いです。

  • コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です

    CAPTCHA