Estoy jugando con las solicitudes de API y GuzzleHTTP. Estoy probando con Napiarfolyam.hu. Recogen los tipos de cambio de diferentes Valuta en diferentes Bancos.
Su dirección de API: http://api.napiarfolyam.hu
Ellas aceptan solicitudes GET
parametrizadas
Posibles parámetros:
- bank (entradas posibles: bb, allianz, cib, citibank, commerz, erste, kdb, kh, mkb, oberbank, otp, raiffeisen, unicredit, volksbank, mnb, sopron, mfb, fhb)
- valuta (posibles entradas: GBP, AUD, DKK, JPY, CAD, NOK, CHF, SEK, USD, CZK, PLN, EUR, HRK, RON, TRY)
- datum (la fecha de la información que queremos ver) en formato AAAAMMDD
- datumend (si lo usamos obtendremos los tipos de cambio en datum-datumend intervall) en formato AAAAMMDD
- valutanem (posibles entradas valuta, deviza. Podemos acotar los resultados con él)
Dicen que su salida debería ser esta:
<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>
Mi controladora hasta ahora:
<?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();
}
}
Mi problema: $body
es un string
y no un xml
. ¿Por qué?
Sería mejor como xml
o array
porque mientras jugaba vi que a veces BuyPrice
y SellPrice
cambian de lugar.
2 respuestas
Puede llamar a la función xml()
incorporada de Guzzle,
http://guzzle3.readthedocs.io/http-client/response.html#xml-responses
Puede analizar y utilizar fácilmente una respuesta XML como objeto SimpleXMLElement utilizando el método xml () de una respuesta. Este método siempre devolverá un objeto SimpleXMLElement si la respuesta es XML válido o si el cuerpo de la respuesta está vacío. Obtendrá una excepción si llama a este método y la respuesta no es XML válido.
Aquí está tu código actualizado
<?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();
}
}
Guzzle no realiza ninguna conversión en la respuesta, le devuelve la respuesta como una cadena lista para que realice cualquier procesamiento que necesite.
Si desea tomar una cadena de XML y convertirla en un objeto, puede utilizar simplexml_load_string
, por ejemplo:
<?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;
}
}
Preguntas relacionadas
Nuevas preguntas
laravel
Laravel es un marco web PHP gratuito y de código abierto, creado por Taylor Otwell y destinado al desarrollo de aplicaciones web siguiendo el patrón arquitectónico modelo-vista-controlador (MVC) y basado en Symfony. El código fuente de Laravel está alojado en GitHub y tiene licencia bajo los términos de la Licencia MIT.