概要
Twitter APIは2023年2月2日に料金プランの変更を行いました。それに伴いTwitter API v1.1からv2への移行を勧めています。(詳しくは以下記事参照)
それでもTwitterへの自動化を行いたい方はいるかと思いますが、ざっと調べてみるとGASからTwitter API v2を利用して、ツイートする記述記事がなかったのです。。そこで、誰かの助けになるかと思い、GASからTwitter API v2を利用して、ツイートを行う方法を公開します!
アカウント登録
まずはTwitter Developer Platformへ登録を行いましょう!
アカウント作成については以下記事が参考になるかと思います。
ツイート自動化コード
アカウント作成までできたら、実際にツイートを自動化するGASのコードをシェアします!
GASってどうやって始めるのって方は、以下記事が参考になるかと!
また、ツイートを行うための認証処理については以下Twitterドキュメント2つを参考に実装しました。
const CONSUMER_KEY = '<API Key(Consumer Keys)>'; // 自身のAPI Keyを入力
const CONSUMER_SECRET = '<API Secret(Consumer Keys)>'; // 自身のAPI Secretを入力
const ACCESS_TOKEN = '<Access Token(Authentication Tokens)>'; // 自身のAccess Keyを入力
const ACCESS_SECRET = '<Access Secret(Authentication Tokens)>'; // 自身のAccess Secretを入力
const END_POINT = 'https://api.twitter.com/2/tweets';
function tweet(text = 'Hello World!') {
// アプリケーションが一意のリクエストごとに生成する必要がある一意のトークン生成
const oauth_nonce = generateRandomStr(42);
// タイムスタンプ生成
const timestamp = getTimeStamp();
// 署名生成
let parameters = [];
parameters.push('POST');
parameters.push(encodeRFC3986(END_POINT));
parameters.push(encodeRFC3986(`oauth_consumer_key=${CONSUMER_KEY}&oauth_nonce=${oauth_nonce}&oauth_signature_method=HMAC-SHA1&oauth_timestamp=${timestamp}&oauth_token=${ACCESS_TOKEN}&oauth_version=1.0`));
// 署名ベース文字列生成
const signatureBaseString = parameters.join('&');
// 署名キー生成
const signingKey = `${CONSUMER_SECRET}&${ACCESS_SECRET}`;
// 署名生成
let signeture = convertToHMmacSHA1(signatureBaseString, signingKey);
signeture = encodeRFC3986(signeture);
const options = {
"method": "POST",
"contentType": "application/json",
"headers": {
"Authorization": `OAuth oauth_consumer_key="${CONSUMER_KEY}", oauth_nonce="${oauth_nonce}", oauth_signature="${signeture}", oauth_signature_method="HMAC-SHA1", oauth_timestamp="${timestamp}", oauth_token="${ACCESS_TOKEN}", oauth_version="1.0"`
},
"payload": JSON.stringify({
"text": text
}),
'muteHttpExceptions': true,
};
const response = JSON.parse(UrlFetchApp.fetch(END_POINT, options));
console.log(response);
}
function getTimeStamp() {
const now = new Date();
const formatNow = Utilities.formatDate(now, 'GMT', 'dd MMM yyyy HH:mm:ss z');
const unixTime = Date.parse(formatNow) / 1000;
return unixTime.toFixed();
}
// HMAC SHA 1ハッシュ化&Base64エンコード
function convertToHMmacSHA1(text, signingKey) {
const rowHash = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_1, text, signingKey);
return Utilities.base64Encode(rowHash);
};
// パーセントエンコード化(RFC3986)
function encodeRFC3986(text) {
let encodedText = encodeURIComponent(text);
const encoders = {
'!': '%21',
"'": '%27',
'(': '%28',
')': '%29',
'*': '%2A'
}
for (let key in encoders) {
encodedText = encodedText.replaceAll(key, encoders[key]);
}
return encodedText;
}
function generateRandomStr(l = 0) {
// 生成する文字列に含める文字セット
var c = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var cl = c.length;
var r = "";
for (var i = 0; i < l; i++) {
r += c[Math.floor(Math.random() * cl)];
}
return r;
}
APIキー、アクセスキー生成
上記コードの中で必要な、API KeyとAccess Keyを取得する手順を以下に解説します!
まずは開発者ポータルから自身のアプリケーションを選択して、「User authentication settings」を確認し、Editボタンを押してください!(実際の画面と若干異なっているかもしれません!)
編集画面に飛んだら、以下の通り設定します!
1.「App permissions」をRead and writeに設定
2.「Type of App」を「Web App, Automated App or Bot」に設定
3.「App info」の「Callback URI」/「Website URL」を「https://sample.com」に設定(※本設定は使用しないのですが、必須項目である為何かしらURLを入力する必要があります。)
入力が完了したら、saveボタンで保存しましょう!
画面上のタブから「Keys and tokens」を選択し、以下「API Key and Secert」と「Access Token and Secret」を作成してください!
作成時にKey/TokenとSecret情報の画面が表示されるので、そちらをコピーして先ほどのコードの当該箇所に貼り付けてください!
以上でコードを実行する準備は整いました!
コード実行
では実際に実行してみましょう!
GASの画面から実行する関数を「tweet」に設定し、▶︎実行ボタンを押してください!
そうすると、実際に「Hello World!」が表示されたかと思います!
あとは自由に上記コードのtweet関数の引数:textの値を呟きたい内容に変えていただければと思います!
まとめ
今回、GASでTwitter API v2を利用して、実際に呟く方法をシェアしました!これで自動化につながりますね!
本記事が少しでもどなたかの役立に立てればと思います!
ツイートAPIについて、もっと詳しく知りたい方は以下参照です!