2010-08-19 5 views
14

Real World Problem:Tworzenie aplikacji AJAX do indeksowania? Jak zbudować prostą usługę internetową w Google App Engine, aby tworzyć migawki HTML?

Mam aplikacja umieszczona na Heroku, który (według mojej wiedzy) nie są w stanie zaoferować rozwiązania dla prowadzenia Headless (GUI-less) Browser - jak HTMLUnit - do generowania HTML Snapshots dla Googlebota do indeksowania mojej zawartości AJAX.

My Proponowane rozwiązanie:

Jeśli nie masz już, proponuję czytanie Google Full Specification for Making AJAX Applications Crawlable.

Wyobraźmy sobie mam:

  • Sinatra aplikacja umieszczona na Heroku w domenie http://example.com
  • aplikacja posiada zaczepy wzdłuż górnej części strony Taba, Tabb i TabC
  • w ramach każdego zakładka to SubTab1, SubTab2, SubTab3
  • przeładowanie, jeśli adres URL to http://example.com#!tab=TabA&subtab=SubTab3, a następnie strona klienta JavaScript pobiera location.hash i ładuje zawartość TabA, SubTab3 za pośrednictwem AJAX.

Uwaga: Hash Bang (#!) Jest częścią google spec.

Chciałbym zbudować prosty "serwis internetowy" hostowane na Google App Engine (GAE), które:

  1. akceptuje URL np param http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3 (parametr URL powinien być zakodowany w trybie URLEn)
  2. Uruchamia moduł HTMLUnit, aby otworzyć http://example.com#!tab=TabA&subtab=SubTab3 i uruchomić javascript po stronie klienta po stronie serwera.
  3. HTMLUnit zwraca DOM, gdy wszystko jest kompletne (lub minęło jakieś 45 sekund).
  4. Zwrotna zawartość może być odesłana przez JSON/JSONP, lub alternatywnie URL jest zwracany do pliku wygenerowanego i przechowywanego na serwerze wyszukiwarki Google (dla plików "buforowanych" wyników) ... otwórz sugestie tutaj. Jeśli został zwrócony URL do pliku, możesz uzyskać kod źródłowy (znany również jako Migawka HTML).

Moja http://example.com aplikacja musiałaby zarządzać wezwanie do http://htmlsnapshot.appspot.com ... zasadniczo: Googlebots

  1. połowowe zadzwonić do http://example.com/?_escaped_fragment_=tab=TabA%26subtab=SubTab3 (Googlebot robot ucieka niektórych znaków np% 26 = &).
  2. Wyślij żądanie z backendu do http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3 (parametr URL powinien być URLEnoded)
  3. Renderuj zwróconą migawkę HTML do frontendu.
  4. Google Indeksuje treść i cieszymy się!

Nie mam żadnego doświadczenia z Google App Engine lub Java lub HTMLUnit.

Być może będę w stanie to rozgryźć ... i opublikuję wyniki, jeśli to zrobię.

Inaczej czuję to bardzo dobrą okazję dla kogoś napisać kick-ass blogu, który nakreśla a nowicjusze krok po kroku prowadzącego do konfigurowania usługi internetowej takiego.

Wprowadzi to więcej osób do doskonałego (i za darmo!) Google App Engine. Ponadto niewątpliwie zachęci więcej osób do przyjęcia specyfikacji Google dotyczących treści AJAX z możliwością indeksowania ... coś, z czego wszyscy możemy skorzystać!

W miarę, jak specyfikacja Google zyskuje większą akceptację, "przeszkoda" w konfiguracji przeglądarki bezgłowej wyśle ​​wielu dla programistów szukających odpowiedzi! Wejdź teraz z odpowiedzią na sławę i chwałę! (edytuj: przynajmniej będę śpiewać twoje pochwały).

Uderz mnie na Twitterze @_chrisjacob, jeśli chcesz omówić rozwiązania.

+0

Interesujące czytanie: "Pobierz HtmlUnit do uruchomienia w Google App Engine (GAE)" http://sourceforge.net/tracker/index.php?func= detail & aid = 2962074 & group_id = 47038 & atid = 448269 –

+0

Zobacz informacje o wydaniu htmlunit 2.8. –

+0

Uwagi do wydania htmlunit 2.8: http://htmlunit.sourceforge.net/changes-report.html#a2.8 - masz rację twierdzą, że wsparcie GAE jest funkcjonalne (lub przynajmniej "poprawione"). –

Odpowiedz

2

Z powodzeniem wykorzystałem HTMLunit na AppEngine. Mój kod GWT, aby to zrobić jest dostępny w gwt-platform project, wyniki, które otrzymałem, były podobne do wyników HTMLunit-AppEngine test application autorstwa Amita Manjhi.

Powinno być stosunkowo łatwo używać aktualnej obsługi HTML-a w GWTP, aby wykonać dokładnie to, co opisujesz, chociaż możesz zrobić to w prostszej aplikacji. Jednym z problemów, jaki widzę, jest to, że żądania AppEngine mają 30-sekundowy limit czasu, więc nie możesz mieć strony, która wymaga HTMLunit dłużej, niż to do przetworzenia.

UPDATE: Minęło trochę czasu, ale w końcu zamknął wieloletnie problem o tworzeniu aplikacji GWT indeksowanie za pomocą GWTP. Dokumentacja nie jest do końca dostępna, ale sprawdź numer: http://code.google.com/p/gwt-platform/issues/detail?id=1

+0

Więc HtmlUnit działa teraz na GAE? Jakieś zastrzeżenia, które znasz? –

+0

Nadal mam problem z dostępem do mojej aplikacji przy użyciu HTMLunit, co utrudnia aplikacjom samo udostępnianie się do robota. Szczegóły mojego wydania są subtelne, ale opisuję je tutaj (http://bit.ly/bViIMr). Nie testowałem tego od jakiegoś czasu, więc może problem zniknął. –

+0

Na aplikacji testowej Amit Manjhi wygląda na to, że działa dobrze z tym samym adresem URL. Może to się naprawiło, a może zależy od wielu czynników. –