Seite 1 von 1

Programm --> Internetseite

Verfasst: Samstag 24. Januar 2004, 13:01
von Peter-Michael
Hallo,

Ihr kennt doch bestimmt diese Eingabefelder, wie dieses wo ich grad reinschreiben. Sie haben meistens den html code:

Code: Alles auswählen

<input type=hidden>
Jetzt möchte ich gerne wissen, wie folgendes geht:

Ich gebe in meinem Python Programm einem Text in ein entry widget ein und klicke auf einen Button. Daraufhin sollte der Text aus dem entry widget in so ein Eingabefeld auf einer Homepage erscheinen. Danach sollte das Formular auf der Homepage noch abgeschickt werden! Also wie hier z. B. das Python-Programm fügt den Text hier in Nachrichtentext ein und klickt danach automatisch auf Absenden!

Danke schonmal!

Grüße,
Peter-Michael

Verfasst: Samstag 24. Januar 2004, 13:46
von Dookie
Hi Peter-Michael,

direkt den Text in ein Eingabefeld zu übertragen ginge am einfachsten mit c&p. Allerdings glaube ich du willst was anderes.
Wenn Du auf einer Webseite ein Formular ausfüllst und auf den Absenden-Button klickst, wird der Inhalt der Eingabefelder an den Webserver geschickt. Praktisch kannst Du das Sender der Daten auch von einem Pythonscript auf Deinem Rechner machen lassen. Das 2. Beispiel auf http://www.python.org/doc/current/lib/h ... mples.html zeigt, wie die Parameter spam=1&eggs=2&bacon=0 an das cgi-script musi-cal.mojam.com//cgi-bin/query geschickt wird.


Gruß

Dookie

Verfasst: Samstag 24. Januar 2004, 14:13
von Peter-Michael
Danke erstmal Dookie! Wie geht denn das mit c&p?

Verfasst: Samstag 24. Januar 2004, 14:36
von Milan
Hi. c&p bedeutet copy and paste, also kopieren und einfügen, was dann natürlich der Benutzer machen müsste. Da du ja aber nur eine HTTP-Anfage mit den Daten aus der GUI absenden willst, genügt die httplib von Python eigentlich vollauf. Die Input-Felder des HTML-Formulares werden als Dictionarey über die urllib gecoded:

wenn dein input im HTML so def. ist: <input name="text">, dann lautet der Dictionaryeintrag {"text":"eingabe_des_users_aus_der_GUI"}.

Verfasst: Samstag 24. Januar 2004, 16:30
von Peter-Michael
Sorry aber mir ist das noch nicht so ganz klar geworden wie ich das machen soll! Wie würde das denn gehen wenn ich bei http://dict.leo.org oben links was eingeben möchte?

Verfasst: Samstag 24. Januar 2004, 18:46
von Milan
Du simmulierst ganz einfach, dass du das HTML-Formular ausgefüllt hättest, und lässt die Anfrage über Python statt über einen Browser laufen. Natürlich musst du dann auch allen inputs Werte zuweisen, wobei es ersteinmal mühsehlig ist alle Inputs aus dem Quelltext rauszuholen. Ich hab das mal gemacht, vielleicht verstehst du es jetzt:

Code: Alles auswählen

import httplib,urllib

def gethtmldata(server='',page='',request_method='GET',params={},debug=0):
    params=urllib.urlencode(params)
    if debug: print server,page,request_method,params
    c=httplib.HTTPConnection(server)
    c.request(request_method,page,params)
    r=c.getresponse()
    c.close()
    if r.reason=="OK" and r.status==200:
        return r.read()
    return ""

suchtext="learn"
s={'search':suchtext, 
  'submit':'Search', 
  'searchLoc':'0', 
  'relink':'on', 
  'spellToler':'standard', 
  'sectHdr':'on', 
  'tableBorder':'1', 
  'cmpType':'relaxed', 
  'lang':'en'}
