Real World Problema:Rendere le applicazioni AJAX estraibili? Come creare un semplice servizio web su Google App Engine per produrre snapshot HTML?
ho la mia applicazione ospitata su Heroku, che (a mia conoscenza) non sono in grado di offrire una soluzione per l'esecuzione di un browser (GUI-less) Headless - quali HTMLUnit - per la generazione di HTML Snapshots per Googlebot per indicizzare il mio contenuto AJAX.
mio Soluzione proposta:
Se non lo hai già fatto, vi suggerisco di leggere Google Full Specification for Making AJAX Applications Crawlable.
Immaginate che ho:
- un'applicazione Sinatra ospitato su Heroku sul dominio
http://example.com
- l'applicazione ha schede nella parte superiore della pagina TabA, Tabb e TABC
- sotto ogni tab è SubTab1, SubTab2, SubTab3
- onload se l'url è
http://example.com#!tab=TabA&subtab=SubTab3
quindi lato client Javascript prende lelocation.hash
e carichi a Taba, contenuti SubTab3 tramite la tecnologia AJAX.
Nota: Hash Bang (#!) Fa parte di google spec.
Vorrei costruire un semplice "servizio web" ospitato su Google App Engine (GAE) che:
- accetta un URL param esempio
http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3
(il parametro url deve essere URLEncoded) - Esegue HTMLUnit per aprire
http://example.com#!tab=TabA&subtab=SubTab3
ed eseguire il javascript sul lato client sul server. - HtmlUnit restituisce il DOM una volta che tutto è completo (o qualcosa di simile 45 secondi è passato).
- Il contenuto ritorno potrebbe essere rispediti tramite JSON/JSONP, o in alternativa un URL è tornare a un file generato e memorizzato sul server di Google App Engine (per i file based "cache" risultati) ... aperto a suggerimenti qui. Se un URL di un file è stato restituito allora si potrebbe CURL per ottenere il codice sorgente (aka un'istantanea HTML).
mio http://example.com
applicazione avrebbe bisogno per gestire la chiamata a http://htmlsnapshot.appspot.com
... in fondo: Googlebots
- cattura chiamata a
http://example.com/?_escaped_fragment_=tab=TabA%26subtab=SubTab3
(Googlebot crawler sfugge certi caratteri ad esempio% 26 = &). - Invia richiesta dal backend a
http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3
(il parametro url deve essere URLEncoded) - Renderizza l'istantanea HTML restituita al frontend.
- Google indicizza il contenuto e ci rallegriamo!
Non ho alcuna esperienza con Google App Engine o Java o HTMLUnit.
Potrei riuscire a capirlo ... e pubblicherò i risultati se lo faccio.
Altrimenti sento che questo è un un'ottima opportunità per qualcuno di scrivere un post sul blog kick-ass che delinea un novizi passo-passo guida per la creazione di un servizio web come questo.
Questo introdurrà più persone all'eccellente (e gratuito!) Google App Engine. Inoltre incoraggerà indubbiamente più persone ad adottare le specifiche di Google per contenuti AJAX crawlable ... qualcosa di cui tutti possiamo beneficiare!
Come guadagni specifiche di Google più l'accettazione del "ostacolo" di creare un browser senza testa sta per inviare molti sviluppatori Googling per le risposte! Entra ora con una risposta per fama e gloria! (modifica: per lo meno canterò le tue lodi).
Hit me su twitter @_chrisjacob
se si desidera discutere soluzioni.
interessante lettura: "Get HtmlUnit per funzionare su Google App Engine (GAE)" http://sourceforge.net/tracker/index.php?func= detail & aid = 2962074 & group_id = 47038 & atid = 448269 –
Vedere le note sulla versione di htmlunit 2.8. –
htmlunit 2.8 note di rilascio: http://htmlunit.sourceforge.net/changes-report.html#a2.8 - hai ragione affermano che il supporto GAE è funzionale (o almeno "corretto"). –