Google Apps ScriptでTwitterに投稿する方法
前回、Twitter Developerの登録方法について書きました。今回はGoogle Apps Scriptで自動ツイートする方法について書きたいと思います。
GASにOAuth認証用ライブラリの追加
OAuth認証用のライブラリを追加します。画面左にある [ライブラリ] の横の [+] ボタンをクリックし、表示されたダイアログの [スクリプトID] ボックスに下記のライブラリIDを入力し、[検索] ボタンをクリックしましょう。
1CXDCY5sqT9ph64fFwSzVtXnbjpSfWdRymafDrtIZ7Z_hwysTY7IIhi7s
「検索」ボタンをクリックすると、以下のように情報が現れます。「追加」ボタンをクリックします。
エディタに戻りますが、左サイドメニューに「OAuth1」と表記されるので確認してください。これで導入完了です。
Twitter DeveloperにコールバックURL登録
Twitter DeveloperにコールバックURLを登録します。コールバックとはTwitterでログイン認証が終わったら戻ってくる場所を示します。要するに自身のGASプロジェクトIDを登録するわけです。
GASのエディターの左サイドにある歯車アイコンをクリックします。現れた画面の下の方にスクリプトIDが記載されているのでコピーしましょう。
Twitter Developer Portalサイトに行って「Authentication settings」の「Edit」ボタンをクリックします。
https://developer.twitter.com/en/portal/dashboard
Callback URLsのところに先程コピーしたスクリプトIDを貼り付けます。下部の「Save」ボタンをクリックして完了です。
API KeyとAccess Tokenの取得
次に以下の4つのキーを取得します。GAS側で使うものです。
- API Key
- API Secret Key
- Access Token
- Access Token Secret
「Keys and tokens」タブを開き、「API Key and Secret」と「Access Token and Secret」の横にある青い「Generate」ボタンをクリックします。ちなみに一度発行していた場合はボタンのテキストが「Regenerate」となっています。もし発行後に忘れてしまった場合はこのボタンで再発行できます。(キーの内容が変わるので注意)
ソースコード
最後にGAS側のソースコードになります。このプログラムは以下のサイトを参考に少し手を加えました。とりあえずスプレッドシートを介さずGASだけで完結するよう、ツイート内容はGASのソースコード内に設定しています。スプレッドシートを使う場合は適宜修正してください。
以下がソースコードです。頭の4行に各キーを入力してください。
// Twitter API認証情報 var CONSUMER_KEY = 'XXXXXXXXXXX'; // consumer key = API key var CONSUMER_SECRET = 'XXXXXXXXXXX'; //consumer secret = API secret key var TOKEN = 'XXXXXXXXXXX'; var TOKEN_SECRET = 'XXXXXXXXXXX'; // Twitter APIの認証とレスポンス取得 function run() { var service = getService(); var tweet = "おはようございます。これはBotです。自動でツイートするプログラムを開発中です。これが表示されたら成功です。" if (tweet == '') { Logger.log('Tweetが選択できませんでした'); return false; // 終了 } Logger.log('Tweet Selected : '+tweet); if (service.hasAccess()) { var url = 'https://api.twitter.com/1.1/statuses/update.json'; var payload = { status: tweet }; var response = service.fetch(url, { method: 'post', payload: payload }); } else { var authorizationUrl = service.authorize(); Logger.log('URLを確認してください: %s', authorizationUrl); } } function doGet() { return HtmlService.createHtmlOutput(ScriptApp.getService().getUrl()); } // 認証リセット関数。デバッグ時の初期化用。 function reset() { var service = getService(); service.reset(); } // サービス設定 function getService() { return OAuth1.createService('Twitter') .setConsumerKey(CONSUMER_KEY) // コンシューマーキー&シークレット .setConsumerSecret(CONSUMER_SECRET) // コンシューマーシークレット .setAccessToken(TOKEN, TOKEN_SECRET) // アクセストークンキー&シークレット // oAuthエンドポイントURL .setAccessTokenUrl('https://api.twitter.com/oauth/access_token') .setRequestTokenUrl('https://api.twitter.com/oauth/request_token') .setAuthorizationUrl('https://api.twitter.com/oauth/authorize') .setCallbackFunction('authCallback') // コールバック関数名 } // OAuthコールバック function authCallback(request) { var service = getService(); var authorized = service.handleCallback(request); if (authorized) { return HtmlService.createHtmlOutput('成功しました'); } else { return HtmlService.createHtmlOutput('失敗しました'); } }
実行結果
上記ソースコードを実行しましょう。以下のようにツイートされていたら成功です。(捨て垢なのでアカウント隠します…)
実行ログはこんな感じです。実行時間は1秒程度でした。
スポンサーリンク