2011-11-03 28 views
10

Soy bastante nuevo en PHP y todo el trabajo de trabajar con API RESTful. Todo lo que quiero hacer en este momento es emitir correctamente una solicitud HTTP GET simple a OpenStreetMap API.Cómo acceder a la API RESTful a través de PHP

Estoy usando el simple PHP REST client by tcdent y básicamente entiendo su funcionalidad. Mi código de ejemplo para conseguir los Cambios actuales en OSM es:

<?php 
include("restclient.php"); 

$api = new RestClient(array(
    'base_url' => "http://api.openstreetmaps.org/", 
    'format' => "xml") 
); 
$result = $api->get("api/0.6/changesets"); 

if($result->info->http_code < 400) {   
    echo "success:<br/><br/>";   
} else { 
    echo "failed:<br/><br/>"; 
} 
echo $result->response; 
?> 

Cuando entro en la URL "http://api.openstreetmaps.org/api/0.6/changesets" en el navegador, se entrega el archivo XML . Sin embargo, a través de este código PHP devuelve la página OSM 404 Archivo no encontrado.

creo que esto es una cuestión de PHP-novato bastante estúpida, pero no puedo ver lo que me falta, ya que no sé mucho (aún) acerca de todos estos procesos de cliente-servidor, etc.

Gracias por su ¡ayuda!

Respuesta

12

Use curl. Ver http://www.lornajane.net/posts/2008/using-curl-and-php-to-talk-to-a-rest-service

$service_url = 'http://example.com/rest/user/'; 
    $curl = curl_init($service_url); 
    $curl_post_data = array(
     "user_id" => 42, 
     "emailaddress" => '[email protected]', 
     ); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data); 
    $curl_response = curl_exec($curl); 
    curl_close($curl); 

$ xml = new SimpleXMLElement ($ curl_response);

+0

Gracias, pero mi clase RestClient internamente usa curl. El código que publiqué está cerca de lo que tcdent sugiere en el sitio web de git para saber cómo usar su cliente. Básicamente, solo cambié el formato de JSON a XML, ya que la API de OSM siempre devuelve XML. Entonces tal vez podría ser un problema de formato? – matze09

4

Bien, aparentemente el problema era la especificación 'format' => "xml". Sin ella y con la ayuda de SimpleXMLElement (gracias Martin), ahora estoy recibiendo los datos XML cargado correctamente:

<?php 
    include("restclient.php"); 
    $api = new RestClient(); 
    $result = $api->get("http://api.openstreetmap.org/api/capabilities"); 
    $code = $result->info->http_code; 
    if($code == 200) { 
     $xml = new SimpleXMLElement($result->response); 
     echo "Loaded XML, root element: ".$xml->getName(); 
    } else { 
     echo "GET failed, error code: ".$code; 
    } 
?> 

Aunque esto no es un enfoque muy flexible, ya que sólo funciona para las respuestas XML, que es lo suficientemente por el momento y un buen punto para comenzar con la API de OSM.

Gracias por su ayuda!

Cuestiones relacionadas