[GoogleReaderAPI] Google Reader APIを使ってみた(認証編)
最近RSSリーダーの作成を始めました(*゚▽゚)ノ
RSS取得元をGoogle Readerとする事にして、Google Readerの外部APIを調べています。
Google Reader APIは正式には公開されていないようですが、Web上に情報が色々と散らばっているようです。
今回は、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
ClientLogin形式は、ユーザーIDとパスワードでログインする形式です。
以下のURLへPOSTでアクセスします。その際に、ボディ部にIDとパスワードと利用するサービス(今回はreader)を指定します。
URL:
Objective-Cでは、例えば以下のような実装を行い、リクエストを送信します。
なお、Objective-CでのHTTP送信は、以下記事とかが参考になれば幸いです。
[XCODE] iPhoneアプリからHTTPリクエストを送信して、データを受信する方法@YoheiM.NET
[XCODE] iPhoneアプリからHTTP送信する際に、POST送信、ヘッダ付与、クッキー付与を行う方法@YoheiM.NET
これら受け取った値のうちAuthの内容を用いて、Google Reader APIにアクセスします。
例えば、Feedの内容を取得する以下のURLにリクエストを送る場合を説明します。
Feedを取得する為のURL:
送付するリクエストのヘッダ部分に、Authで得た値を以下のように設定します。
以下に、Objective-Cでのサンプルコードを記載します。
数年後には、上記内容は使えなくなるかもしれませんが、今回詰まった内容が何かの役に立てば 良いなぁと思います。
Google Reader APIは、現在絶賛調べ中なので、分かった事を、今後色々とブログに書きたいと思います。
今回も最後までお読み頂きましてありがとうございました(*´∇`*)
RSS取得元をGoogle Readerとする事にして、Google Readerの外部APIを調べています。
Google Reader APIは正式には公開されていないようですが、Web上に情報が色々と散らばっているようです。
今回は、Google Reader APIを使う為の認証部分を実装したので、ブログに書きたいと思います。

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は、現在絶賛調べ中なので、分かった事を、今後色々とブログに書きたいと思います。
今回も最後までお読み頂きましてありがとうございました(*´∇`*)

