Webservices mit XML-RPC (in Zope)

Django, Flask, Bottle, WSGI, CGI…
Antworten
mike
User
Beiträge: 10
Registriert: Mittwoch 12. Juli 2006, 23:01

Mittwoch 12. Juli 2006, 23:16

Hallo zusammen,

ich habe die Aufgabe Webservices in Zope einzubinden, und zwar am Besten mit Hilfe von XML-RPC,
da ich kaum Erfahrung mit der Sache habe, hier meine Bitte um Hilfe.

Wenn ich einen Webservice nehme, der Aktien Daten liefert, wie könnte denn dann beispielsweise ein python script aussehen, daß mir einen Wert z.B. das Handelsvolumen zurückgibt?

hier ist der webservice, mit dem ich derzeit rumgepielt habe:
http://www.swanandmokashi.com/HomePage/ ... .asmx?WSDL

viele Grüße

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

Donnerstag 13. Juli 2006, 07:38

mike hat geschrieben:ich habe die Aufgabe Webservices in Zope einzubinden, und zwar am Besten mit Hilfe von XML-RPC
Hi mike!

Einen Webservice kannst du über das Protokoll SOAP ansprechen. Da ist leider nichts mit XML-RPC zu machen.

Ich würde zuerst einmal versuche in Python, komplett ohne Zope, auf den Webservice zuzugreifen und die Daten auszulesen. Erst wenn das alles funktionert, dann kannst du dein Skript als "Externe Methode" ins Zope inbinden.

Suche im Forum nach "SOAP" oder "WSDL". Vielleicht ist etwas darunter, was dich weiter bringt.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mike
User
Beiträge: 10
Registriert: Mittwoch 12. Juli 2006, 23:01

Donnerstag 13. Juli 2006, 09:02

danke für Deine Antwort,

bei meiner Recherche habe ich allerdings gelesen, daß das mit Soappy und auch mit xml-rpc gehen muß,

das Problem ist, daß soappy nicht standardmäßig in python ist, xmlrpclib hingegen schon...
mike
User
Beiträge: 10
Registriert: Mittwoch 12. Juli 2006, 23:01

Freitag 14. Juli 2006, 11:26

ich hab jetzt mal das modul SOAPpy installiert, funktioniert auch einigermaßen:

Code: Alles auswählen

from SOAPpy import WSDL

server = WSDL.Proxy('http://www.xmethods.net/sd/2001/BabelFishService.wsdl')

test = "good night"
print "Babelfish Translations"
print "------------------------"
print server.BabelFish('en_fr',test)
warum klappt das mit xmlrpclib nicht so?
ich hab's folgendermaßen probiert:

Code: Alles auswählen

import xmlrpclib

server = xmlrpclib.ServerProxy('http://www.xmethods.net/sd/2001/BabelFishService.wsdl')

test = "good night"
print "Babelfish Translations"
print "------------------------"
print server.BabelFish('en_fr',test)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 14. Juli 2006, 12:05

Weil SOAPpy das SOAP-Protokoll implementiert und die XMLRPClib das XML-RPC Protokoll. Du vergleichst also Äpfel mit Birnen und wunderst dich, dass Birnen anders schmecken als Äpfel. Es gehlt ja darum, dass SOAP und XML-RPC zwar beides auf XML basierte RPC-Protokolle sind, jedoch sind sie keineswegs kompatibel, also kannst du auf einen SOAP-Server nicht mit einem XML-RPC Client zugreifen.

Um nochmal gerold zu zitieren:
gerold hat geschrieben:Einen Webservice kannst du über das Protokoll SOAP ansprechen. Da ist leider nichts mit XML-RPC zu machen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mike
User
Beiträge: 10
Registriert: Mittwoch 12. Juli 2006, 23:01

Freitag 14. Juli 2006, 13:33

ok, das leuchted mir ein.

SOAPpy kann ich aber nicht verwenden, sondern nur die Module, die in python und somit in Zope integriert sind.

Wäre es möglich, die .wsdl Datei zu parsen, somit die Funktionen des Webservices herauszufinden, dann einen eigenen SOAP request envelope daraus zu erstellen und an den Webservice zu schicken, und den response envelope dann wiederum zu parsen.
so müßte man doch auch zu den gewünschten Ergebnissen kommen, oder?
wenn ja, wie groß schätzt ihr den Aufwand ?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 14. Juli 2006, 13:44

mike hat geschrieben:SOAPpy kann ich aber nicht verwenden, sondern nur die Module, die in python und somit in Zope integriert sind.
Hi mike!

Darfst du "Externe Methoden" erstellen? Wenn nicht, dann geht es sowiso nicht! Auch ein (sowiso nicht ausreichendes) XML-RPC wäre ohne die Möglichkeit, eine "Externe Methode" zu erstellen, nicht möglich.

