2011-11-03 15 views
10

PHP için oldukça yeni ve RESTful API'lerle çalışmayla ilgili her şey yeni. Tüm yapmak istediğim şu anda OpenStreetMap API için bir düz HTTP GET isteği yayımlamak.PHP üzerinden RESTful API'ye nasıl erişilir

simple PHP REST client by tcdent kullanıyorum ve temel olarak işlevselliğini anlıyorum. OSM mevcut changesets almak için My örnek kodudur:

<?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; 
?> 

ben tarayıcıda URL "http://api.openstreetmaps.org/api/0.6/changesets" girin, XML dosyası yayınlar . Ancak, bu PHP kodu ile OSM 404 Dosya Bulunamadı sayfasını döndürür.

Bu oldukça aptal PHP acemi sorudur ama (henüz) fazla bilmiyorum beri vb tüm bu istemci-sunucu tarafı süreçleri hakkında, ben eksik göremiyorum tahmin için

sayesinde sizin yardım et!

cevap

12

Kıvrılmış kağıt kullanın. 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) Bkz;

+0

Teşekkürler, ancak RestClient sınıfım dahili olarak curl kullanıyor. Gönderdiğim kod, tcdent'in müşterisini nasıl kullanacağına dair web sitesinde önerdiği şeye yakın. OSM API'sı her zaman XML döndürdüğü için temel olarak sadece JSON biçiminden XML formatını değiştirdim. Yani belki bir biçim sorunu olabilir ?! – matze09

4

Tamam, sorun görünüşe göre 'format' => "xml" belirtimiydi. Onsuz ve SimpleXMLElement (teşekkürler Martin) yardımıyla XML veri düzgün yüklenmiş, şimdi alıyorum: XML yanıtları için çalışır çünkü bu olsa

<?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; 
    } 
?> 

çok esnek bir yaklaşım değildir, yeter artık an için ve OSM API ile başlamak için iyi bir nokta.

Yardımlarınız için teşekkürler!

İlgili konular