14

現実世界の問題:

私のアプリはHerokuでホストされていますが、Herokuは、AJAXコンテンツのインデックスを作成するためにGooglebotのHTMLスナップショットを生成するためのヘッドレス(GUIレス)ブラウザー( HTMLUnitなど)を実行するためのソリューションを提供できません。

私の提案する解決策:

まだ読んでいない場合は、AJAXアプリケーションをクロール可能にするためのGoogleの完全な仕様を読むことをお勧めします。

私が持っていると想像してください:

  • ドメイン上のHerokuでホストされているSinatraアプリhttp://example.com
  • アプリには、ページの上部にTabA、TabB、TabCのタブがあります
  • 各タブの下には、SubTab1、SubTab2、SubTab3があります。
  • URLがhttp://example.com#!tab=TabA&subtab=SubTab3クライアント側の場合はonloadで、Javascriptはlocation.hashAJAXを介してTabA、SubTab3コンテンツを取得してロードします。

注:ハッシュバン(#!)はGoogle仕様の一部です。

Google App Engine(GAE)でホストされるシンプルな「Webサービス」を構築したいと思います。

  1. URLパラメータを受け入れますhttp://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3(例:URLパラメータはURLEncodedである必要があります)
  2. HTMLUnitをhttp://example.com#!tab=TabA&subtab=SubTab3実行して、サーバーでクライアント側のJavaScriptを開いて実行します。
  3. HTMLUnitは、すべてが完了すると(または、45秒が経過すると)DOMを返します。
  4. 返されるコンテンツはJSON/JSONPを介して返送されるか、URLが生成されてGoogle App Engineサーバーに保存されたファイルに返されます(ファイルベースの「キャッシュされた」結果の場合)...ここで提案を開きます。ファイルへのURLが返された場合は、CURLを使用してソースコード(別名HTMLスナップショット)を取得できます。

私のhttp://example.comアプリは...への呼び出しを管理する必要がありhttp://htmlsnapshot.appspot.comます基本的に:

  1. Googlebotsの呼び出しをキャッチしますhttp://example.com/?_escaped_fragment_=tab=TabA%26subtab=SubTab3(googlebotクローラーは特定の文字をエスケープします(例:%26 =&))。
  2. バックエンドからにリクエストを送信しますhttp://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3(urlパラメータはURLEncodedである必要があります)
  3. 返されたHTMLスナップショットをフロントエンドにレンダリングします。
  4. Googleはコンテンツのインデックスを作成し、喜んでいます。

GoogleAppEngineまたはJavaまたはHTMLUnitの経験はありません。

私はそれを理解することができるかもしれません...そして私がそうするならば私の結果を投稿します。

そうでなければ、これは誰かがこのようなWebサービスをセットアップするための初心者のステップバイステップガイドを概説するキックアスブログ投稿を書くための非常に良い機会だと思います。

これにより、より多くの人々に優れた(そして無料の)GoogleAppEngineを紹介します。また、間違いなく、より多くの人々がクロール可能なAJAXコンテンツにGoogleの仕様を採用することを奨励します...私たち全員が恩恵を受けることができるものです!

グーグルの仕様がより受け入れられるにつれて、ヘッドレスブラウザを設定する「ハードル」は多くの開発者に答えを求めてグーグルを送るでしょう!名声と栄光への答えを今すぐ手に入れましょう!(編集:少なくとも私はあなたの賞賛を歌います)。

@_chrisjacob解決策について話し合いたい場合は、ツイッターで私に連絡してください。

4

1 に答える 1

2

I have successfully used HTMLunit on AppEngine. My GWT code to do this is available in the gwt-platform project the results I got were similar to that of the HTMLunit-AppEngine test application by Amit Manjhi.

It should be relatively easy to use GWTP current HTMLunit support to do exactly what you describe, although you could likely do it in a simpler app. One problem I see is that AppEngine requests have a 30 second timeout, so you can't have a page that takes HTMLunit longer than that to process.

UPDATE: It's been a while, but I finally closed the long standing issue about making GWT applications crawlable using GWTP. The documentation is not entirely there, but check out the issue: http://code.google.com/p/gwt-platform/issues/detail?id=1

于 2010-08-19T02:02:39.260 に答える