Hast du keinen Zugang zum Server? Wenn du zumindest zum Ordner für die "Externen Methoden" (<Zope-Instanz>/Extensions) Zugang hast, dann kannst du dir alle benötigten Python-Module für SOAPpy in diesen Ordner legen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mike
User
Beiträge: 10
Registriert: Mittwoch 12. Juli 2006, 23:01

Freitag 14. Juli 2006, 14:10

gerold hat geschrieben: Darfst du "Externe Methoden" erstellen?
Zugang zum Server habe nicht, nur zum Manage Interface von Zope, dort kann ich neue Dateien erstellen. "External Method" kann ich auch hinzufügen.
komme ich damit auch weiter?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 14. Juli 2006, 14:27

mike hat geschrieben:Zugang zum Server habe nicht, nur zum Manage Interface von Zope, dort kann ich neue Dateien erstellen. "External Method" kann ich auch hinzufügen. komme ich damit auch weiter?
Hi mike!

Leider nein. Du brauchst Zugang zu einem speziellen Ordner im Dateisystem um eine "Externe Methode" einrichten zu können. Ohne diese "Externe Methoden" hast du keine Chance, privilegierten Python-Code auszuführen.

Siehe: http://www.python-forum.de/post-23937.html#23937

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mike
User
Beiträge: 10
Registriert: Mittwoch 12. Juli 2006, 23:01

Freitag 21. Juli 2006, 16:19

Hi,

danke für die Hilfe bis jetzt, hab allerdings noch weitere Fragen :)

ich hab jetzt zum testen Zope lokal auf einem Rechner installiert,
und 2 Extensions Verzeichnisse gefunden:
\Zope-Instance\Extensions und
\skel\Extensions

wie und wohin installiere ich denn jetzt das SOAPpy Packet, damit ich es in einem python script verwenden kann ?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 21. Juli 2006, 20:57

mike hat geschrieben:\Zope-Instance\Extensions und
\skel\Extensions

wie und wohin installiere ich denn jetzt das SOAPpy Packet, damit ich es in einem python script verwenden kann ?
Hi mike!

Der Ordner ``skel`` (skeleton) ist nur eine Vorlage für neue Zope-Instanzen.

Ich habe keine Erfahrung mit SOAPpy und weiß nicht, wie es sich verhält, aber ich denke mal, dass es genügen sollte, wenn der Ordner "SOAPpy" in den Extensions-Ordner kopiert wird.

Doch nicht :-(

Ich sehe gerade in der README, dass es zwei Abhängigkeiten gibt, damit SOAPpy funktioniert:

Code: Alles auswählen

    REQUIRED PACKAGES:
    -----------------

    - fpconst 0.6.0 or later,
      <http://research.warnes.net/projects/rzope/fpconst/>

    - pyXML 0.8.3 or later, <http://pyxml.sourceforge.net>
Es dürfte in deinem Fall also doch schwieriger werden, SOAP unter Zope zum Laufen zu bekommen. Überhaupt dann nicht, wenn du keinen ROOT-Zugang hast. Du müsstest dir pyXML und was sonst noch nötig ist auf einem anderen Computer compilieren und alles was für SOAPpy notwendig ist zusammentragen und dann in den Extensions-Ordner kopieren. Das Betriebssystem muss natürlich auf beiden Computern zusammenpassen. Vielleicht ist das ein wenig zu viel, wenn man kaum Erfahrung mit Python hat.

Also mit Root-Zugriff auf den Webserver, falls es sich um einen Linux-Server handelt, würde ich das neueste SOAPpy und dessen Abhängigkeiten installieren. Da unter Linux kein eigenes Python für Zope notwendig ist, kann SOAPpy sofort in einer "externen Methode" verwendet werden.

Unter Windows gibt es Binärpakete zum Installieren. Man kann, falls man die gleiche Python-Version im Zope einsetzt, die auch als Haupt-Python installiert ist, den Python-Pfad des Zope-Pythons so erweitern, dass Zope auch die Installierten Pakete des Haupt-Pythons mitverwenden kann.
Das kann in der "zope.conf"-Datei mit der Direktive "path" erledigt werden.

Fazit: Mit ein wenig Erfahrung in dem Bereich, könntest du es schaffen, SOAPpy nur mit Zugang zum Extensions-Ordner zum Laufen zu bringen. Einfach durch installieren aller notwendigen Produkte auf deinem Computer und kopieren der notwendigen Dateien in den Extensions-Ordner. Hast du ROOT-Zugang zum Webserver, dann wird es evt. einfacher, da du die Installation direkt über einen SSH-Zugang anstoßen kannst. Da die alten SOAPpy-Versionen angeblich nicht gut sein sollen, müsstest du aber auch dann zumindest die aktuellste SOAPpy-Version händisch (also nicht über das Paketmanagement) installieren.

Mehr fällt mir im Moment nicht dazu ein.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten