我正在修改GuzzleHTTP和API请求。我正在使用Napiarfolyam.hu进行测试。他们收集不同银行的不同Valuta的汇率。
他们的API地址:http://api.napiarfolyam.hu
他们接受参数化GET
请求
可能的参数:
他们说他们的输出应该是这样的:
<arfolyam>
<valuta>
<item>
<bank>bank rövidítése</bank>//The bank's short name
<datum>mikor kapta ezt az értéket</datum>//Date
<penznem>pénznem kódja</penznem>//Currency
<vetel>árfolyam 1 egységre</vetel>//BuyPrice
<eladas>árfolyam 1 egységre</eladas>//SellPrce
</item>
</valuta>
<deviza>
<item>
<bank>bank rövidítése</bank>//The bank's short name
<datum>mikor kapta ezt az értéket</datum>//date
<penznem>pénznem kódja</penznem>//Currency
<vetel>árfolyam 1 egységre</vetel>//Buyprice
<eladas>árfolyam 1 egységre</eladas>//Sellprice
<kozep>árfolyam 1 egységre</kozep>//Middleprice only when the bank is MNB
</item>
</deviza>
</arfolyam>
我的控制器到目前为止:
<?php
namespace App\Http\Controllers;
use DB;
use Carbon\Carbon;
use GuzzleHttp\Client;
class ValutaController extends Controller {
public function getValuta($bankName = '', $valuta = ''){
$client = new Client();
$response = $client->request('GET', "http://api.napiarfolyam.hu?bank={$bankName}&valuta={$valuta}");
$body = $response->getBody();
}
}
我的问题:$body
是string
而不是xml
。为什么呢?
最好是xml
或array
,因为我看到有时BuyPrice
和SellPrice
改变了位置。
答案 0 :(得分:1)
Guzzle不会对响应执行任何转换,它会将响应作为字符串返回给您,以便您执行所需的任何处理。
如果您想要获取一串XML并将其转换为对象,那么您可以使用simplexml_load_string
,例如:
<?php
namespace App\Http\Controllers;
use DB;
use Carbon\Carbon;
use GuzzleHttp\Client;
class ValutaController extends Controller {
public function getValuta($bankName = '', $valuta = ''){
$client = new Client();
$response = $client->request('GET', "http://api.napiarfolyam.hu?bank={$bankName}&valuta={$valuta}");
$data = simplxml_load_string($response->getBody());
return $data->valuta->item->vetel;
}
}
答案 1 :(得分:1)
您可以调用Guzzle内置的xml()
函数,
http://guzzle3.readthedocs.io/http-client/response.html#xml-responses
您可以使用响应的xml()方法轻松解析XML响应并将其用作SimpleXMLElement对象。如果响应是有效的XML或响应主体为空,则此方法将始终返回SimpleXMLElement对象。如果调用此方法并且响应不是有效的XML,则会出现异常。
这是您更新的代码
<?php
namespace App\Http\Controllers;
use DB;
use Carbon\Carbon;
use GuzzleHttp\Client;
class ValutaController extends Controller {
public function getValuta($bankName = '', $valuta = ''){
$client = new Client();
$response = $client->request('GET', "http://api.napiarfolyam.hu?bank={$bankName}&valuta={$valuta}");
$body = $response->xml();
}
}