Wie Twill und Python in einen Code zu kombinieren, die auf „Google App Engine“ ausgeführt werden könnten?

StackOverflow https://stackoverflow.com/questions/2717325

Frage

Ich habe Köper auf meinem Computer installiert (vorher Python installiert haben 2.5) und haben es vor kurzem im Einsatz.

ist Python auf der Festplatte C auf meinem Computer installiert: C: \ Python25

Und der Köper-Ordner ( „Köper-0.9“) befindet sich hier: E: \ tmp \ köper 0.9

Hier ist ein Code, dass ich in Köper benutzen:

go “some website’s sign-in page URL”
formvalue 2 userid “my login”
formvalue 2 pass “my password”
submit
go “URL of some other page from that website”
save_html result.txt

Dieser Code hilft ich in eine Webseite anzumelden, in dem ich ein Konto habe, notieren Sie den HTML-Code von einer anderen Seite dieser Website (die ich in nur nach der Anmeldung zugreifen kann), und speichert sie in einer Datei mit dem Namen „result.txt“ (natürlich vor diesem Code muss ich zunächst ersetzen „mein Login“ mit meinem wirklichen Login „Passwort“ mit meinem wirklichen Passwort „sign-in der einige Website-Seiten-URL“ und „URL einiger andere Seite von dieser Website“mit echten URLs dieser Website, und die Nummer 2 mit der Zahl der Form auf dieser Website, die als Anmeldeformular auf dieser Website Login-Seite)

verwendet wird,

Dieser Code I Speicher in „test.twill“ Datei, die in meinem „Köper-0.9“ Ordner befindet: E: \ tmp \ köper 0.9 \ test.twill Ich betreibe diese Datei von meiner Eingabeaufforderung: python-Twill-sh test.twill

Jetzt habe ich auch „Google App Engine SDK“ von „Google App Engine“ installiert und auch für eine Weile mit ihm wurde.

Zum Beispiel, ich habe diesen Code gewesen mit:

import hashlib
m = hashlib.md5()
m.update("Nobody inspects")
m.update(" the spammish repetition ")
print m.hexdigest()

Dieser Code hilft mir die Phrase zu verwandeln „Niemand kontrolliert die spammish Wiederholung“ in md5 verdauen.

Nun, Wie kann ich diese beiden Teile des Codes zusammen in einem Python-Skript, dass ich auf „Google App Engine“ laufen könnte?

Lassen Sie uns sagen, möchte ich meinen Code auf eine Website von „Google App Engine“ einzuloggen, auf dieser Website auf eine andere Seite gehen, HTML-Code notieren (das ist, was mein Köper Code der Fall ist) und als Transformation HTML-Code in seine md5 verdauen (das ist, was mein zweiter Code des Fall ist). Also, wie kann ich diese zwei Codes in einem Python-Code kombinieren?

Ich denke, es sollte irgendwie getan werden, indem man Köper importieren, aber wie kann es getan werden? Kann ein Python-Code - die eine, die von „Google App Engine“ betrieben wird - Import-Twill von irgendwo im Internet? Oder vielleicht ist Twill bereits installiert auf „Google App Engine“?


Update 1:

(dieses Update ist meine Antwort auf Wooble Antwort)

Hier ist die Liste aller Ordner (in meiner „Köper-0.9“ -Ordner), die __init__.py Dateien enthalten. (Einige Ordner auf dieser Liste sind in anderen Ordnern befinden, die ebenfalls in dieser Liste erwähnt):

E: \ Köper-0.9 \ build \ lib \ Köper \ extensions \ match_parse

E: \ Köper-0.9 \ build \ lib \ Köper \ extensions

E: \ Köper-0.9 \ build \ lib \ Köper \ other_packages \ _mechanize_dist

E: \ Köper-0.9 \ build \ lib \ Köper \ other_packages

E: \ Köper-0.9 \ build \ lib \ Köper

E: \ Köper-0.9 \ Köper \ extensions \ match_parse

E: \ Köper-0.9 \ Köper \ extensions

E: \ Köper-0.9 \ Köper \ other_packages \ _mechanize_dist

E: \ Köper-0.9 \ Köper \ other_packages

E: \ Köper-0.9 \ Köper

War es hilfreich?

Lösung

Um Bibliotheken von Drittanbietern in App Engine-Projekten zu verwenden, müssen Sie einfach mit Ihrer Anwendung einschließen, wenn Sie bereitstellen. Kopieren Sie den Ordner Köper (die enthält __init__.py) in Ihrer Anwendung Ordner und stellen Sie es.

Mit Blick auf den Köper Google Code Projekt, es scheint, dass Köper seine Abhängigkeiten enthält (pyparsing, mechanize, etc.) in der Verpackung, so dass Sie nicht brauchen, etwas anderes zu schließen.

Andere Tipps

Hier ist ein Beispiel für Köper mit einer Google-Suche ausführen, wenn das hilft. Es zeigt unter Verwendung von Köper und beautifulsoup zusammen zu Parse-Web-Seiten:

