Twitter
GoogleAppsScript
gas

Google Apps Script (GAS) でTwitterへ投稿するだけの機能を実装してみる

More than 1 year has passed since last update.


はじめに

GASを使ってみたくて何か良い題材が無いかなーと探していたところ、Twitter Bot という題材を見つけました。

ただ、もっと一番シンプルなサンプルを練習用に作ろうということで、手動でTwitterに投稿するだけ、のサンプルを作ります。

まぁ投稿だけなら本来はTwitterでやればいいんですけどね。あくまで練習用ということで。


下準備


Twitter API のキーを取得する

Twitter Application Management にアクセスし、APIキー(Consumer Key)を取得する。

「Consumer Key (API Key)」「Consumer Secret (API Secret)」が取得できたらOK。

アクセストークンでは無いのでご注意を。

※ APIキーを取得するだけなんですが、意外に苦労したので、詰みポイントをまとめました。

・APIキー取得するためにTwitterに電話番号の登録が必要

・Twitterに電話番号を登録する際に認証番号の通知が来ないことがある

⇒言語設定を[英語]にすることで通知が受け取れるようになる

・確認番号の認証が失敗する

⇒言語設定を[日本語]に戻してから認証を行う

・Callback URLを設定する

⇒ Callback URLを設定していないと後述の authorize() で認証エラーが発生します

Twitter DevelopersでAPIキーの取得すると書いてある記事もあるのですが、これは昔の話で現在はTwitter Application ManagementからAPIキーを取得するようですね。


TwitterWebService ライブラリ の導入

TwitterWebService ライブラリを導入します。公式のライブラリではないようです。(TwitterWebService.gs)

プロジェクトキー: 1rgo8rXsxi1DxI_5Xgo_t3irTw1Y5cxl2mGSkbozKsSXf2E_KBBPC3xTF

ネットで見かけるのは「MFE2ytR_vQqYfZ9VodecRE0qO0XQ_ydfb」のプロジェクトキーを利用しているサンプルが多かったのですが、こっちのほうが新しそうなのでこっちで。

導入方法は、以下。

① スプレッドシートのスクリプトエディタのメニューから「リソース>ライブラリ」を選択し、ライブラリウィンドウを開く

2017-11-16_125538.png

② 「ライブラリの追加」欄にプロジェクトキーを打ち込み、「追加」ボタンをクリック

2017-11-21_125544.png

③ ライブラリのバージョン(最新)を指定して「保存」ボタンを押す

2017-11-21_125607.png


投稿機能の実装


入力欄と投稿ボタンを作成

以下の様に入力欄と投稿ボタンを設置します。

と言っても、セルに罫線を引いて、図形描画で図形を配置しただけです。画面準備はこれで完了。

2017-11-17_125943.png


プログラム作成

まずは、スクリプトエディタに以下のコードを入力する。

'Consumer Key (API Key)', 'Consumer Secret (API Secret)' は自分のAPIキーに置き換えてください。

// 認証用インスタンス

var twitter = TwitterWebService.getInstance(
'Consumer Key (API Key)', // 作成したアプリケーションのConsumer Key
'Consumer Secret (API Secret)' // 作成したアプリケーションのConsumer Secret
);

// 認証
function authorize() {
twitter.authorize();
}

// 認証解除
function reset() {
twitter.reset();
}

// 認証後のコールバック
function authCallback(request) {
return twitter.authCallback(request);
}

// セルを取得
var sheetData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); // 「シート1」はシート名
var postMessageCell = sheetData.getRange(2, 3); // セルの位置。縦横それぞれ1~の番号で指定できる

// ツイートを投稿
function postUpdateStatus() {
var service = twitter.getService();
var response = service.fetch('https://api.twitter.com/1.1/statuses/update.json', {
method: 'post',
payload: { status: postMessageCell.getValue() }
});
}


Twitterアプリの認証を行う

① スクリプトエディタのメニューバーにある「関数を選択」をクリックし、「authorize」を選ぶ。

2017-11-28_125212.png

② 「実行」ボタンをクリックする。

2017-11-28_125221.png

③ メニューから「表示>ログ」を選択してログを開いて、そこに表示されたURLをコピーする。(ここが最初分からなかった。)

2017-11-28_125606.png

2017-11-28_125713.png

↑認証用URL(選択されている部分)をコピーする

④ 認証用URLにアクセスし、認証を完了させる。

2017-11-29_084225.png

2017-11-29_084246.png

↑成功すると「Success」と書かれた画面が表示される。表示されたら閉じて問題ない。


送信ボタンに関数へのトリガを設定する

① 図形を選択すると出て来る「︙」をクリックし、「スクリプトを割り当て…」を選ぶ。

2017-11-28_124301.png

② 出てきたウィンドウで関数名を入力して「OK」ボタンをクリックする。

2017-11-28_124516.png


動かす

あとは、入力欄に文字列を入力して、投稿ボタンをクリックする。

2017-11-30_124008.png

これで投稿できました。

2017-11-30_124224.png


最後に

Twitter APIキーの取得やTwitterアプリの認証などの思いもよらないところで躓いて苦労しました。

あと、参考にさせていただいたサイトです。勉強になりました。

google apps script + twitter api 【001】タイムラインの取得とツイート

どうやら Twitter 社は日本人に Twitter API Key を取得させる気がないらしい