a=gethtmldata('dict.leo.org','/','POST',s,1)
Damit wird die ganze HTML-Antwort in a gespeichert. Ich glaube aber eher, du willst nur den Browser mit dem Suchtext aufrufen... das geht so hier schneller:

Code: Alles auswählen

import urllib,webbrowser
suchtext="learn"
s=urllib.urlencode({ 
  'search':suchtext, 
  'submit':'Search', 
  'searchLoc':'0', 
  'relink':'on', 
  'spellToler':'standard', 
  'sectHdr':'on', 
  'tableBorder':'1', 
  'cmpType':'relaxed', 
  'lang':'en'})
webbrowser.open_new('http://dict.leo.org/?%s'%s)
Tut mir leid, dass jetzt das Thema verzerrt wird, aber es gab wirklich so viele Inputs die alle mit rein mussten... ich habe es nicht hinbekommen, die sinnvoll in mehrere Zeilen zu schreiben.

EDIT nun ist es besser lesbar, weil nicht mehr verzerrt...

Verfasst: Samstag 24. Januar 2004, 18:57
von Dookie
Ein Blick in den Source der Seite hat mir verraten, daß das CGI-Script die Daten mittels Get-Request erwartet. Das würde dann so gehen.

Code: Alles auswählen

import httplib, urllib

suche = "Python"

conn = httplib.HTTPConnection("dict.leo.org")
params = urllib.urlencode({"search": suche})
conn.request("GET", "?%s" % params)
r1 = conn.getresponse()

if r1.status != 200:
    raise  SystemExit("%i %s" % (r1.status, r1.reason))

data = r1.read()
conn.close
print data
data enthält dann die Seite die das Formular zurückliefert.


Gruß

Dookie

Verfasst: Samstag 24. Januar 2004, 19:00
von Milan
Tja, dass sagt zwar der Quelltext, aber er meinte es nicht ganz ernst. Ich hab es ausprobiert und ich hab nur die Startseite erhalten :wink: Außerdem sind die ganzen anderen Sachen radiobuttuns, die die Art und Weise der Übersetzung beeinflussen... :roll:

Verfasst: Samstag 24. Januar 2004, 19:02
von Dookie
Hi Mlan,

es reicht auch nur den searchtext zu übergeben bei dieser seite. ansonst kannst Du Dein Dictionary auch so schreiben:

Code: Alles auswählen

s=urllib.urlencode({
    'search':suchtext,
    'submit':'Search',
    'searchLoc':'0',
    'relink':'on',
    'spellToler':'standard',
    'sectHdr':'on',
    'tableBorder':'1',
    'cmpType':'relaxed',
    'lang':'en'}) 
Gruß

Dookie

Verfasst: Sonntag 25. Januar 2004, 10:07
von Peter-Michael
Hallo,

also ich habe das jetzt so verstanden, dass direkt das Script aufgerufen wird! Also würde ich bei dict.leo.org gleich das Suchergebnis bekommen. Ist das so richtig? Ich wollte das eigentlich so, dass ich das Ergebnis auch im Internet angezeigt bekommen; also nicht nur lokal. Wie z. B. bei einem webchat. Das Python-Programm fügt in die Eingabezeile den Text ein und schickt ihn ab, daraufhin soll er im Chat zu sehen sein! Geht das irgendwie genauso?

Verfasst: Sonntag 25. Januar 2004, 12:01
von Dookie
Da scheinst Du einen Denkfehler zu machen, bzw. eine falsche Vorstellung von dem Ganzen zu haben.
Wenn Du im Browser die Suchseite von dict.leo.org aufrufst, Dann ist das Formular auf deinem Rechner, nur die Beschreibung der Seite mit dem Formular kam vom Server. Wenn Du jetzt eine Eingabe machst, die dann vom Browser an den Server geschickt wird, wird dir die Beschreibung der Ergebnisseite vom Server auf deinen Rechner geschickt. Die Beschreibung wird dann gleich wieder vom Server vergessen.

Das was Du machen willst, geht nur mit CGI|PHP|Zope das dann auf dem Server ausgeführt wird.


Gruß

Dookie