前提・実現したいこと
Google Apps Scriptで動作するTwitter Botを作成中です。
スプレッドシートにある検索ワードをtwitterで検索し、ツイートにいいね or RTをする。その後、この動作を一定期間毎に繰り返すBotを作成したいです。
発生している問題・エラーメッセージ
下記の記事を参考にさせていただき、動作させようとしています。
https://moripro.net/gas-twitter-bot/
https://teratail.com/questions/240990
スプレッドシートの検索キーワードで検索した、最終TweetIDがスプレッドシートに上書きされて、その後、それをもとに、
"Twitteを検索"→"スプレッドシートの最終TweetIDが更新"→いいね or RTをする→"最終TwitterID以降で、検索ワードをTwitterで検索"
としたいのですが、スプレッドシートの最終TweetIDが更新されません。
こちらについて、前回の質問と同じくなのですが、ご回答いただくために、不足情報が何かもわからない状況です。そのあたりから、ご教示いただきたいです。
現在のソースコード
//認証用インスタンスの生成 var twitter = TwitterWebService.getInstance( ' ',//API Key ' '//API secret key ); // 認証 function authorize() { twitter.authorize(); } // 認証解除 function reset() { twitter.reset(); } // 認証後のコールバック function authCallback(request) { return twitter.authCallback(request); } // セルを取得 var sheetData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); // 「シート1」はシート名 /** いいね or RT 機能 ① 検索ワードをスプレッドシートから取得する ② 検索ワードをTwitterで検索する(たくさん取れてしまうので「直近10分間」の検索を10分毎に行う) ③ ツイートに いいね or RT をする ④ 他に検索ワードがあれば②に戻る */ // ツイートを検索する // 【参考】 https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets function findTweets (searchWord, lastTweetId) { var service = twitter.getService(); var query = { q: searchWord, // 検索ワード lang: 'ja', // 日本語検索 locale: 'ja', // 日本限定で検索 result_type: 'recent', // 直近のツイートを検索 since_id: lastTweetId // これ以前のツイートは見ない } // 検索の内容を queryStr にまとめていく var queryStr = ''; for (var key in query) { // URLに日本語や記号を付けると上手く検索できないことがあるので#も変換する encodeURIComponent をする queryStr += key + '=' + encodeURIComponent(query[key]) + '&' } // &が余計に付いているので削除しておく var queryStr = queryStr.slice(0, -1); var response = service.fetch('https://api.twitter.com/1.1/search/tweets.json?' + queryStr); var result = JSON.parse(response) return result.statuses } function main () { // ① 検索ワードをスプレッドシートから取得する var searchWords = pickUpSearchWords(); // searchWordsの中身は // [ [ '投稿内容', 'いいね or RT', '最終TweetId', '実行回数'] , [ '投稿内容', 'いいね or RT', '最終TweetId', '実行回数'],....,] // という形式になっているので1つずつ見ていく for (var i = 0, il = searchWords.length; i < il; i++ ) { var searchWord = searchWords[i][0]; var type = searchWords[i][1]; var lastTweetId = searchWords[i][2]; // !!!!!! 追加 !!!!!!! var limit = searchWords[i][3]; // ② Twitterで検索する var tweetList = findTweets(searchWord, lastTweetId); var count = 0 // ③ 複数件ツイートを取得されるので for を使って1つずつツイートを取り出し いいね or RT をする for (var j = 0, jl = tweetList.length; j < jl; j++ ) { var tweet = tweetList[j]; if (tweet.id_str > lastTweetId) { lastTweetId = tweet.id_str; } // !!!!!! 追加 !!!!!!! if (count == limit) { // lastTweetIdを出来るだけ新しくしたい場合は continue; // 次回以降の実行で続きのツイートを使いたい場合は break; break; } count++; if (type == 'いいね') { putFavorite (tweet); } else if (type == 'RT') { putRetweet (tweet); } } // 最新のツイートIDを保存して重複処理をしないようにする var titleRow = 1; // 『検索ワード』とか書いている部分の行数 var lastTweetIdCol = 3; // 『最終TweetId』の列までなので3列目まで var updateCell = sheetData.getRange(i + 1 + titleRow, lastTweetIdCol, 1, 1); // i = 0 の時1行目なので+1してる updateCell.setValue(lastTweetId); } } // 検索ワードをスプレッドシートから取得する function pickUpSearchWords () { var titleRow = 1; // 『検索ワード』とか書いている部分の行数 var startRow = 1 + titleRow; // 1行目は『検索ワード』とか書いているので2行目から var startCol = 1; var endRow = sheetData.getLastRow() - titleRow; // 最後の行まで(2行目から始まっているので-1している) // !!!!!! 変更 !!!!!!! var endCol = 4; // 『実行回数』の列までなので4列目まで // 一括で取得する var cells = sheetData.getRange(startRow, startCol, endRow, endCol).getValues(); // cellsの中身は // [ [ '投稿内容', 'いいね or RT', '最終TweetId', '実行回数'] , [ '投稿内容', 'いいね or RT', '最終TweetId', '実行回数'] ,....,] // という形式になる return cells; }
回答1件
あなたの回答
tips
プレビュー