>>> import twill.commands
>>> import BeautifulSoup
>>> 
>>> class browser:
...    def __init__(self, url="http://www.google.com",log = None):
...       self.a=twill.commands
...       self.a.config("readonly_controls_writeable", 1)
...       self.b = self.a.get_browser()
...       self.b.set_agent_string("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14")
...       self.log = log
...       self.b.clear_cookies()
...       self.url=url
...    def googleQuery(self, query="python code"):
...       self.b.go(self.url)
...       #self.b.showforms()
...       f = self.b.get_form("f")
...       #print "form is %s" % f
...       f["q"] = query
...       self.b.clicked(f, "btnG")
...       self.b.submit()
...       pageContent = self.b.get_html()
...       soup=BeautifulSoup.BeautifulSoup(pageContent)
...       ths = soup.findAll(attrs={"class" : "l"})
...       for a in ths:
...          print a
... 
>>> t=browser()
>>> t.googleQuery("twill queries")
==> at http://www.google.ie/
Note: submit is using submit button: name="btnG", value="Google Search"

<a href="http://pyparsing.wikispaces.com/WhosUsingPyparsing" class="l" onmousedown="return clk(this.href,'','','res','1','','0CBMQFjAA')">pyparsing - WhosUsingPyparsing</a>
<a href="http://www.mail-archive.com/twill@lists.idyll.org/msg00048.html" class="l" onmousedown="return clk(this.href,'','','res','2','','0CBcQFjAB')">Re: [<em>twill</em>] <em>query</em>: docs, and web site.</a>
<a href="http://www.mail-archive.com/twill@lists.idyll.org/msg00050.html" class="l" onmousedown="return clk(this.href,'','','res','3','','0CBkQFjAC')">Re: [<em>twill</em>] <em>query</em>: docs, and web site.</a>
<a href="http://www.genealogytoday.com/surname/finder.mv?Surname=Twill" class="l" onmousedown="return clk(this.href,'','','res','4','','0CB4QFjAD')"><em>Twill</em> Genealogy and Family Tree Resources - Surname Finder</a>
<a href="http://a706cheap-apparel.hobby-site.com/ladies-cotton-faded-twill-le-chameau-breeks-42" class="l" onmousedown="return clk(this.href,'','','res','5','','0CCEQFjAE')">Ladies Cotton Faded <em>Twill</em> Le Chameau Breeks 42</a>
<a href="http://twill.idyll.org/examples.html" class="l" onmousedown="return clk(this.href,'','','res','6','','0CCMQFjAF')"><em>twill</em> Examples</a>
<a href="http://panjiva.com/Sri-Lankan-Manufacturers-Of/twill+capri" class="l" onmousedown="return clk(this.href,'','','res','7','','0CCcQFjAG')">Sri-Lankan <em>Twill</em> Capri Manufacturers | Sri-Lankan Suppliers of <b>...</b></a>
<a href="http://c586cheap-apparel.dyndns.ws/twill-beige-blazer" class="l" onmousedown="return clk(this.href,'','','res','8','','0CCoQFjAH')"><em>Twill</em> beige blazer</a>
<a href="http://stackoverflow.com/questions/2267537/how-do-you-use-relative-paths-for-twill-tests" class="l" onmousedown="return clk(this.href,'','','res','9','','0CCwQFjAI')">How do you use Relative Paths for <em>Twill</em> tests? - Stack Overflow</a>
<a href="http://mytextilenotes.blogspot.com/2010/01/introduction-to-twill-weave.html" class="l" onmousedown="return clk(this.href,'','','res','10','','0CC8QFjAJ')">My Textile Notes: Introduction to <em>Twill</em> Weave</a>
>>>  

Keine Ahnung, was Köper tut (na ja, googeln), aber AppEngine Angebote fetch() Funktion , die verwendet werden können, um Webseiten zu holen. Es unterstützt auch POST-Methode z.B. für Anmeldungen.

(Ich bezweifle, Twill-Werke in App Engine, da App Engine Python-Bibliotheken aus Sicherheitsgründen begrenzt hat. Nur eine Vermutung, though.)

Ich glaube, Sie nach einem Weg suchen, um das Twill-Modul in App-Engine zu importieren. Sie müssen entweder um herauszufinden, wo die Köper Python-Dateien sind oder wie ein Quellpaket von ihnen, um es mit Ihrer Website zu verpacken, aber es sieht aus wie 3rd-Party-Module importieren kann mit wenigen Ausnahmen, siehe unten erfolgen.

Versuchen Sie zipimport nach den Anweisungen aus dem Google-Website hier und hier .

von Google DRITTER Library-Seite:

App Engine verwendet eine angepasste Version der zipimport Funktion anstelle der Standard-Implementierung. Es funktioniert in der Regel die übliche Art und Weise: das Zip-Archiv zu sys.path hinzufügen, dann wie gewohnt importieren. Mit diesen Ausnahmen: zipimport kann nur Importmodule im Archiv als Py Quelldateien gespeichert. Es kann nicht Importmodule als .pyc oder .pyo Dateien gespeichert. zipimport in reinem Python implementiert und nicht nativen Code nicht verwendet für die Dekomprimierung (C-Code).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top