Windows8用アプリの開発がVisualStudio11(ベータ版)により可能になりました。 iPhoneが世間を席巻している状況下でも 現在のWindowsユーザがMacへの移行をはじめるのかは怪しいところで、 ※開発者の移動はかなりありましたが。 Windows8への移行により、かなりのユーザさんが、 困惑するんじゃないかなぁ~と心配しているところではあります。 ※特にまだXPを使っている人 私はWindowsPhone(というよりMetro)のかわいさに負けて、 少し開発しましたが、Microsoftの底力というか、 言語設計からなる雰囲気に少しMicrosoftに惚れ直したところでして、 メインマシンをWindows8端末にして、Metro開発でもやってみよーかなーと思っていまして。 以前、WindowsPhoneで少し開発したGoogle+アプリを Windows8に移植しようと思い立ったわけです。 で最初のOAuth部分でWebViewに関して仕様が違ったみたいなので 以前書いた「認可コードのスクレイピング(WindowsPhone)」との違いを書きたいと思います。 試したのは「LoadCompletedイベント」の時なので 他のイベントの時にどうかはわかりません。 以前のコードの仕様としては 「認可後のページを開いたら、HTMLを取得して認可コードを取得」 っていう感じなのですが、 ・WebViewのUriが更新されない ・WebViewのSaveToString()がサポートされてない の2点が違います。 これはすごく単純でイベント自体のUriを取得すれば良いのでprivate void loginView_LoadCompleted(object sender, NavigationEventArgs e) { string uri = e.Uri.AbsoluteUri; }とする事で回避できます。 回避というか、これが当たり前かな? これはトリッキーというか正式にやっていいものなのか。。。 別の方法がある気がするのですが、私的にはHTMLがどうしても欲しかったので JavaScriptを呼び出すInvokeScript()を使ってHTMLを抜き出してみました。 eval()関数でouterHTMLを取得してみました。string html = loginView.InvokeScript("eval", new string[] { "document.documentElement.outerHTML;" });これでHTMLが抜き出せます。 単純に2つのプロパティ(メソッド)での取得データを切り替えただけでOKでした。private void loginView_LoadCompleted(object sender, NavigationEventArgs e) { string uri = e.Uri.AbsoluteUri; if (uri.IndexOf("/o/oauth2/approval") != -1) { string html = loginView.InvokeScript("eval", new string[] { "document.documentElement.outerHTML;" }); int tagStart = html.IndexOf("<textarea"); int tagStartEnd = html.IndexOf(">", tagStart); int tagEnd = html.IndexOf("</textarea>"); string pin = html.Substring(tagStartEnd + 1, tagEnd - tagStartEnd - 1); pinText.Text = pin; } }という感じのコードになり って感じで認可コードも自動設定可能になりました。 あくまで見た感じだと WindowsPhoneの時とUIの部分で色々大変な事がありそうですけどね。
2012年4月26日木曜日
Windows8でのWebViewのスクレイピング
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