libro
www.tuyano.com
Google Apps Scriptプログラミング [中級編]

UrlFetchとXmlデータの利用 (6/6)

作成:2011-07-11 08:10
更新:2011-11-04 16:32

■OAuthでTwitterにアクセスする

UrlFetchでのアクセスを行うとき、そのアドレスが何らかの認証が必要な場合もあります。UrlFetchでは、「OAuth」による認証に対応しています。これを利用すれば、認証しないとアクセスできないようなページからも必要なデータを受け取ることができます。

これは、実際の利用例を見ながら説明したほうがいいでしょう。下のリスト欄に、Twitterのサービスにアクセスし、自分のタイムライン情報を取得してアクティブシートに書き出すサンプルをあげておきます。

Twitterは、外部アプリケーションから自身のサービスにアクセスするためのAPIを公開しています。以下のアドレスにアクセスすることで、自身のタイムライン情報をJSONデータとして取得することができます。

http://api.twitter.com/1/statuses/user_timeline.json

ただし、このアドレスにアクセスするには、OAuthによる認証が必要となります。認証さえできれば、JSONデータをダウンロードし、そこから必要な情報をとり出し処理することができるわけです。――では、認証作業の流れをざっと整理していきましょう。


1. OAuthConfigオブジェクトの取得
変数 = UrlFetchApp.addOAuthService( サービス名 );
まず、UrlFetchOAuthサービスを追加し、その設定情報を管理するOAuthConfigを取得します。引数にはサービスの名前を指定しておきます。

2. OAuthConfigに必要な情報を設定する
《OAuthConfig》.setAccessTokenUrl( アクセストークンURL );
《OAuthConfig》.setRequestTokenUrl( リクエストトークンURL );
《OAuthConfig》.setAuthorizationUrl( 認証URL );
《OAuthConfig》.setConsumerKey( コンシューマキー );
《OAuthConfig》.setConsumerSecret( コンシューマシークレット );
これが一番、ややこしいところです。OAuthによる認証を行うには、3つのURLと2つの固定値が必要となります。URLは、アクセストークン、リクエストトークン、認証のそれぞれを行うアドレスです。またOAuthが各アプリケーションごとに発行するコンシューマキーコンシューマシークレットも必要となります。

URLは、各OAuthサービスを提供する側が公開しています。Twitterの場合、http://api.twitter.com/oauth/の下にそれぞれのアドレスが用意されています。またコンシューマキーとコンシューマシークレットは、各OAuthサービスに利用を申し込むことで発行してもらえます。Twitterの場合、以下のアドレスから開発者のアプリケーションを申請し、キーを発行してもらえます。

https://dev.twitter.com/apps

3. オプション情報の用意
変数 = {
    oAuthServiceName : サービス名 ,
    oAuthUseToken : トークンの利用
};
その他、接続時に必要となる情報を連想配列にまとめておきます。oAuthServiceNameは、サービス名を指定します。oAuthUseTokenはトークン使用に関するポリシー設定で、"always", "if_available", "never", "require_present"のいずれかを指定します。常に利用するなら"always"でいいでしょう。

4. UrlFetch.fetchによるアクセス
変数 = UrlFetchApp.fetch( アドレス, オプション );
最後に、UrlFetchApp.fetchでアクセスを行います。第2引数には、3で用意した連想配列を渡します。これで、諸設定が正しくされていれば、OAuthによる認証を許可するための表示が現れるはずです(Twitterなら、別ウインドウでアプリケーションの利用を許可するか尋ねてくる)。これでOAuth認証を許可すれば、指定アドレスにアクセスしデータを取得することができます。

うまくアクセスができれば、タイマーイベントなどを使って定期的に実行すれば、Twitterの更新情報を得ることができます。外部のサービスと連動できると、いろいろと面白いことができそうでしょう?

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

function getTwitter(){
	var url = "http://api.twitter.com/oauth/";
	var auth = UrlFetchApp.addOAuthService("twitter");
	auth.setAccessTokenUrl(url + "access_token");
	auth.setRequestTokenUrl(url + "request_token");
	auth.setAuthorizationUrl(url + "authorize");
	auth.setConsumerKey("…コンシューマキー…");
	auth.setConsumerSecret("…コンシューマシークレット…");
	var options = {
		oAuthServiceName : "twitter",
		oAuthUseToken : "always"
	};
	var result = UrlFetchApp.fetch("http://api.twitter.com/1/statuses/user_timeline.json", options);
	var content = result.getContentText();
	var obj	= Utilities.jsonParse(content);
	var sheet = SpreadsheetApp.getActiveSheet();
	var num = 1;
	var fields = ['created_at','text','in_reply_to_screen_name'];
	for (var i in obj) {
		var row = obj[i];
		var col = 1;
		for (var j in fields) {
			var key = fields[j];
			sheet.getRange(num, col).setValue(row[key]);
			col++;
		}
		num++;
	}
}

※関連コンテンツ

「Google Apps Scriptプログラミング [中級編]」に戻る