相変わらずC#で遊んでます。
今回はGoogleリーダーの購読RSSの取得にチャレンジ!
いつものように他力本願でググってみると、素敵なサイトを発見。
非公式:Google Reader API(グーグルリーダーAPI)(翻訳)
英語がさっぱりな自分にはありがたい。ありがたい。
で、早速やってみた。とりあえず
- メールアドレス – hogehoge@gmail.com
- パスワード – password
の前提で。
まず最初にClientLoginでログイン処理。公式の解説はこちら(英語)。
// POSTするパラメータの文字列
string post_string = string.Format("Email={0}&Passwd={1}",
"hogehoge@gmail.com",
"password");
// バイト配列に変換(Encoding.ASCII使ってるので日本語とか入れないように)
byte[] postbytes = Encoding.ASCII.GetBytes(post_string);
// HTTPリクエストを作成
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://www.google.com/accounts/ClientLogin");
// メソッドはPOST
request.Method = "POST";
// POSTの時のお決まり(フォームデータセット)
request.ContentType = "application/x-www-form-urlencoded";
// データ長をセット
request.ContentLength = postbytes.Length;
// リクエスト用のストリームを作成
using (Stream requeststream = request.GetRequestStream())
{
// ストリームにPOST文字列を変換したバイト配列をぶっこむ
requeststream.Write(postbytes, 0, postbytes.Length);
// ストリームを閉じる
requeststream.Close();
// HTTPレスポンスを取得
HttpWebResponse responce = (HttpWebResponse)request.GetResponse();
// レスポンスのストリームを取得
using (Stream responcestream = responce.GetResponseStream())
// ストリームリーダーを作成
using (StreamReader reader = new StreamReader(responcestream))
{
// ストリームの中身を全部読み込む
string result = reader.ReadToEnd();
// ストリームリーダーを閉じる
reader.Close();
// ストリームを閉じる
responcestream.Close();
// HTTPレスポンスを閉じる
responce.Close();
}
}
内容としては、https://www.google.com/accounts/ClientLogin にログイン用のパラメータをPOSTする。
解説では service、Email、Passwd、source、continueの5つがあったが、試してみたところ Email と Passwd だけでも問題はなかった。すべてのパラメータを埋める場合は
- service=reader
- source=[アプリケーション名]-[バージョン] (hogehoge-1.0.0.0 とか)
- continue=http://www.google.com/ (http://www.google.co.jp/ でもいけた)
みたいな感じでやってみたがエラーなし。
うまくいけば変数 result に
SID=ホニャララ~~~~~~~~~~~ LSID=ホニャララ~~~~~~~~~~~ Auth=ホニャララ~~~~~~~~~~~
が入っているはずなので、それぞれの値を取得してあげる。
なにか良い方法がありそうだけど、ここはゴリゴリ書くことに。
string SID = string.Empty;
string LSID = string.Empty;
Regex regex = new Regex(@"([^=]+)=(.+)", RegexOptions.Compiled);
foreach (string item in result.Split('\n'))
{
if (regex.IsMatch(item))
{
Match match = regex.Match(item);
switch (match.Groups[1].Value)
{
case "SID":
SID = match.Groups[2].Value;
break;
case "LSID":
LSID = match.Groups[2].Value;
break;
}
}
}
次は取得したSIDとLSIDをクッキーに食わせてGoogleリーダーのRSSを取得します。
続く・・・
(ちなみに上記のコードだと、メールアドレスかパスワードが間違っている場合は例外が発生します。)

コメント
又是HTML