長らく更新が出来ませんでした。理由としてはこの表題の構築にめちゃめちゃ時間がかかってしまったからです。というのも、JavaScriptは全く触れたことがなくゼロの知識からスタートした為です。
その為、コードの汚さ、インデントなどはご容赦ください。
とりあえず、ここまでに至った経緯を軽くお話します。
以前、Pythonにて同じようにTwitterいいね自動化の記事を書きました。
しかし、途中から「あれ、これ実行するとき手動じゃね?」ってなり、
色々調べたところGoogle Apps Script ならサーバーレスでいい感じに出来そうだな、という結論に至りました。
Google Apps Script、元はJava Scriptのようだったので、とりあえず「Twitter API いいね 自動化 GAS(Google Apps Scriptの略)」で調べたところ似たような感じの記事が1件存在したのですが、残念ながら有料noteでした。
心の中で1000円(有料note)と葛藤しましたが、勉強にもなるし、ということでここから長い挑戦が始まりました。
いいねについて
「いいね」とはその人のつぶやきに対する最高の敬意を表す行為です。直感で「あ、いいな」と感じたら大抵の人はこのいいねボタンをクリックします。本当は自動化など感情がないまま押してはいけません。(よってやりすぎるとBANされる)
実行環境
今回は以下の環境で行いました。
- ブラウザ(一応firefox、chromeでもOK)
- Twitter API
- Google Apps Script
- Google Spread Sheet
手順
今回はこの流れで行いました。
1.Twitter APIで検索結果を拾い集める
2.拾い集めた検索結果を一旦Google Spread Sheetにペタッと貼り付ける。
3.Sheetを参照して、そのつぶやきを探していいねをポチポチする
Twitter APIの環境構築は素晴らしいサイトがたくさんあるのでそちらをご参照ください。
私が参考にしたサイトはこちら
コード
var twitter = TwitterWebService.getInstance(
'xxxx', // 作成したアプリケーションのConsumer Key
'xxxx' // 作成したアプリケーションのConsumer Secret
);
// 認証を行う(必須)
function authorize() {
twitter.authorize();
}
// 認証をリセット
function reset() {
twitter.reset();
}
// 認証後のコールバック(必須)
function authCallback(request) {
return twitter.authCallback(request);
}
//スプレッドシートに番号、id、つぶやき内容を書き込んでいく
function getFavor(){
var service = twitter.getService();
var json = service.fetch("https://api.twitter.com/1.1/search/tweets.json?q=ブログ初心者&count=100");
var array = JSON.parse(json);
Logger.log(array);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Twitter');
for (var i = 0; i < 100; i++) {
sheet.getRange(i+1, 1).setValue(i+1)
sheet.getRange(i+1, 2).setValue(array.statuses[i].id_str)
sheet.getRange(i+1, 3).setValue(array.statuses[i].text)
}
}
//スプレッドシートに番号、id、つぶやき内容を書き込んでいく
function myFunction() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getRange('A1:B100');
var values = range.getValues();
return values;
}
//スプレッドシートから1件ずつポチる
function getFavorite(values){
var service = twitter.getService();
for (var i = 0; i < 100; i++) {
var id_str = myFunction(values)[i][1];
var responce = service.fetch('https://api.twitter.com/1.1/favorites/create.json?id='+id_str, {
method: 'post',
muteHttpExceptions: true
});
Logger.log(responce); //出力されているか確認
}
}
課題
今回珍しく1からの作業だったので苦労した点を挙げます。
idがとれない
最初のSheetに貼り付けところでなかなかidが取れなくて、苦戦していたのですが、取ってくるべきは「id」ではなく「id_str」でした。
関数から関数への引継ぎ方が全く分からない
つぶやき内容を全て書き込んだのはいいのですが、この書き込んだ値をいいね関数にどうやって与えるか苦労しました。結果として戻り値を知りました。
順番にいいねが押せない
とりあえずidは持ってくることが出来たのですが、今度はidを一気に取ってきてしまい、うまくJSONに1つずつあげることが出来ませんでした。結果として配列を知りました。A列の番号もその為に入れています。(他にもっと簡単な方法があったと思いますが…)
感想
JavaScript後半は結構書きやすいと思いましたが、やっぱり色々調べながらだったので、大変でした。Progateとかでもっと勉強しようかと思います。
コメント