2

SOAPClientを使用してNOAASOAPAPIに特定の情報を照会しようとしています。このブログ投稿によると、サービスへの一般的なクエリは次のようになります。

$client = new SoapClient('http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl#NDFDgen');
$result = $client->NDFDgen(40.7893,-96.6938,'glance','2007-04-20T00:00','2007-04-21T00:00',NULL);

素晴らしくて簡単。ただし、ドキュメントを見ると、最後のパラメータがわかります。サーバーに送信されるブール値の配列を取得して、応答で特定のものをオンにすることができます。正しく実行されると、クエリは次のようになります

だからもちろん、私は次のようなことを試みます...

$client = new SoapClient('http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl#NDFDgen');
$result = $client->NDFDgen(40.7893,-96.6938,'time-series','2007-04-20T00:00','2007-04-21T00:00', array('mint' => 1, 'maxt' => 1));

'glance'は単に返されるものをハードコードするため(5番目のパラメーターを完全に無視するため)、パラメーター3を'時系列'に変更する必要があることに注意してください。いずれの場合も、上記のコードにより、サーバーは空白の応答を返します。私はその6番目のパラメーターで他のさまざまなことを試しましたが、運がありませんでした。

それで、大きなアイデアは何ですか?APIに期待どおりの「ブール値の配列」を与えるにはどうすればよいですか?

4

3 に答える 3

3

リクエストで XML パラメータを送信するには、単純な方法を使用します。ブール値の場合、「 true 」を直接使用できます。

$client = new SoapClient('http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl#NDFDgen',array('trace' => 1));
$param1 = new SoapParam(40.7893, "latitude");;
$param2 = new SoapParam(-96.6938, "longitude");;
$xmlDocument = '<product xmlns:dwml="http://www.weather.gov/forecasts/xml/DWMLgen/schema/DWML.xsd">glance</product>';
$xmlvar = new SoapVar($xmlDocument,XSD_ANYXML);
$param3 = new SoapParam($xmlvar, "product");;
$param4 = new SoapParam("2011-09-06T00:00", "startTime");;
$param5 = new SoapParam("2011-09-07T00:00", "endTime");;
$xmlDocument = '<weatherParameters xmlns:dwml="http://www.weather.gov/forecasts/xml/DWMLgen/schema/DWML.xsd">
<maxt xsi:type="xsd:boolean">true</maxt>
<mint xsi:type="xsd:boolean">true</mint>
</weatherParameters>';
$xmlvar = new SoapVar($xmlDocument,XSD_ANYXML);
$param6 = new SoapParam($xmlvar, "weatherParameters");;
$result = $client->NDFDgen($param1,$param2,$param3,$param4,$param5,$param6);
echo "REQUEST:".$client->__getLastRequest()."<br>"; 
print_r($result);
于 2011-09-07T14:16:51.333 に答える
1

unitType $Unitに記載されている が欠落しているようです__getFunctions()'e'米国または'm'メートル法の読み取り用に設定するだけです。また、必要なものだけでなく、すべての戻り値に対してブール値を定義する必要があるようです。したがって、定義する必要があります

$PARAMS = array('appt' => false,
'conhazo' => false,
'critfireo' => false,
'cumw34' => false,
'cumw50' => false,
'cumw64' => false,
'dew' => false,
'dryfireo' => false,
'iceaccum' => false,
'icons' => false,
'incw34' => false,
'incw50' => false,
'incw64' => false,
'maxrh' => false,
'maxt' => true,
'minrh' => false,
'mint' => true,
'phail' => false,
'pop12' => false,
'prcpabv14d' => false,
'prcpabv30d' => false,
'prcpabv90d' => false,
'prcpblw14d' => false,
'prcpblw30d' => false,
'prcpblw90d' => false,
'precipa_r' => false,
'ptornado' => false,
'ptotsvrtstm' => false,
'ptstmwinds' => false,
'pxhail' => false,
'pxtornado' => false,
'pxtotsvrtstm' => false,
'pxtstmwinds' => false,
'qpf' => false,
'rh' => false,
'rx' => false,
'sky' => false,
'sky_r' => false,
'snow' => false,
'td_r' => false,
'temp' => false,
'temp_r' => false,
'tmpabv14d' => false,
'tmpabv30d' => false,
'tmpabv90d' => false,
'tmpblw14d' => false,
'tmpblw30d' => false,
'tmpblw90d' => false,
'waveh' => false,
'wdir' => false,
'wdir_r' => false,
'wgust' => false,
'wspd' => false,
'wspd_r' => false,
'wwa' => false,
'wx' => false);

を宣言した後、呼び出しに追加しますunitType

$client = new SoapClient('http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl');
$result = $client->NDFDgen(40.7893,-96.6938,'time-series',NULL,NULL,'e',$PARAMS);
于 2014-03-18T21:19:15.260 に答える
0

サービスの説明を見ると、最後のパラメーターが複雑なデータ型であり、NOAA によって記述されていることがわかります。weatherParametersType のインスタンスを作成し、そのメンバーを直接変更できます。(例wParams.pop12=True)

于 2012-02-07T04:07:28.710 に答える