前回に続いてまたいろいろなAPIを実行してみようシリーズです。
前回はインスタのAPIを使って投稿毎のデータ(いいね、投稿日時、コメント数、リンク)の取得を行ってみました。
今回は画像を取得しようかとおもいます。
ちなみに前回のやつは以下です。
目次
事前準備
もちろん初見の方は以下の準備が必要になります。
ですが、以前事前準備を済ませてる方はすぐできます。
- instagramのアカウントをプロアカウントへ変更
- Facebookのページ作成
- APIのアクセストークンを3段階で取得
APIをブラウザでリクエスト
画像取得APIは以下のAPIのページを見てパラメータなどを設定してます。
https://developers.facebook.com/docs/instagram-basic-display-api?locale=ja_JP
んでさっそくパラメータをセットしたものが以下です。今回はたくさんデータを取得してしまわぬよう、5件のみ取得するようにしました。
https://graph.facebook.com/v12.0/「自分のID」?fields=media.limit(5){media_url,permalink,timestamp}&access_token=「自分のアクセストークン」
では上記をブラウザで実行してみます。
こんな感じでデータ取得できました。画像は「media_url」で取得できてます。このURLで再度ブラウザで実行すると画像が見れます。
コード
そして、コード上で実行し画像をセルに表示できるようにしたいと思います。
media_urlの部分はURLをセルに表示しても意味がないので、=IMAGES関数で画像に変換してます。
function mediaCollection() {
var business_account_ID = "自分のビジネスアカウントID";
var access_token = "自分のアクセストーク";
var facebook_url = "https://graph.facebook.com/v12.0/" + business_account_ID + "?fields=media.limit(5){media_url,permalink,timestamp}&access_token=" + access_token;
// JSONデータ取得
var json = UrlFetchApp.fetch(encodeURI(facebook_url)).getContentText();
var jsonData = JSON.parse(json);
// InstDataシートを選択
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('InstMedia');
var row = 2; // スプレットシートの開始行(2行目から)
// セルを削除
DeleteCell();
// 取得したJSONデータの数
var dataCnt = jsonData['media']['data'].length
// 取得したデータの分だけくり返し
for(var i=0; i<dataCnt; i++){
var timestamp = jsonData['media']['data'][i]['timestamp']; // timestamp=投稿日時
var mediaurl = "=IMAGE(\"" + jsonData['media']['data'][i]['media_url'] + "\")"; // media_url=メディアのURL
var permalink = jsonData['media']['data'][i]['permalink']; // permalink=リンク
sheet.getRange(row,1).setValue(Utilities.formatDate(new Date(timestamp), 'Asia/Tokyo','yyyy/MM/dd HH:mm:ss'));
sheet.getRange(row,2).setValue(mediaurl);
sheet.getRange(row,3).setValue(permalink);
row++;
}
}
function DeleteCell(){
// InstDataシートを選択
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('InstData');
//最終行を取得
var lastRow;
lastRow = sheet.getLastRow();
//指定セルに値があるか検証
if(sheet.getRange(2, 1).getValue()){
//指定セルに値があった場合すべての内容を削除
sheet.getRange(2,1,lastRow,5).clearContent();
}
最後
実行結果は画像が丸見えで恥ずかしかったので見せませんが、うまく実行はできたかと思います。
今回は取得する画像数は5件に絞ってますが、もっと取得できます。ただし取りすぎは良くない!制限もありますし。
今回もちょっとあっさりで短いですがこの辺で。