前回に続いてまたいろいろな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件に絞ってますが、もっと取得できます。ただし取りすぎは良くない!制限もありますし。

今回もちょっとあっさりで短いですがこの辺で。