相変わらず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