前提・実現したいこと
Google Apps Scriptで動作するTwitter Botを作成中です。スプレッドシートにある検索ワードをtwitterで検索し、ツイートにいいね or RTをする。
発生している問題・エラーメッセージ
下記の記事を参考にさせていただき、動作させようとしています。
https://kabatin.hateblo.jp/entry/2022/02/27/205845
上記のサイトで【今回はこんな感じで「検索ワード(ハッシュタグ)」、「いいね or RT」の種別と、
重複して投稿をしてしまわないように「最新TweetID」を保持するようにしてあります。】とあるのですが、
**スプレッドシートの設定で私が初心者すぎて分からなかったので設定できていません。【シート1】は作れました
スプレッドシートの検索キーワードで検索した、最終TweetIDがスプレッドシートに上書きされて、その後、それをもとに、
"Twitteを検索"→"スプレッドシートの最終TweetIDが更新"→いいね or RTをする→"最終TwitterID以降で検索"
としたいのですが、残念ながら何もおこらず、、
ご回答いただくために、不足情報が何かもわからない状況です。そのあたりから、ご教示いただきたいです。
現在のソースコード
// ベアラートークンと認証用インスタンス
var bearerToken = ' '
var twitter = TwitterWebService.getInstance(
' ', // 作成したアプリケーションのConsumer Key
' ' // 作成したアプリケーションのConsumer Secret
);
var userID = ' ' // Twitter ユーザID
// 認証周り
function authorize() { twitter.authorize(); } // 認証
function reset() { twitter.reset(); } // 認証解除
function authCallback(request) { return twitter.authCallback(request); } // 認証後のコールバック
// シートを取得
var sheetData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); // 「シート1」はシート名
// APIコール時のオプション(GET)
const getOption = {
method: 'get',
contentType: 'application/json',
muteHttpExceptions: true,
headers: { Authorization: 'Bearer ' + bearerToken }
}
// APIコール時のオプション(POST)
const postOption = {
method: 'post',
contentType: 'application/json',
muteHttpExceptions: true,
headers: { Authorization: 'Bearer ' + bearerToken },
}
function main()
{
var service = twitter.getService();
var searchWords = pickUpSearchWords();
for (var i = 0; i < searchWords.length; i++)
{
var searchWord = searchWords[i][0];
var type = searchWords[i][1];
var lastTweetId = searchWords[i][2];
var tweetList = findTweets(service, searchWord, lastTweetId); if (tweetList == null) { continue } for (var j = 0; j < tweetList.length; j++) { var tweet = tweetList[j]; if (tweet.id > lastTweetId) { lastTweetId = tweet.id; } if (type == 'いいね') { putFavorite (service, tweet); } else if (type == 'RT') { putRetweet (service, tweet); } } var titleRow = 1; var lastTweetIdCol = 3; var updateCell = sheetData.getRange(i + 1 + titleRow, lastTweetIdCol, 1, 1); updateCell.setValue(lastTweetId);
}
}
// 検索ワードをスプレッドシートから取得する
function pickUpSearchWords()
{
var titleRow = 1;
var startRow = 1 + titleRow;
var startCol = 1;
var endRow = sheetData.getLastRow() - titleRow;
var endCol = 3;
return sheetData.getRange(startRow, startCol, endRow, endCol).getValues();
}
// ツイートを検索する
function findTweets(service, searchWord, lastTweetId)
{
// API URL
var getPoint = 'https://api.twitter.com/2/tweets/search/recent?query='
// 検索キーワードとパラメータ
var keyWord = encodeURIComponent(searchWord)
var params = '&tweet.fields=author_id,id,text,created_at&max_results=20'
params += '&since_id=' + lastTweetId
// アクセスURL組み立て
var url = getPoint + keyWord + params
var response = service.fetch(url, getOption);
var result = JSON.parse(response)
return result.data
}
// いいね
function putFavorite(service, tweet)
{
targetTweet = { 'tweet_id': tweet.id }
postOption.payload = JSON.stringify(targetTweet)
service.fetch('https://api.twitter.com/2/users/' + userID + '/likes', postOption);
}
// リツイート
function putRetweet(service, tweet)
{
targetTweet = { 'tweet_id': tweet.id }
postOption.payload = JSON.stringify(targetTweet)
var result = service.fetch('https://api.twitter.com/2/users/' + userID + '/retweets', postOption);
}
回答1件
あなたの回答
tips
プレビュー