UrlFetchとXmlデータの利用 (6/6)
作成:2011-07-11 08:10
更新:2011-11-04 16:32
更新: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オブジェクトの取得
2. OAuthConfigに必要な情報を設定する
URLは、各OAuthサービスを提供する側が公開しています。Twitterの場合、http://api.twitter.com/oauth/の下にそれぞれのアドレスが用意されています。またコンシューマキーとコンシューマシークレットは、各OAuthサービスに利用を申し込むことで発行してもらえます。Twitterの場合、以下のアドレスから開発者のアプリケーションを申請し、キーを発行してもらえます。
https://dev.twitter.com/apps
3. オプション情報の用意
4. UrlFetch.fetchによるアクセス
うまくアクセスができれば、タイマーイベントなどを使って定期的に実行すれば、Twitterの更新情報を得ることができます。外部のサービスと連動できると、いろいろと面白いことができそうでしょう?
これは、実際の利用例を見ながら説明したほうがいいでしょう。下のリスト欄に、Twitterのサービスにアクセスし、自分のタイムライン情報を取得してアクティブシートに書き出すサンプルをあげておきます。
Twitterは、外部アプリケーションから自身のサービスにアクセスするためのAPIを公開しています。以下のアドレスにアクセスすることで、自身のタイムライン情報をJSONデータとして取得することができます。
http://api.twitter.com/1/statuses/user_timeline.json
ただし、このアドレスにアクセスするには、OAuthによる認証が必要となります。認証さえできれば、JSONデータをダウンロードし、そこから必要な情報をとり出し処理することができるわけです。――では、認証作業の流れをざっと整理していきましょう。
1. OAuthConfigオブジェクトの取得
変数 = UrlFetchApp.addOAuthService( サービス名 );まず、UrlFetchにOAuthサービスを追加し、その設定情報を管理するOAuthConfigを取得します。引数にはサービスの名前を指定しておきます。
2. OAuthConfigに必要な情報を設定する
《OAuthConfig》.setAccessTokenUrl( アクセストークンURL );これが一番、ややこしいところです。OAuthによる認証を行うには、3つのURLと2つの固定値が必要となります。URLは、アクセストークン、リクエストトークン、認証のそれぞれを行うアドレスです。またOAuthが各アプリケーションごとに発行するコンシューマキーとコンシューマシークレットも必要となります。
《OAuthConfig》.setRequestTokenUrl( リクエストトークンURL );
《OAuthConfig》.setAuthorizationUrl( 認証URL );
《OAuthConfig》.setConsumerKey( コンシューマキー );
《OAuthConfig》.setConsumerSecret( コンシューマシークレット );
URLは、各OAuthサービスを提供する側が公開しています。Twitterの場合、http://api.twitter.com/oauth/の下にそれぞれのアドレスが用意されています。またコンシューマキーとコンシューマシークレットは、各OAuthサービスに利用を申し込むことで発行してもらえます。Twitterの場合、以下のアドレスから開発者のアプリケーションを申請し、キーを発行してもらえます。
https://dev.twitter.com/apps
3. オプション情報の用意
変数 = {その他、接続時に必要となる情報を連想配列にまとめておきます。oAuthServiceNameは、サービス名を指定します。oAuthUseTokenはトークン使用に関するポリシー設定で、"always", "if_available", "never", "require_present"のいずれかを指定します。常に利用するなら"always"でいいでしょう。
oAuthServiceName : サービス名 ,
oAuthUseToken : トークンの利用
};
4. UrlFetch.fetchによるアクセス
変数 = UrlFetchApp.fetch( アドレス, オプション );最後に、UrlFetchApp.fetchでアクセスを行います。第2引数には、3で用意した連想配列を渡します。これで、諸設定が正しくされていれば、OAuthによる認証を許可するための表示が現れるはずです(Twitterなら、別ウインドウでアプリケーションの利用を許可するか尋ねてくる)。これでOAuth認証を許可すれば、指定アドレスにアクセスしデータを取得することができます。
うまくアクセスができれば、タイマーイベントなどを使って定期的に実行すれば、Twitterの更新情報を得ることができます。外部のサービスと連動できると、いろいろと面白いことができそうでしょう?
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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プログラミング [中級編]」に戻る