プロジェクトID
Mb2Vpd5nfD3Pz-_a-39Q4VfxhMjh3Sh48
プロジェクトのソース
https://github.com/googlesamples/apps-script-oauth1
Googleが公開しているOAuth1認証を使って外部サイトをアクセスするためのライブラリである。プロジェクトメニューから簡単に導入して使える。ソースも公開されており、Twitterアクセスのサンプルソースもある。このページでは、このライブラリとサンプルソースを利用して、Twitterへのアクセスを行う方法を説明する。
Twitter API キーの獲得
OAuth1ライブラリを使ってスクリプトからTwitterに発言したりするには、Twitterが発行するConsumer keyとConsumer secretが必要なので、事前に取得しておく。取得方法については、いろいろなサイトで説明されているので参照してほしい。
OAuth1ライブラリの導入
新規もしくは既存のプロジェクトにOAuth1ライブラリを導入するには、プロジェクトメニューの リソース>ライブラリ からこのOAuth1ライブラリのキー "" を指定すればよい。後でサンプルソースを使うので、ライブラリの識別子はデフォルトの "OAuth1" のままにすること。識別子が変更されるとサンプルソースが使えなくなる。(細かい手順は 外部ライブラリの使用 を参照)
サンプルソースのコピー
適当なファイルを作成し、そこに https://github.com/googlesamples/apps-script-oauth1/blob/master/samples/Twitter.gs の内容をコピーする。ソース冒頭の以下の部分は、自分が取得したConsumer keyとConsumer secretの値に書き換える。
アクセストークンの取得
ここでサンプルソース内の関数 run() を指定して実行する。通常は 「It's a tweet!」 という文字列がツイートされるはずだが、初回実行時はOAuthのアクセストークンがないので、ブラウザからトークンを取得するためのURLをログに出力して終わる。関数 run() を実行した後で、プロジェクトメニューからログを見て、アドレス部分をコピーしてブラウザに張り付けてアクセスする。
そうすると、おなじみのTwitterアプリの許諾画面が表示されるので、許可をクリックする。最終的にブラウザにSuccess!と表示されれば成功である。アクセストークンはスクリプトのプロパティに記憶されるので、以後プロパティがクリアされるまで認証画面を表示する必用はない。
アクセストークンを取得してから、もう一度関数 run() を実行すると、今度は実際にツイートが送信される。
サンプルの改造
OAuth1ライブラリのままだとHTTPのPOSTメソッドにしか対応してないので、ツイートを発信することしかできない。Twitter APIの様々なコマンドに対応するために、サンプルのrun() 関数を少々改造した関数を追加する。プロジェクト内の関数はどこにあっても参照可能なので、サンプルと別のファイルに追加してもよい。
/**
* ツイッターアクセス用
* @param {string} method - Twitter APIのアクセス方法 get, post
* @param {string} cmd - Twitter APIのアクセス先URL。getメソッドではパラメータも含む。
* @param {string} msg - ツイート発信時のメッセージの内容。
*
* @return {string} - Twitterからの応答 (JSON文字列)
*/
function twAccess( method, cmd, msg ){
var service = getService();
if (service.hasAccess()) {
var TwPara = { method:method };
if( method == 'post' ){
TwPara.payload = { status: msg };
}
var response = service.fetch(cmd, TwPara );
return response.getContentText();
} else {
var authorizationUrl = service.authorize();
Logger.log('Open the following URL and re-run the script: %s',
authorizationUrl);
}
}
詳しい使い方はTwitter APIの仕様を参照して欲しい。たとえばツイート検索およびツイート発信については以下のように呼び出す。
/**
* ツイート検索
* @param {string} query - 検索文字列
*
* @return {string} - Twitterからの応答 (JSON文字列)
*/
function getSearch( query ){
var cmd = "https://api.twitter.com/1.1/search/tweets.json?"+
"count=100&q="+encodeURIComponent(query);
return twAccess('get', cmd );
}
/**
* ツイート発信
* @param {string} msg - ツイート発信時のメッセージの内容。
*/
function putTweet( msg ){
twAccess('post', 'https://api.twitter.com/1.1/statuses/update.json', msg );
}