2010-08-19 2 views
14

monde réel Problème:Rendre les applications AJAX exploitables? Comment créer un service Web simple sur Google App Engine pour produire des instantanés HTML?

Je mon application hébergé sur Heroku, qui (à ma connaissance) ne parviennent pas à offrir une solution pour la gestion d'une Headless (GUI-less) Navigateur - tels que HTMLUnit - pour générer HTML Snapshots pour que Googlebot indexe mon contenu AJAX.

Ma Solution proposée:

Si vous n'êtes pas déjà, je vous suggère de lire Google Full Specification for Making AJAX Applications Crawlable.

Imaginer que j'ai:

  • une application Sinatra hébergé sur Heroku sur le domaine http://example.com
  • l'application a onglets en haut de la page TABA, Tabb et TABC
  • sous chaque l'onglet est SubTab1, SubTab2, SubTab3
  • onload si l'URL est http://example.com#!tab=TabA&subtab=SubTab3 puis côté client Javascript prend le location.hash et charge le contenu TabA, SubTab3 via AJAX.

Remarque: le Hash Bang (#!) Fait partie du google spec.

Je voudrais construire un simple "service web" hébergé sur Google App Engine (GAE) que:

  1. accepte une URL par exemple param http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3 (url param doit être URLEncoded)
  2. Exécute HTMLUnit pour ouvrir http://example.com#!tab=TabA&subtab=SubTab3 et exécuter le javascript côté client sur le serveur.
  3. HTMLUnit renvoie le DOM une fois que tout est terminé (ou quelque chose comme 45 secondes est passé).
  4. Le contenu de retour peut être renvoyé via JSON/JSONP, ou une URL est renvoyée vers un fichier généré et stocké sur le serveur google app engine (pour les résultats "cachés" basés sur des fichiers) ... Si une URL vers un fichier a été retournée, vous pouvez CURL obtenir le code source (aka un instantané HTML).

Mon http://example.com application aurait besoin de gérer l'appel à http://htmlsnapshot.appspot.com ... essentiellement:

  1. Catch Googlebots appel à http://example.com/?_escaped_fragment_=tab=TabA%26subtab=SubTab3 (crawler Googlebot échappe certains caractères par exemple 26% = &).
  2. Envoyer la demande du serveur à http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3 (le paramètre url doit être URLEncoded)
  3. Rend le cliché HTML retourné au client.
  4. Google Indexe le contenu et nous nous réjouissons!

Je n'ai aucune expérience avec Google App Engine ou Java ou HTMLUnit.

Je pourrais être en mesure de le comprendre ... et posterai mes résultats si je fais.

Sinon, je pense que c'est une très bonne occasion pour quelqu'un d'écrire un billet de blog kick-ass qui décrit un novices, étape par étape pour la mise en place d'un service Web comme celui-ci.

Cela permettra à plus de gens de découvrir l'excellent (et gratuit!) Google App Engine. En outre, il encouragera sans aucun doute plus de gens à adopter les spécifications de Google pour le contenu AJAX explorable ... quelque chose dont nous pouvons tous bénéficier!

Comme la spécification de Google est de plus en plus acceptée, l'obstacle de la configuration d'un navigateur sans tête va envoyer de nombreux devs. Entrez maintenant avec une réponse pour la gloire et la gloire! (edit: à tout le moins je vais chanter tes louanges).

Frappez-moi sur twitter @_chrisjacob si vous souhaitez discuter des solutions.

+0

lecture intéressante: "Get HtmlUnit courir sur Google App Engine (GAE)" http://sourceforge.net/tracker/index.php?func= detail & aid = 2962074 & group_id = 47038 & atid = 448269 –

+0

Voir les notes de publication de htmlunit 2.8. –

+0

htmlunit 2.8 notes de publication: http://htmlunit.sourceforge.net/changes-report.html#a2.8 - vous avez raison, ils déclarent que le support GAE est fonctionnel (ou au moins "corrigé"). –

Répondre

2

J'ai réussi à utiliser HTMLunit sur AppEngine. Mon code GWT pour ce faire est disponible dans le gwt-platform project les résultats que j'ai obtenus étaient similaires à ceux du HTMLunit-AppEngine test application par Amit Manjhi.

Il devrait être relativement facile d'utiliser le support HTMLunit actuel de GWTP pour faire exactement ce que vous décrivez, bien que vous puissiez probablement le faire dans une application plus simple. Un problème que je vois est que les demandes AppEngine ont un délai de 30 secondes, de sorte que vous ne pouvez pas avoir une page qui prend HTMLunit plus long que cela à traiter.

MISE À JOUR: Il a été un certain temps, mais je fermé enfin le problème de longue date de faire des applications GWT explorables à l'aide GWTP. La documentation est pas tout à fait là, mais il faut vérifier la question: http://code.google.com/p/gwt-platform/issues/detail?id=1

+0

Donc, HtmlUnit fonctionne sur GAE maintenant? Des mises en garde que vous connaissez? –

+0

J'ai toujours un problème pour accéder à ma propre application avec HTMLunit, ce qui complique le travail d'une application sur le robot. Les détails de mon problème sont subtils mais je les décris ici (http://bit.ly/bViIMr). Je n'ai pas testé cela depuis un moment, alors peut-être que le problème a disparu. –

+0

Sur l'application de test d'Amit Manjhi, il semble fonctionner correctement avec la même URL. Peut-être que cela s'est arrangé, ou peut-être cela dépend d'une multitude de facteurs. –

Questions connexes