Создание приложений AJAX Crawlable? Как создать простой веб-сервис в Google App Engine для создания мгновенных снимков HTML?

Проблема с реальным миром:

У меня есть мое приложение, размещенное на Heroku, которые (насколько мне известно) не могут предложить решение для запуска безголового (GUI) -less) Браузер - например HTMLUnit - для генерации Снимки HTML для Googlebot для индексации моего содержимого AJAX.

Предлагаемое решение:

Если вы еще этого не сделали, я предлагаю прочитать Полную спецификацию для создания приложений AJAX Crawlable.

Представьте, что у меня:

  • a Sinatra приложение, размещенное на Heroku в домене http://example.com
  • у приложения есть вкладки в верхней части страницы TabA, TabB и TabC
  • под каждой вкладкой SubTab1, SubTab2, SubTab3
  • onload, если URL-адрес http://example.com#!tab=TabA&subtab=SubTab3, то клиентский Javascript принимает location.hash и загружает содержимое TabA, SubTab3 через AJAX.

Примечание: Hash Bang (#!) является частью google spec.

Я хотел бы создать простой "веб-сервис", размещенный на Google App Engine (GAE), который:

  • Принимает параметр URL, например. http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3 (параметр url должен быть URLEncoded)
  • Запускает HTMLUnit для открытия http://example.com#!tab=TabA&subtab=SubTab3 и запускает javascript на стороне клиента на сервере.
  • HTMLUnit возвращает DOM, когда все будет завершено (или прошло примерно 45 секунд).
  • Возвращаемое содержимое может быть отправлено обратно через JSON/JSONP, или, наоборот, URL-адрес возвращается к файлу, сгенерированному и сохраненному на сервере движка Google (для файлов с кэшем). Если URL-адрес файла был возвращен, вы можете CURL получить исходный код (также как снимок HTML).

Моему http://example.com приложению потребуется управлять вызовом http://htmlsnapshot.appspot.com... в основном:

  • Вызовите вызов Googlebots http://example.com/?_escaped_fragment_=tab=TabA%26subtab=SubTab3 (искатель googlebot убегает от определенных символов, например,% 26 = &).
  • Отправлять запрос от бэкэнд до http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3 (параметр url должен быть URLEncoded)
  • Отобразить возвращенный HTML-снимок во внешний интерфейс.
  • Google индексирует контент, и мы радуемся!

У меня нет опыта работы с Google App Engine или Java или HTMLUnit.

Я мог бы понять это... и опубликую свои результаты, если я это сделаю.

В противном случае я чувствую, что это ОЧЕНЬ хорошая возможность для того, чтобы кто-то написал сообщение в блоге kick-ass, в котором описывается новичков пошаговое руководство, чтобы настроить веб-службы, подобные этому.

Это позволит привлечь больше людей к отличному (и бесплатному!) Google App Engine. Кроме того, это, несомненно, побудит больше людей принять спецификации Google для контента AJAX для сканируемого контента... от чего мы все можем выиграть!

По мере того, как спецификация Google получает больше признания, "препятствие" при настройке браузера Headless будет отправлять многим разработчикам Googling для ответов! Входите теперь с ответом на славу и славу! (отредактируйте: по крайней мере, я буду петь ваши похвалы).

Убей меня на твиттер @_chrisjacob, если вы хотите обсудить решения.

Ответы

Ответ 1

Я успешно использовал HTMLunit на AppEngine. Мой код GWT для этого доступен в gwt-platform project, полученные мной результаты были похожи на результаты приложение для тестирования HTMLunit-AppEngine от Amit Manjhi.

Должно быть относительно легко использовать текущую поддержку HTMLunit в GWTP, чтобы делать то, что вы описали, хотя вы, вероятно, можете сделать это в более простом приложении. Одна из проблем, которую я вижу, заключается в том, что запросы AppEngine имеют 30-секундный тайм-аут, поэтому у вас не может быть страницы, на которую HTMLunit будет работать дольше.

UPDATE: Это было какое-то время, но я, наконец, закрыл давний вопрос о том, как использовать GWT-приложения с помощью GWTP. Документация не совсем там, но проверьте ее: http://code.google.com/p/gwt-platform/issues/detail?id=1