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