C#でGoogleリーダーのRSSを取得する1

相変わらず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を取得します。
続く・・・

(ちなみに上記のコードだと、メールアドレスかパスワードが間違っている場合は例外が発生します。)

スポンサーリンク

シェアする

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

フォローする

スポンサーリンク

コメント

  1. ugg store より:

    又是HTML