AJAX CrossDomain Probs mit Python umgehen

Django, Flask, Bottle, WSGI, CGI…
Antworten
stelegraph
User
Beiträge: 8
Registriert: Dienstag 9. Oktober 2007, 15:19

Hallo liebe Leute,

Ich bin totaler Python Laie, hab ein Plone aufgesetzt und wollte per Javascript eine XML Ausgabe die auf einem anderen Server liegt auslesen.

Mozilla lässt das aber nicht zu.
Nun wüsste ich wie ich mit PHP die URL laden könnte und einfach per ECHO wieder ausgeben mit einem lokalen PHP File, hernach wäre es kein Problem mehr auf die Datei per Javascript zuzugreifen.

Fragliche URL ist http://www.unsaleable.com/soupandfish/search?sex=m

Die Frage ist also wie kriege ich Python unter Plone dazu diese URL auszulesen und nochmal am Bldschirm auszugeben?

Bin für jede Hilfe wirklich dankbar, das Projekt brennt schon ziehmlich :roll:
stelegraph
User
Beiträge: 8
Registriert: Dienstag 9. Oktober 2007, 15:19

Ich füge eine py datei in die python lib ein die per urllib.urlopen die entfernte xml datei öffnet.

dazu habe ich eine external method angelegt im zmi die darauf zugreift. diese ist wiederum in ein dtml dokument gepackt.

nun sollte ich aber noch bei aufrufen des dtml dokuments (evtl. per url) parameter übergeben - wie kann ich aber im dtml dokument diese parameter abfragen um sie dann wiederum der external method zu übergeben?
:?:

oder gibt es eine andere methode als DTML um auf eine externe methode zuzugreifen?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

stelegraph hat geschrieben:dazu habe ich eine external method angelegt im zmi die darauf zugreift. diese ist wiederum in ein dtml dokument gepackt.
Hallo stelegraph!

Willkommen im Python-Forum!

Du kannst direkt auf die Externe Methode zugreifen. Du brauchst nicht auf DTML ausweichen.

http://localhost:8080/myplone/my_extmet ... param2=bbb

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
stelegraph
User
Beiträge: 8
Registriert: Dienstag 9. Oktober 2007, 15:19

hi gerold!

vielen dank für die antwort. bin zwar eine stunde vorher selbst drauf gekommen aber trotzdem super zu wissen dass hier leute sind die tatsächlich die lösung hätten :D

jetzt kämpfe ich grad noch mit meinem javascript parser.... und natürlich dem üblichen verdächtigen: dem IE :roll:
stelegraph
User
Beiträge: 8
Registriert: Dienstag 9. Oktober 2007, 15:19

was ich übergeben müsste wäre ein parameter der so aussieht:

sex=m&designer=bw&size=42

allerdings gerät er dann natürlich durcheinander weil er dängt diese parameter wären an das python gerichtet, diese sollten jedoch diese (auf einem anderen server liegende) script hier ansprechen:

http://www.unsaleable.com/soupandfish/s ... esigner=mm

(hier mit beispiel parametern.

meine idee wäre die parameter anders zu übergeben. zb:
sex_m-designer_bw-size_42

wie schreibe ich aber einen python code der diesen parameter wieder in
sex=m&designer=bw&size=42
übersetzt?
:?:

für jegliche hilfe wäre ich sehr dankbar...

alles gute,
stefan
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

stelegraph hat geschrieben:sex=m&designer=bw&size=42
[...]
wie schreibe ich aber einen python code der diesen parameter wieder in sex=m&designer=bw&size=42 übersetzt?
Hallo Stefan!

Wenn der Kopf deiner externen Methode z.B. so aussieht:

Code: Alles auswählen

def my_external_method(self):
dann bekommst du an "self" gebunden den "context" übermittelt.

``self.REQUEST.QUERY_STRING`` sollte dir weiter helfen.

Ich kann's jetzt nicht ausprobieren. Schreibe ob es funktioniert hat oder nicht.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
stelegraph
User
Beiträge: 8
Registriert: Dienstag 9. Oktober 2007, 15:19

hi gerold!

danke!

habs jetzt mal so gemacht und klappt wunderbar:

Code: Alles auswählen

>>> s = "sex_m-designer_bw-size_42"
>>> s = s.replace('_', '=')
>>> s = s.replace('-', '&')
danke nochmal derweil!
stelegraph
User
Beiträge: 8
Registriert: Dienstag 9. Oktober 2007, 15:19

nun sollte ich noch gültigen XML Code ausgeben - ist ein header problem...
wie sag ich ihm das?
leider funktioniert return printed bei mir nicht. zope behauptet es gäbe diese globale variable nicht...

Code: Alles auswählen

def getXML2(self, param):
    print "Content-Type: text/xml; charset=iso-8859-1"
    print
    param = param.replace('_', '=')
    param = param.replace('-', '&')
    urlnew = 'http://www.unsaleable.com/soupandfish/search?'+param
    feed = urllib.urlopen (urlnew)
    ergebnis = feed.read ()
    zusammen = '<?xml version="1.0" encoding="iso-8859-1" ?>\n'+ergebnis
    print zusammen
    return printed
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

stelegraph hat geschrieben:nun sollte ich noch gültigen XML Code ausgeben - ist ein header problem...wie sag ich ihm das?
Hallo stelegraph!

"print mit späterer Rückgabe von printed" funktioniert nur innerhalb von Zope. Du aber arbeitest mit einer externen Methode.

Ungetestet, aber in etwa so:

Code: Alles auswählen

def my_external_method(self):
    request = self.REQUEST
    response = request.RESPONSE
    
    s = (
        "Hallo Welt\n"
        "Hallo Welt"
    )
    
    response.setHeader('content-type', 'text/plain')
    response.setHeader('content-length', str(len(s)))
    #response.setHeader('content-disposition', 'attachment; filename=hallowelt.txt')
    response.write(s)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
stelegraph
User
Beiträge: 8
Registriert: Dienstag 9. Oktober 2007, 15:19

aber folgendes ist mir nicht klar:

ich muss ja ein xml dokument am bildschirm damit ausgeben können.
also am bildschirm soll das ganze sich so verhalten als wärs ein text\xml ding.

brauch ich dazu kein return?

kann ich sagen: return response?

sorry für diese detailfragen... ich glaube mir ist einiges an grundlagen nicht klar... und das projekt sollte morgens um 5 uhr funktionieren... :) :oops:
stelegraph
User
Beiträge: 8
Registriert: Dienstag 9. Oktober 2007, 15:19

DANKE

DANKE

DANKE

das Ergebnis ist hier zu begutachten (ab ca. 5 Uhr):

http://www.soupandfish.net/


ohne deinen letzten tip wärs wohl nichts geworden.

:D
Antworten