2013年7月1日月曜日

Google Apps Script から Twitter を使う

Google Apps Script から Twitter API を使ってみよう。
今回の目標は、Google Apps Script から Twitter の認証を経由して Tweet することにする。


Callback URLの指定


まず、Twitter の 連携アプリケーション管理画面 で Google Apps Script 用に Callback URL を設定する。

https://spreadsheets.google.com/macros/ 



Consumer key と Consumer secret の設定


Google ドキュメント(今回は Spread Sheet)に Script 用のプロジェクトを作成し、 プロジェクトプロパティを設定する。
プロジェクトプロパティ は、スクリプト エディタ の「ファイル>プロジェクトのプロパティ…」から設定する。 ユーザープロパティとプロジェクトのプロパティがあるが指定するのは「プロジェクトのプロパティ」。

ここでは以下の2つのキーを設定する。
  • twitterConsumerKey: コンシューマーキー
  • twitterConsumerSecret: コンシューマーシークレット

ここで指定した値は、スクリプトからは、
  oAuthConfig.setConsumerKey(
      ScriptProperties.getProperty("twitterConsumerKey"));
  oAuthConfig.setConsumerSecret(
      ScriptProperties.getProperty("twitterConsumerSecret"));
のように指定できる。
キーとシークレットをoAuthConfig.setConsumerKey("XXXX") とコードに直接書いてももちろん動作する。


OAuth 認証をして Tweetする


コードはこんな感じ。
function oAuthTest() {
  var oAuthConfig = UrlFetchApp.addOAuthService("twitter");
  oAuthConfig.setAccessTokenUrl("https://api.twitter.com/oauth/access_token");
  oAuthConfig.setAuthorizationUrl("https://api.twitter.com/oauth/authorize");
  oAuthConfig.setRequestTokenUrl("https://api.twitter.com/oauth/request_token");
  oAuthConfig.setConsumerKey(ScriptProperties.getProperty("twitterConsumerKey"));
  oAuthConfig.setConsumerSecret(ScriptProperties.getProperty("twitterConsumerSecret"));
  
  var payload = {
    "status": "test from Google Apps " + new Date().getTime()
  }
  
  var options = {
    "method" : "POST",
    "oAuthServiceName" : "twitter",
    "oAuthUseToken" : "always",
    "payload" : payload   
   };

  var result = UrlFetchApp.fetch(
      "https://api.twitter.com/1.1/statuses/update.json", options);

  Logger.log("result of RequestToken: " + result);
} 

UrlFetchApp.addOAuthService で取得した OAuthConfig に アクセス先のURLやコンシューマキー/シークレット を設定して、 Twitter の REST API にアクセスすれば、 認証画面が表示されて認証が完了する。

...
    "status": "こんにちは① " + new Date().getTime()
...
のように日本語でも大丈夫。

Twitter の REST API v1.1 の Documentation は こちらから。

ちなみに、UrlFetchApp.fetch を GETリクエストで使うときには、 options から method と payload を除去して、
  var result = UrlFetchApp.fetch(
      "https://XXXXX?" + encodeURIComponent(str));

のように、encodeURIComponent を使うとよいみたい。

0 件のコメント:

コメントを投稿