2012-01-26 21 views
17

私はこの(weather)の例でSOAPの基本的な使い方を学びたいと思っています。 このデータを処理するにはどのような価値がありますか?PHPでsoapクラスの使い方(例)?

要求:

POST /globalweather.asmx HTTP/1.1 
Host: www.webservicex.net 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <GetWeather xmlns="http://www.webserviceX.NET"> 
     <CityName>string</CityName> 
     <CountryName>string</CountryName> 
    </GetWeather> 
    </soap12:Body> 
</soap12:Envelope> 
HTTP/1.1 200 OK 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: length 

応答:

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <GetWeatherResponse xmlns="http://www.webserviceX.NET"> 
     <GetWeatherResult>string</GetWeatherResult> 
    </GetWeatherResponse> 
    </soap12:Body> 
</soap12:Envelope> 
+0

@Topener私はそれについての情報を見つけましたが、トゥルーリアルは見つかりませんでした。 epsially php.net/manual/en/book.soap.phpではありません。あなたが偉大なトゥルーリアを投稿するなら、私はあなたの答えを受け入れるでしょう(偉大な意味で:この例を行うことができます) –

+3

トパーナー、私は同意しません。このサイトは、コードだけでなく、プログラミング関連の質問用です。問題があまりにも開放的でない限り、それはうまくいくはずです。この質問に対する大きな答えは、役に立つリソース、マニュアルや他の場所、または簡単な例へのリンクです。 –

答えて

43

最も簡単な方法は、次のようになります。

$requestParams = array(
    'CityName' => 'Berlin', 
    'CountryName' => 'Germany' 
); 

$client = new SoapClient('http://www.webservicex.net/globalweather.asmx?WSDL'); 
$response = $client->GetWeather($requestParams); 

print_r($response); 

だろう出力

stdClass Object 
(
    [GetWeatherResult] => <?xml version="1.0" encoding="utf-16"?> 
<CurrentWeather> 
    <Location>Berlin-Tegel, Germany (EDDT) 52-34N 013-19E 37M</Location> 
    <Time>Jan 26, 2012 - 07:50 AM EST/2012.01.26 1250 UTC</Time> 
    <Wind> from the SE (130 degrees) at 14 MPH (12 KT):0</Wind> 
    <Visibility> greater than 7 mile(s):0</Visibility> 
    <SkyConditions> mostly clear</SkyConditions> 
    <Temperature> 33 F (1 C)</Temperature> 
    <Wind>Windchill: 23 F (-5 C):1</Wind> 
    <DewPoint> 21 F (-6 C)</DewPoint> 
    <RelativeHumidity> 59%</RelativeHumidity> 
    <Pressure> 30.27 in. Hg (1025 hPa)</Pressure> 
    <Status>Success</Status> 
</CurrentWeather> 
) 

残りはSimpleXMLなどで解析できます。

この種類の応答は、このWebサービスに固有のものであることに注意してください。そこには、単にXML文字列を返すのではなく、むしろWSDL内の応答構造を提供する優れたWebサービスがあります。


EDIT同じサイト上のGeoIP検索することができ、 "より構造化" Webサービスのための例:

$client = new SoapClient('http://www.webservicex.net/geoipservice.asmx?WSDL'); 
$result = $client->GetGeoIP(array('IPAddress' => '8.8.8.8')); 

print_r($result); 

これがあなたに与えます:

stdClass Object 
(
    [GetGeoIPResult] => stdClass Object 
     (
      [ReturnCode] => 1 
      [IP] => 8.8.8.8 
      [ReturnCodeDetails] => Success 
      [CountryName] => United States 
      [CountryCode] => USA 
     ) 

) 

今あなたがすることができます

を呼び出して値にアクセスするだけです
+0

偉大な答え、公用語PHPドキュメントhttp://php.net/manual/en/book.soap.php suck。あなたの答えを読んだ後の出来事あなたの方法がマニュアルのどこに記述されているのかわかりませんが、それは私のために働きます。 – Ekonoval

+1

@Ekonoval:メソッド名は 'GetGeoIP()'と 'GetWeather()'はSoapClientの "実際の"メソッドではありませんが、魔法の '__call()'メソッドで呼び出されているので、私のメソッドは説明されていません。メソッドの名前はWSDLファイルで定義されています。 –

関連する問題