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 pobieralocation.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:
- akceptuje URL np param
http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3
(parametr URL powinien być zakodowany w trybie URLEn) - Uruchamia moduł HTMLUnit, aby otworzyć
http://example.com#!tab=TabA&subtab=SubTab3
i uruchomić javascript po stronie klienta po stronie serwera. - HTMLUnit zwraca DOM, gdy wszystko jest kompletne (lub minęło jakieś 45 sekund).
- 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
- połowowe zadzwonić do
http://example.com/?_escaped_fragment_=tab=TabA%26subtab=SubTab3
(Googlebot robot ucieka niektórych znaków np% 26 = &). - Wyślij żądanie z backendu do
http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3
(parametr URL powinien być URLEnoded) - Renderuj zwróconą migawkę HTML do frontendu.
- 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.
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 –
Zobacz informacje o wydaniu htmlunit 2.8. –
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"). –