GAS + TwitterWebService 対象ツイートをリツイートする機能が動作しない問題について
解決したいこと
GASを利用し、特定のハッシュタグのツイートを自動リツイートするBOTを作っています。
実行自体はエラーなく終えることができるのですが、肝心のリツイートが行われていない状況です。
このページからコピペする形で作成しました。
https://kabatin.hateblo.jp/entry/2022/02/27/205845#%E3%81%8A%E3%81%BE%E3%81%91
該当するソースコード(参考にしたページの見本です)
// ベアラートークンと認証用インスタンス
var bearerToken = 'ベアラートークン'
var twitter = TwitterWebService.getInstance(
'Consumer API Key', // 作成したアプリケーションのConsumer Key
'Consumer API Secret Key' // 作成したアプリケーションのConsumer Secret
);
var userID = '9999999999999999999' // 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);
}
自分で試したこと
ソースコードはコピペさせてもらったものなので、スプレッドシートの入力ミスを疑いましたが参考ページと違いは無いように見えました。
解決したいこと
リツイート機能だけでも動作するようにしたいです。
ご質問をしながら解決方法を探してみますので、わかりましたら報告します。
よろしくお願いします。
0 likes