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秒程度でした。
スポンサーリンク








