2012/07/19更新

[GoogleReaderAPI] Google Reader APIを使ってみた(認証編)

このエントリーをはてなブックマークに追加            

最近RSSリーダーの作成を始めました(*゚▽゚)ノ
RSS取得元をGoogle Readerとする事にして、Google Readerの外部APIを調べています。
Google Reader APIは正式には公開されていないようですが、Web上に情報が色々と散らばっているようです。

今回は、Google Reader APIを使う為の認証部分を実装したので、ブログに書きたいと思います。

Google Reader API Authentication



Google Reader APIについて

Google Reader APIは正式に公開されているわけではないですが、以下のようなサイトで 使い方が紹介されています。
非公式:Google Reader API(グーグルリーダーAPI)(翻訳)

ただ情報は古いようで、認証部分は現在は、以下のGoogleのサイトの説明が正しいようです。
http://code.google.com/p/google-reader-api/wiki/Authentication

今回は、iPhoneアプリで使いたいので、Objective-Cでの実装でブログを書きたいと思います。
また、YoheiM.NETでもGoogle Reader APIについて以下のような記事を書いておりますので、 もし参考になれば幸いです。

- [GoogleReaderAPI] Google Reader APIを使ってみた(認証編)@YoheiM.NET
- [GoogleReaderAPI] 購読リストを取得する@YoheiM.NET
- [GoogleReaderAPI] 未読件数を取得する@YoheiM.NET




Google Reader APIを使う為の認証リクエストを送る

認証方式には、OAuthとClientLoginの2種類があるようですが、今回はClientLogin形式を選択します。
ClientLogin形式は、ユーザーIDとパスワードでログインする形式です。

以下のURLへPOSTでアクセスします。その際に、ボディ部にIDとパスワードと利用するサービス(今回はreader)を指定します。

URL:
https://www.google.com/accounts/ClientLogin
ボディ部:
Email=[ユーザーID]&Passwd=[パスワード]&service=reader


Objective-Cでは、例えば以下のような実装を行い、リクエストを送信します。
// 認証に使う情報
NSString *email = @"あなたのgmailアドレス";
NSString *password = @"あなたのパスワード";

// リクエストを作成する
NSURL *authURL = [NSURL URLWithString:@"https://www.google.com/accounts/ClientLogin"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:authURL];
// 通信メソッドはPOST
request.HTTPMethod = @"POST";
// ボディ部を指定する
NSString *body = [NSString stringWithFormat:@"Email=%@&Passwd=%@&service=reader", email, password];
request.HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding];
    
    
// リクエストを送る
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (!connection) {
    NSLog(@"fail to create connection.");
} else {
    NSLog(@"start authentication.");
}

なお、Objective-CでのHTTP送信は、以下記事とかが参考になれば幸いです。
[XCODE] iPhoneアプリからHTTPリクエストを送信して、データを受信する方法@YoheiM.NET

[XCODE] iPhoneアプリからHTTP送信する際に、POST送信、ヘッダ付与、クッキー付与を行う方法@YoheiM.NET




認証リクエストの戻り値(レスポンス)を扱う

上述のリクエストで、認証に成功したら、以下のような情報がレスポンスとして返されます。
SID=AJDOAIJI8129AJOIJO
USID=NUIEIFHLIUH898J
Auth=JORNLI1231KLI
※説明のため、値は短くしています。ほんとはもっと長いランダムな文字列です。


これら受け取った値のうちAuthの内容を用いて、Google Reader APIにアクセスします。
例えば、Feedの内容を取得する以下のURLにリクエストを送る場合を説明します。

Feedを取得する為のURL:
http://www.google.com/reader/atom/

送付するリクエストのヘッダ部分に、Authで得た値を以下のように設定します。
Authorization: GoogleLogin auth=JORNLI1231KLI
この情報を付与した状態で、リクエストを送付すると、対象ユーザーの保持するフィードを取得することが出来ます。
以下に、Objective-Cでのサンプルコードを記載します。
// Feedを取得する為のURL
NSURL *url = [NSURL URLWithString@"http://www.google.com/reader/atom/"];

// authの値を保持する変数
NSString auth = @"JORNLI1231KLI";

// 送付するリクエストを作成する
NSMutableURLRequest *request = [[NSMutableURLRequestalloc] initWithURL:url];

// ヘッダ部に、Authorizationという名前の情報を付与する
auth = [NSString stringWithFormat:@"GoogleLogin auth=%@", auth];
[request addValue:auth forHTTPHeaderField:@"Authorization"];

// リクエストを送信する
NSURLConnection *connection = [[NSURLConnectionalloc] initWithRequest:request delegate:self];
if (connection) {
    NSLog(@"request send.");
} else {
    NSLog(@"Connection Failed when getting feeds.");
}




最後に

認証部分は、何度か仕様が変わっているようで調べるのに苦労しましたw。
数年後には、上記内容は使えなくなるかもしれませんが、今回詰まった内容が何かの役に立てば 良いなぁと思います。
Google Reader APIは、現在絶賛調べ中なので、分かった事を、今後色々とブログに書きたいと思います。
今回も最後までお読み頂きましてありがとうございました(*´∇`*)






こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。