各種SNSの情報をスプレッドシートとGASでまとめた方法

運用するSNSが増えてきて、色々なアカウントのフォロワー数の推移などをまとめてみたくなってきたが、各種ツールがバラバラ。

まとめたかったSNSをスプレッドシートでアカウントごとまとめられるようにしたので、方法を記載。

まとめたかった情報

まとめたかったSNSは、各それぞれ、複数あった。(LINEだけは1つ)

  • Instagram
  • Twitter
  • Tiktok
  • LINE友だち数

Facebookはもういいかな、と思って割愛。

 

基本的にはGSS+GASで整理。

Colabを使ってPythonもありかと思ったが、慣れているスプレッドシートとGoogle Apps Scriptで実装

Instagramの取得方法

サンプルコード置いておくので、読み解いてください。

動的なWEBはクローリングできないから外部サービスを利用。

https://gramhir.com/
ここで、URL取得してくださいな。

function instagramfollower() {

//スプレッドシートの入力指定
var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のSpreadSheetを取得
var sheet = activeSpreadSheet.getSheetByName("Instagram"); // シート(SpreadSheetの下のタブ名を指定)
var today = Utilities.formatDate(new Date(), "JST","yyyy/MM/dd")
var lastRow = sheet.getLastRow()
var row = lastRow + 1;

//1つ目のアカウント
  var url1 = UrlFetchApp.fetch("https://gramhir.com/profile/surfer_lab/54208291828");
  var text1 = url1.getContentText("utf-8")
  var follower1 = Parser.data(text1).from('

Twitterの取得方法

これもサンプルコード置いておくので、読み解いてください。

function TwitterFollowers() {
//スプレッドシートの入力指定
var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のSpreadSheetを取得
var sheet = activeSpreadSheet.getSheetByName("Twitter"); // シート(SpreadSheetの下のタブ名を指定)
var today = Utilities.formatDate(new Date(), "JST","yyyy/MM/dd")
var lastRow = sheet.getLastRow()
var row = lastRow + 1;

//twitterのID指定
var twitter1 = "surfer_lab"
var twitter2 = "training__share"
var twitter3 = "cartokuu"

//Twitter取得(twitter1)
var result = getTwitterNumFollowersJson(twitter1);
result.followers_count

//Twitter取得(twitter2)
var result2 = getTwitterNumFollowersJson(twitter2);
result2.followers_count
//Twitter取得(twitter3)

var result3 = getTwitterNumFollowersJson(twitter3);
result3.followers_count
//データ格納
sheet.getRange(row, 1).setValue(today);
sheet.getRange(row, 2).setValue(result.followers_count);
sheet.getRange(row, 3).setValue(result2.followers_count);
sheet.getRange(row, 4).setValue(result3.followers_count);
 

function getTwitterNumFollowersJson(screenName) {
 
var baseURL = "https://cdn.syndication.twimg.com/widgets/followbutton/info.json?screen_names=";
var response = UrlFetchApp.fetch(baseURL + screenName); 
var result = null;
 
if (response.getResponseCode() == 200) {
var text = response.getContentText("utf-8");
 
if (text != "") {
var data = JSON.parse(text);
if (data.length == 1) {
result = data[0];
}
}
}
return result;
}
 
function getNumFollowers(screenName) {
 
var result = getTwitterNumFollowersJson(screenName);
if (result) {
return result.followers_count;
} else {
return 0; // Not Found;
}
}
}

Tiktokの取得方法

はい、お決まりのソースコードべた置きです。

ここでPhantom JSというツールを知ったので、このツールのAPIを使っています。

APIキーをスクリプトプロパティに設定しましょう。

https://phantomjscloud.com/

function tiktok() {
  
//スプレッドシートの入力指定
var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のSpreadSheetを取得
var sheet = activeSpreadSheet.getSheetByName("Tiktok"); // シート(SpreadSheetの下のタブ名を指定)
var today = Utilities.formatDate(new Date(), "JST","yyyy/MM/dd")
var lastRow = sheet.getLastRow()
var row = lastRow + 1;

//ファントムのKEY
var key = PropertiesService.getScriptProperties().getProperty('PHANTOMJSCLOUD_ID');

//1つ目のアカウント
var payload1 = 
     {url:"https://www.tiktok.com/@surferlab",
      renderType:'HTML',
      outputAsJson:true};
 payload1 = JSON.stringify(payload1);
 payload1 = encodeURIComponent(payload1);
 var url1 = 'https://phantomjscloud.com/api/browser/v2/'+ key +'/?request=' + payload1;                
 var response1 = UrlFetchApp.fetch(url1);
 var text1 = response1.getContentText()
 var follower1 = Parser.data(text1).from('followers-count').to('<').build();

//2つ目のアカウント
var payload2 = 
     {url:"https://www.tiktok.com/@training_share",
      renderType:'HTML',
      outputAsJson:true};
 payload2 = JSON.stringify(payload2);
 payload2 = encodeURIComponent(payload2);
 var url2 = 'https://phantomjscloud.com/api/browser/v2/'+ key +'/?request=' + payload2;                
 var response2 = UrlFetchApp.fetch(url2);
 var text2 = response2.getContentText()
 var follower2 = Parser.data(text2).from('followers-count').to('<').build();

//3つ目のアカウント
var payload3 = 
     {url:"https://www.tiktok.com/@cartokuu",
      renderType:'HTML',
      outputAsJson:true};
 payload3 = JSON.stringify(payload3);
 payload3 = encodeURIComponent(payload3);
 var url3 = 'https://phantomjscloud.com/api/browser/v2/'+ key +'/?request=' + payload3;                
 var response3 = UrlFetchApp.fetch(url3);
 var text3 = response3.getContentText()
 var follower3 = Parser.data(text3).from('followers-count').to('<').build();


//データ格納
sheet.getRange(row, 1).setValue(today);
sheet.getRange(row, 2).setValue(follower1);
sheet.getRange(row, 3).setValue(follower2);
sheet.getRange(row, 4).setValue(follower3);
 
}

このコードだと、『\">29451』といった数字になってしまうので、GSS側のSUBSTITUTE関数で、置換してます。

LINEの友だち数をGAS経由でGSSに

もうこの辺で疲れていましたが、こちらもコード貼り。

//友だち数を取得する
function line() {

var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のSpreadSheetを取得
var sheet = activeSpreadSheet.getSheetByName("LINE"); // シート(SpreadSheetの下のタブ名を指定)
var today = Utilities.formatDate(new Date(), "JST","yyyy/MM/dd")
var date1 = Utilities.formatDate(new Date(), "JST","yyyyMMdd")
var lastRow = sheet.getLastRow()
var row = lastRow + 1;

//ここから友だち数の取得
var channel_token = "nH4erApLQHL6545QCepyF4GnaOBl3WCQGqUezzorA/07xe6s6v6iJtkmfGxxFafchnpcomJGjIGeJLN/NI3tQFqz9Qx0p1OvMTqputu091pOzcQeripS/b0P+I3Klfs+FA9sdYHue0fdNKqzVi1JmwdB04t89/1O/w1cDnyilFU="

//一応加工
var url = "https://api.line.me/v2/bot/insight/followers?date=" + date1;
var options = {
"method" : "get",
"headers" : {
"Authorization" : "Bearer " + channel_token,
},
"muteHttpExceptions" : true,
"validateHttpsCertificates" : false,
"followRedirects" : false
};
var res = UrlFetchApp.fetch(url, options);
var json = JSON.parse(res.getContentText());
Logger.log(json)
sheet.getRange(row, 1).setValue(today);
sheet.getRange(row, 2).setValue(json.followers);
sheet.getRange(row, 3).setValue(json.blocks);
}

アクセストークンは、LINEBizの公式アカウント側の管理画面から登録しましょう。

最後に

いろんな人の記事見てはコピペしまくったので書き方が散漫ですが動けばよし。

他の人みたいに細かい動作までは記入無理なので、これをヒントに同じような人の手助けになれば。

 

あとは、GASのトリガー設定などをして毎日記録していきますが、そういうのは割愛。

複数のSNSアカウントのフォロワー数をスプレッドシートでまとめたかったので、そのコードを共有しましたが、先人たちに感謝。

外部サービスに頼っているから止まるかもなぁ・・・