【GAS】Twitter API(X)で画像付きツイート(ポスト)
昨年、GAS(Google Apps Script)でCraft TwixというTwitter予約投稿ツールを個人開発しました。その情報を一部シェアします。
【GAS】Twitter API(X)で画像付きツイート(ポスト)
1枚だけ画像投稿するためのサンプルコードです。
現状、画像投稿と動画投稿はAPI 1.1でメディアをアップロードし、API v2で投稿しています。API v1とv2の連携や、media_idsの指定方法について悩む人が多いかもしれません。
// 画像1枚投稿
function tweetWithImage() {
// 画像URL
const imageUrl = 'https://xxx.com/wp-content/uploads/images/test.png';
// 画像のBlobデータを取得
const imageBlob = UrlFetchApp.fetch(imageUrl).getBlob();
// OAuth1.0 Service
const oauth1Service = getService1();
// 画像アップロードのURL
const uploadUrl = 'https://upload.twitter.com/1.1/media/upload.json';
// 画像アップロードのPayload
const payload = {
media_data: Utilities.base64Encode(imageBlob.getBytes())
};
// 画像アップロードのオプション
const options = {
method: 'POST',
payload: payload,
muteHttpExceptions: true
};
// 画像アップロードリクエスト
const response = oauth1Service.fetch(uploadUrl, options);
const mediaId = JSON.parse(response.getContentText()).media_id_string;
console.log('mediaId', mediaId)
// OAuth2.0認証情報
const oauth2Service = getService2();
// 投稿のURL
const endpoint2 = 'https://api.twitter.com/2/tweets';
// 投稿のPayload
const tweetPayload = JSON.stringify({
'text': 'Craft Twix!',
'media': {
'media_ids': [mediaId]
}
});
// 投稿のオプション
const tweetOptions = {
method: 'POST',
headers: {
Authorization: 'Bearer ' + oauth2Service.getAccessToken(),
'Content-Type': 'application/json'
},
payload: tweetPayload,
muteHttpExceptions: true
};
// 投稿投稿リクエスト
const tweetResponse = UrlFetchApp.fetch(endpoint2, tweetOptions);
// レスポンスをログに出力
console.log(tweetResponse.getContentText());
}
getService1とgetService2の関数で各APIキーを取得しています。
次の手順に従ってテストを実施できます。
-
tweetWithImage
という関数をGASにコピー&ペーストします。 -
imageUrl
を、投稿したい画像のURLに書き換えます。 - GAS上で、実行ログの左隣にあるドロップダウンメニューから関数を選択し、
実行
ボタンをクリックします。
画像を複数枚にする対応などはそれほど難しくないはずです。動画投稿は分割アップロードなどが必要でしょう。
【GAS】Twitter API(X)の個人開発の感想
GASははじめて使いましたが平易で扱いやすかったです。Googleが開発するCLIツール「clasp」を導入しました。「clasp」は簡単に導入できて、ほとんど問題が発生しなかったため、よい選択肢ではないでしょうか。
Twitter APIの有料化がなければおそらく開発しなかっただろうツール。
GASとスプレッドシートでTwitter(X)自動投稿(予約投稿)botツール「Craft Twix」
昨年はTwitter、Twitter APIの仕様変更も含めてやや振り回された1年でした。有料化するにしても、もう安価なプランも含めて緩やかな階段に整えてほしいですかね。
自分だけではなくいろいろな人に使ってもらうことを考えると…、もう少し安価な読み込みプランがあれば読み込みの追加実装を考えたいですかね。APIは結構振り回されるため、いい方向に改善されなければ他のプロジェクトに力を入れたいですかね。
作りたいものはたくさんある方です。今後はもう少し規模感があるものも含めて個人開発できればいいなと思っています。
ご参考になれば幸いです。
Discussion