インスタグラムAPIから、website_clicksの数値をスプレッドシートに自動取得したい
解決したいこと
前提、インスタグラムAPIから取得した数値を、スプレッドシートに自動記入するGAS sciptを実装しています。
現状できていることとしては、リーチ数、インプレッション数、プロフィール閲覧数などは、毎日自動取得ができております。
解決したいこととしては、website_clicksのみ、取得方法がわかりません。
発生している問題・エラー
TypeError: Cannot read properties of undefined (reading 'values')
getInsight @ コード.gs:51
insight_reporting @ コード.gs:13
実装しているコード
function insight_reporting(){
var date = new Date();
//instagram数値記録用のスプレットシートID
var SSId = '伏字';
//instagram Graph API 必要情報
var instragramID = '伏字';
var username = '伏字';
var ACCESS_TOKEN = "伏字";
getInsight(date,SSId,instragramID,username,ACCESS_TOKEN);
}
//instagramの数値を引っ張り記録する関数
function getInsight(date,SSId,instragramID,username,ACCESS_TOKEN) {
var mySS = SpreadsheetApp.openById(SSId); //IDでスプレッドシートを開く
var sheetName = 'Contents'; //スプレッドシートのContentsのシートを参照
var sheet = mySS.getSheetByName(sheetName);
//日付を取得して1日前に戻す
var today = Utilities.formatDate(date, 'Tokyo/Asia', 'yyyy/MM/dd');
//現在の「日」を取得
var day = date.getDate();
//前日日付にしたいので-1する
date.setDate(day-1);
//日付の表示形式を整形する
var yesterday = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd');
var facebook_url = 'https://graph.facebook.com/v8.0/'+ instragramID +'/insights?metric=reach,impressions,profile_views&period=day&access_token='+ ACCESS_TOKEN;;
var encodedURI = encodeURI(facebook_url);
var response = UrlFetchApp.fetch(encodedURI); //URLから情報を取得
var jsonData = JSON.parse(response);//JSONデータをパース
var reach = jsonData.data[0].values[1].value;
var impressions = jsonData.data[1].values[1].value;
var profile_views = jsonData.data[2].values[1].value;
//シートにデータを追加またはアップデート
var newData =[yesterday,reach,impressions,profile_views];
insertOrUpdate2(sheet, newData);
}
//行の存在に応じて追加もしくは更新を行う関数
function insertOrUpdate2(sheet, data) {
var row = findRow2(sheet, data[0]);//日付比較の関数、行番号を受け取る
if (row) { // 行が見つかったら更新
sheet.getRange(row, 1, 1, data.length).setValues([data]);
} else { // 行が見つからなかったら新しくデータを挿入
sheet.appendRow(data);
}
}
// 日付比較を行い、データがあれば行番号を返す関数
function findRow2(sheet, date) {
var searchDate = Utilities.formatDate(new Date(date), 'Asia/Tokyo','yyyy/MM/dd');
var values = sheet.getDataRange().getValues();
Logger.log(values + "findRow");
for (var i = values.length - 1; i > 0; i--) {
var dataDate = Utilities.formatDate(new Date(values[i][0]), 'Asia/Tokyo','yyyy/MM/dd');
if (dataDate == searchDate) {
return i + 1;
}
}
return false;
}
0 likes