前回まででページアクセストークンを取得して、InstagramグラフAPIが利用できるようになりました。
今回は過去投稿データを取得してスプレッドシートに出力させてみようと思います。
過去記事はこちら↓


過去投稿データの取得
まずはAPIをたたいて投稿データの確認
InstagramビジネスアカウントIDとユーザアクセストークンを取得していることが前提です。
InstagramグラフAPIのメディア(投稿)のページを確認するとメディアIDを元にデータを取得させる形式になっていました。
※メディアとは投稿のことのようです。
IGメディア
Instagram写真、動画(アップロードされた動画、ライブ動画、Instagram TVアプリで作成された動画)、ストーリーズ、アルバムを表します。
GET https://graph.facebook.com/v13.0
/{ig-media-id} ?fields={fields} &access_token={access-token}
そもそもメディアIDを取得する必要があるなと思い、調べてみるとビジネスディスカバリーというものがありました。
これでユーザーの投稿したメディアが取得できそうです。
メディアで取得できるデータのうちメディアID(id)、投稿日時(timestamp)、コメント数(comments_count)、いいね数(like_count)、投稿へのリンク(permalink)、メディアへのリンク(media_url)、メディアタイプ(media_product_type)、投稿本文(caption)を取得してみました。
実際に下記のようなURLをWEBブラウザで取得したものがこんな感じです。
試したい場合はInstagramビジネスアカウントIDとユーザアクセストークンを自分の情報に変更してみてください。
https://graph.facebook.com/v13.0/InstagramビジネスアカウントID?fields=business_discovery.username(imoyutaka){media{id,timestamp,comments_count,like_count,permalink,media_url,media_product_type,caption}}&access_token=ユーザアクセストークン
投稿毎のデータが取得できていることがわかります。
ただこのままだと読みづらいですし、分析しやすい表示にしたいですね。
Google Apps ScriptでInstagramの投稿データ(メディア)をスプレッドシートに出力
Google Apps ScriptはGoogleが提供しているプログラミングフォーマットでGmailやスプレッドシートなどと連携して動かすことができるツールでGoogleアカウントがあれば無料で利用できます。
この利用開始方法は本筋とはずれるため割愛しますが「Google Apps Script 利用方法」などで検索して調べてみてください。
pythonなどスクリプト型のプログラミング言語であれば投稿データを加工することは可能なのでいろいろ試してみようと思います。
そしてプログラミングと組み合わせることでInstagramのインサイトなどだけではわからない/わかりづらい情報も分析できるようになるはずです。
スプレッドシート出力結果
スプレッドシートに下記のように投稿を書き込むことができました。
これによりInstagramの投稿データ(メディア)をまとめて取得することができました。
タグ数は投稿本文からハッシュタグをプログラムでカウントしています。
また最後尾にハッシュタグをすべて羅列しています。
例えば、いいね数が多い投稿とハッシュタグ数やハッシュタグの内容の関連性を調べたりなどいろいろ分析に使えると思います。
投稿へのリンクもあるのでそのまま気になった投稿を確認するのにも使えますね。
ちなみに自分だけでなく他のユーザーのアカウントのデータを取得することができます。(詳細はIGメディアとインサイトを参考にしてください)
インフルエンサーの投稿内容の調査などに使えそうですね。
他者のアカウントでも取得できる主なデータ
投稿日時、コメント数、いいね数、投稿リンク、メディアリンク、メディアタイプ、投稿内容、ハッシュタグ数、ハッシュタグ
自分のアカウントのみで取得できる主なデータ
リーチ、インプレッション、保存数、エンゲージメント(いいね数+コメント数+保存数)
プログラム内容
処理内容
・指定したスプレッドシートに新規シートを作成し、指定したユーザーの過去投稿内容を出力していく
シートの名前は「ユーザー名+データ取得日時」にする
必要なデータ
InstagramプロアカウントID:前回取得した値(17桁程度の数字羅列)
Instagramユーザー名:例、imoyutakaなど調査したいユーザー名 ※表示名ではありません
ページアクセストークン:前回取得した値(250桁程度の数字アルファベットられる)
スプレッドシートID:下記のようにスプレッドシートのURLのうち、d/と/editの間のものです。
https://docs.google.com/spreadsheets/d/スプレッドシートID/edit#
プログラム本文
// スプレッドシートに書き込む関数
function writeSheet(){
var instragramID = 'InstagramプロアカウントID'; //変更箇所 適宜アカウント情報を入力してください。
var username = 'Instagramユーザー名'; //変更箇所 instagramのユーザー名です。アルファベットで登録してあるものです。
var ACCESS_TOKEN = "ページアクセストークン'; //
var spreadsheetID = 'スプレッドシートID';
var spreadsheet = SpreadsheetApp.openById(spreadsheetID); //IDで操作するスプレッドシートを選択
var sheetTemp = spreadsheet.insertSheet(); //スプレッドシートに新規のシートを作成
var today = new Date(); //日付を取得
var todayStr = Utilities.formatDate(today, 'JST', 'yyyy/MM/dd hh:mm'); // 日付を指定した形式変更
var sheetName = username + todayStr; //シートの名前
var sheet = sheetTemp.setName(sheetName); //シートの名前をユーザー名+日付に変更
medias = getInstagramMedia(instragramID,username,ACCESS_TOKEN); //後述する投稿データ(メディア)を取得する関数を呼び出す。
sheet.appendRow(['投稿id','投稿日','コメント数','いいね数','投稿URL','画像URL','フィードタイプ','投稿文字数','タグ数','タグ']); //取得する内容の列名を書き込む。
// 投稿データを1列ずつ呼び出し書き込む
for (var i in medias) {
sheet.appendRow(medias[i]);
}
}
// 投稿データ(メディア)を取得する関数
function getInstagramMedia(instragramID,username,ACCESS_TOKEN) {
// 取得するデータとして投稿データ(メディア)を選択
var fields_user_url = 'media';
// 投稿データ(メディア)取得項目(メディアID、投稿日時、コメント数、いいね数、投稿リンク、メディアリンク、メディアタイプ、投稿内容)
var fields_media_url = 'id,timestamp,comments_count,like_count,permalink,media_url,media_product_type,caption';
// API用URL取得
var instagram_API_url = 'https://graph.facebook.com/v13.0/' + instragramID + '?fields=business_discovery.username('+ username + '){' + fields_user_url + '{' + fields_media_url + '}}&access_token=' + ACCESS_TOKEN;
console.log(instagram_API_url); //URLの確認、エラーが出たらWEBブラウザに入力
// エンコード(外国語に翻訳するイメージ)を実施してプログラムが読める状態にする
var instagram_API_url_encode = encodeURI(instagram_API_url);
//URLからデータを取得 JSONという形式に変更する
var rsponse = UrlFetchApp.fetch(instagram_API_url_encode);
var jsonInstagram = JSON.parse(rsponse);//JSONデータをパース
// 投稿データ(メディア)をJsonから抽出する
var media = jsonInstagram['business_discovery']['media']['data'];
// 初期値宣言(おまじないと思ってください。)
var medias = [];
var caption = [];
var tag = [];
//投稿データ(メディア)を取得する(1行ずつ繰り返す)
for (var i in media) {
//投稿本文を抽出
caption = [jsonInstagram['business_discovery']['media']['data'][i]['caption']];
medias[i] = [
jsonInstagram['business_discovery']['media']['data'][i]['id'], //メディアID
jsonInstagram['business_discovery']['media']['data'][i]['timestamp'], //メディアの投稿日時
jsonInstagram['business_discovery']['media']['data'][i]['comments_count'], //コメント数
jsonInstagram['business_discovery']['media']['data'][i]['like_count'], //いいね数
jsonInstagram['business_discovery']['media']['data'][i]['permalink'], //投稿へのリンク
jsonInstagram['business_discovery']['media']['data'][i]['media_url'], //メディアへのリンク
jsonInstagram['business_discovery']['media']['data'][i]['media_product_type'], //投稿のタイプ
caption[0].length, //投稿本文の文字数
];
tag = caption[0].match(/[##][A-Za-zA-Za-z一-鿆0-90-9ぁ-ヶヲ-゚ー._-]+/gm); //#ハッシュタグの抽出
if(tag === null){
//タグが無ければ何もしない
}else{
// タグ数をカウント
tag.unshift(tag.length)
medias[i] = medias[i].concat(tag);
}
}
return medias //投稿データを返す
}
まとめ
メディアID、投稿日時、コメント数、いいね数、投稿リンク、メディアリンク、メディアタイプ、投稿内容、ハッシュタグ数、ハッシュタグを一覧で取得することができました。
これで投稿の内容の分析をしていくことができそうです。
過去の投稿一覧を取得できるのは見やすくていいですね。
ちなみに自分だけでなく他のユーザーのアカウントのデータを取得することができます。
インフルエンサーの投稿内容の調査などに使えそうですね。
また、このプログラムで取得できるのは最大25件の取得です。
1回のURLアクセスで25件分の結果がAPIで取得できるためで、さらに多くの件数を取得するようプログラムを作成することもできるのですがGoogle apps scrriptには6分の壁があり、途中で中断されてしまったので載せていません。(プログラムを開始してから6分で強制終了されるようになっているようです、おそらくGoogleの負荷を下げるため)
※25件以上の取得をするプログラムとしては、データの中にafterという要素がありそこに26件目以降を取得するためのAPIのURLが格納されているのでそのURLからさらにデータを25件分取得、そのURLのafter要素からさらにデータを取得というのを繰り返すことで取得できます。
次回はハッシュタグのトップ投稿なども試していきたいと思います。
コメント