SOAP mit PHP 4 und PEAR Package
Benötigt wird hier PHP 4.3.0 oder höher.
Download des Beispiels inkl. PEAR
Die Benutztung von SOAP-Diensten gestaltet sich unter PHP in der Version 4 etwas
schwieriger, da PHP 4 keine eigenen SOAP Funktionen hat. Also müssen diese mit
Packages nachgerüsten werden. Als Beispiel waren NuSOAP oder das PEAR/SOAP Package
zu nennen. Das PEAR Package wird einfach heruntergeladen und auf den eigenen Webspace
hochgeladen. Benötigt wird aber nur der PEAR Core und das SOAP Package sowie noch
3 andere einzelne Dateien aus dem HTTP und Net Package (diese werden von SOAP benötigt).
Hier kann das SOAP Package manuell heruntergeladen werden, um es auf dem Server
von Hand einzufügen: http://pear.php.net Alternativ kann auch einfach nur der
hier als Beispiel angehangene Teil mit dem PEAR Core und den benötigten Dateien
heruntergeladen werden.
|
Es muss dann auf den Server/Webspace geladen werden und wird dann wie in der Abbildung
eingefügt, d.h. eine index.php und ein PEAR Ordner in einem Verzeichnis.
set_include_path($_SERVER['DOCUMENT_ROOT'] . '/PEAR/');
require_once('SOAP/Client.php');
Dies stellt in der index.php die erfoderlichen SOAP Funktionen/Klassen zur
Verfügung.
Set-include_path() kann allerdings in den Server Einstellungen gesperrt sein! Dann
müssten ca. 15 Dateien editiert werden.
Erklärung: Diese Funktion setzt einen Standard-Pfad für include
Befehle, da in den PEAR Packages nur relative Angaben vorkommen. Sollte die Funktion
gesperrt sein, können die einzelnen Packages nicht gefunden werden bzw. finden
sich auch gegenseitig nicht, es müssten dann in mehreren Dateien die relativen
Pfadangaben der einzelnen Packages durch absolute ersetzt werden, die mit set_include_path
automatisch davor gesetzt werden würden.
|
Quellcode
<?php
set_include_path($_SERVER['DOCUMENT_ROOT'] . '/PEAR/');
require_once('SOAP/Client.php');
$wsdl=new SOAP_WSDL('http://www.OpenLigaDB.de/Webservices/Sportsdata.asmx?WSDL');
$sportsdata=$wsdl->getProxy();
$paarung=$sportsdata->GetMatchdataByGroupLeagueSaison(24,'bl1','2007');
// Jetzt sind in $paarung die Spieldaten enthalten
?>
Beispielausgabe
<table align='left' width='900' border='1'bordercolor='#000000'
bordercolorlight='#FFFFFF' bordercolordark='#000000'>
<tr>
<td align='center'>Spielbeginn</td>
<td align='center'>ID</td>
<td align='center'>Team 1</td>
<td align='center'>Team 2</td>
<td align='center' colspan='2'>Ergebnis</td>
<td align='center'>Status</td>
</tr>
<?php
for ($i=0; $i<=8; $i++)
{
echo "<tr>";
echo("<td align='center'>".$paarung[$i]->matchDateTime."</td>");
echo("<td align='center'>".$paarung[$i]->matchID."</td>");
echo("<td align='center'>".$paarung[$i]->nameTeam1."</td>");
echo("<td align='center'>".$paarung[$i]->nameTeam2."</td>");
echo("<td align='center'>".$paarung[$i]->pointsTeam1."</td>");
echo("<td align='center'>".$paarung[$i]->pointsTeam1."</td>");
echo("<td align='center'>".$paarung[$i]->matchIsFinished."</td>");
echo "</tr>";
}
?>
</table>
|
Spielbeginn
|
ID
|
Team 1
|
Team 2
|
Ergebnis
|
Status
|
|
2008-03-14T20:30:00
|
1111
|
FC Schalke 04
|
MSV Duisburg
|
2
|
2
|
true
|
|
2008-03-15T15:30:00
|
1102
|
VfL Bochum
|
VfB Stuttgart
|
1
|
1
|
true
|
|
2008-03-15T15:30:00
|
1103
|
Energie Cottbus
|
FC Bayern München
|
2
|
2
|
true
|
|
2008-03-15T15:30:00
|
1105
|
Hamburger SV
|
Borussia Dortmund
|
1
|
1
|
true
|
|
2008-03-15T15:30:00
|
1106
|
Hansa Rostock
|
Hertha BSC
|
0
|
0
|
true
|
|
2008-03-15T15:30:00
|
1107
|
Hannover 96
|
Arminia Bielefeld
|
2
|
2
|
true
|
|
2008-03-15T15:30:00
|
1108
|
Karlsruher SC
|
Eintracht Frankfurt
|
0
|
0
|
true
|
|
2008-03-16T17:00:00
|
1110
|
Werder Bremen
|
VfL Wolfsburg
|
0
|
0
|
true
|
|
2008-03-16T17:00:00
|
1104
|
Bayer Leverkusen
|
1. FC Nürnberg
|
4
|
4
|
true
|
|
Achtung! Fehler in neustem PEAR-Package
Dieser Fehler führt dazu, dass bei Ausgabe des Beispiels nur die ersten 7 Spiele
eines Spieltages ausgegeben werden. Die Durchführung dieses "Patches" ist nur nötig,
wenn bei dem Beispiel nur 7 Spiele ausgegeben werden.
/PEAR/SOAP/Base.php editieren
Zeile 783
$return->{$item->name} =& $this->_decode($item);
}
} elseif (isset($return->{$item->name})) {
//$isstruct = false;
if (count(get_object_vars($return)) == 1) {
$d =& $this->_decode($item);
$return = array($return->{$item->name}, $d);
Ersetzen mit
$return->{$item->name} =& $this->_decode($item);
}
} elseif (isset($return->{$item->name})) {
//$isstruct = false;
if (count(get_object_vars($return)) == 1) {
$isstruct = false;
$d =& $this->_decode($item);
$return = array($return->{$item->name}, $d);
Hier einige Zeilen darüber, wie man mittels Groovy auf der Java-Plattform auf die Daten zugreift:
Groovy ermöglicht eine einfache Nutzung von SOAP-basierten WebServices.
Benötigt wird nur
GroovyWS. Am einfachsten ist es für Experimente,
wenn man das JAR-Archiv, welches alle Abhängigkeiten enthält, direkt nach ~/.groovy/lib kopiert.
Damit ist es üblicherweise automatisch im Classpath enthalten.
Exemplarisch sei hier der Zugriff auf das Spiel mit der MatchID 1103 gezeigt:
import groovyx.net.ws.WSClient
def openLigaDB = new WSClient("http://www.OpenLigaDB.de/Webservices/Sportsdata.asmx?WSDL", this.class.classLoader)
def match = openLigaDB.GetMatchByMatchID(1103)
println "Spiel ${match.matchID} wurde zwischen ${match.nameTeam1} und ${match.nameTeam2} gespielt."
zur Verfügung gestellt von Nils Kassube, www.newscope.com