none
Gmailの検索結果を取得したいです。 RRS feed

  • 質問

  • いつもお世話になります。
    VisualC#2010、Windows7での動作について質問があります。
    string keyword = "検索語";
    WebClient wc = new WebClient();
    string html = wc.DownloadString("https://mail.google.com/mail/?zx=id&shva=1#search/" + keyword);
    wc.Dispose();

    で、検索結果を取得できるかと思いましたが、取得したhtmlには、メールのタイトルが入っていませんでした。
    どのようにすればよいものでしょう?

    2011年8月27日 14:50

回答

  • webbrowserの場合は、
    NetworkCredential nc = new NetworkCredential(username, password);
    のような形で認証することは可能なのでしょうか?

    これはあくまで BASIC 認証など、ブラウザーが認証画面を出す場合に使える方法です。
    Gmail はログインフォームが表示される方式なので使えません。

    それとも、ログインページを見つけて、
    (略)
    みたいにしないとだめなんですか?

    そういうことです。そうしないと、ログインしているという情報がないので、見れないのは当然です。
    が、その方法が Google 非公認で利用規約違反として排除されるなどの措置が執られる可能性がある点に注意してください。

    GmailのAPIは、新規のメールを取得することに関しては、POP3でできるようなのですが、それ以外のは見当たらないようです。

    さくっと探す限りでは当たらないですね。
    同じようなことをしようとした人がいないか、Google の見解はどこかに出ていないかといったところで探していくことになるのでしょう。

    // C# の質問と言うよりは、Google のサービスに関する質問の領域な気がするなぁ。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク d-kot 2011年8月28日 7:23
    2011年8月28日 4:52
    モデレータ

すべての返信

  • タイトルというよりも、メールの検索結果のページ自体が取得できていないのではありませんか? なぜなら、WebClientの接続ではログインしている状態ではないからです。
    目的がメールの検索結果の一覧であれば、プログラムでPOP3を使ってメールを受信した後に検索した方が良いかもしれません。
    簡単にPOP3で受信するのであれば、フリーのライブラリがいくつかあるようです。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2011年8月28日 0:38
    モデレータ
  • 自動的なクエリー&処理は、許可された方法で実行しないと利用規約違反になります。
    http://www.google.com/accounts/TOS

    Gmail に関連する API があるかどうかは調べていませんが、OK とされている方法をまず確認してください。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年8月28日 2:43
    モデレータ
  • trapemiyaさん、ありがとうございます。
    おっしゃるとおりで、そのページを取得できていません。
    pop3は動くようになっているので、試してみましたがだめでした。
    webbrowserの場合は、
    NetworkCredential nc = new NetworkCredential(username, password);
    のような形で認証することは可能なのでしょうか?

    それとも、ログインページを見つけて、
    webBrowser.Navigate(url);
    HtmlElementCollection HE = webBrowser.Document.All;
    HtmlElementCollection hec = HE.GetElementsByName("username");
    hec(0).InnerText = username;
    hec = HE.GetElementsByName("password");
    hec(0).InnerText = password;
    hec(0).InvokeMember("submit");
    webBrowser.Navigate(url);
    みたいにしないとだめなんですか?


    Azuleanさん、ありがとうございます。
    GmailのAPIは、新規のメールを取得することに関しては、POP3でできるようなのですが、それ以外のは見当たらないようです。
    引き続き探してみます。

    2011年8月28日 4:38
  • webbrowserの場合は、
    NetworkCredential nc = new NetworkCredential(username, password);
    のような形で認証することは可能なのでしょうか?

    これはあくまで BASIC 認証など、ブラウザーが認証画面を出す場合に使える方法です。
    Gmail はログインフォームが表示される方式なので使えません。

    それとも、ログインページを見つけて、
    (略)
    みたいにしないとだめなんですか?

    そういうことです。そうしないと、ログインしているという情報がないので、見れないのは当然です。
    が、その方法が Google 非公認で利用規約違反として排除されるなどの措置が執られる可能性がある点に注意してください。

    GmailのAPIは、新規のメールを取得することに関しては、POP3でできるようなのですが、それ以外のは見当たらないようです。

    さくっと探す限りでは当たらないですね。
    同じようなことをしようとした人がいないか、Google の見解はどこかに出ていないかといったところで探していくことになるのでしょう。

    // C# の質問と言うよりは、Google のサービスに関する質問の領域な気がするなぁ。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク d-kot 2011年8月28日 7:23
    2011年8月28日 4:52
    モデレータ
  • Azuleanさん、ありがとうございます。
    なるほど。
    ログインを自前でというのは了解です。たいへん参考になりました。
    けっきょく規約とかもあるし、ログインはむずかしそうなので、ローカルで検索する方法に転換しました。
    まあ、popでローカルにもっているので、それを検索すればよいから、まあそれで足りるかなという判断です。
    ありがとうございました。
    2011年8月28日 7:23
  • IMAPを使えばサーバー側でメールの検索ができますから、そちらを使う方法も取れそうです。

    Programatically searching GMail?
    http://stackoverflow.com/questions/3242619/programatically-searching-gmail

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年8月29日 1:39
    モデレータ