Decode json dize PHP, curl kullanarak Flickr API döndü

4 Cevap php

Bir json dize çözmek için çalışıyor Im benim PHP kodu içinde flickr döndü. Im CURL kullanarak ama json Sring değişken etrafında json_decode () sarmak bile bir dize dönen tutar. Herhangi bir fikir?

$api_key = '####';
$photoset_id = '###';

$query = 'http://api.flickr.com/services/rest/?&method=flickr.photosets.getPhotos&api_key='.$api_key.'&photoset_id='.$photoset_id.'&extras=url_o,url_t&format=json&jsoncallback=1';

$ch = curl_init(); // open curl session

// set curl options
curl_setopt($ch, CURLOPT_URL, $query);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
$data = curl_exec($ch); // execute curl session
curl_close($ch); // close curl session
var_dump(json_decode($data));

4 Cevap

That's because the returned data is not valid JSON. Its valid JavaScript, though. The returned data is wrapped inside a default callback function called jsonFlickrApi.

Daha sonra istemci tarafında yürütülecek olması gerekiyordu bir geri çağırma işlevi içinde JSON sarar JSON geri arama kurtulmak gerekir. Varsayılan geri arama jsonFlickrApi kaldırmak ve daha sonra json_decode onu geçmek için geri döndü json bazı dize manipülasyon yapmak gerekir

$api_key = '####';
$photoset_id = '###';

$query = 'http://api.flickr.com/services/rest/?&method=flickr.photosets.getPhotos&api_key='.$api_key.'&photoset_id='.$photoset_id.'&extras=url_o,url_t&format=json';

$ch = curl_init(); // open curl session

// set curl options
curl_setopt($ch, CURLOPT_URL, $query);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
$data = curl_exec($ch); // execute curl session
curl_close($ch); // close curl session

$data = str_replace( 'jsonFlickrApi(', '', $data );
$data = substr( $data, 0, strlen( $data ) - 1 ); //strip out last paren

$object = json_decode( $data ); // stdClass object

var_dump( $object );

Sizin talebiniz URL ile biter:

&format=json&jsoncallback=1';

Parametrenin doğru adı nojsoncallback, bu nedenle doğru URL böyle biter kullanarak olmalıdır:

&format=json&nojsoncallback=1';

Bunu değiştirmek ve çalışması gerekir.

Saygılar.

Hatta daha iyi yerine url, kullanım biçimi = php_serial bir format = json kullanarak ve serialize dize olsun daha sonra alışkanlık flickr geçerli biçimlendirme konusunda endişelenmenize gerek ve karşılığında bir dizi olsun

$api_key = '####';
$photoset_id = '###';

$query = 'http://api.flickr.com/services/rest/?&method=flickr.photosets.getPhotos&api_key='.$api_key.'&photoset_id='.$photoset_id.'&extras=url_o,url_t&format=php_serial';

$ch = curl_init(); // open curl session

// set curl options
curl_setopt($ch, CURLOPT_URL, $query);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
$data = curl_exec($ch); // execute curl session
curl_close($ch); // close curl session

$output = unserialize ($data);

yığın taşması tekrar gün kaydeder. Ben flickr belgelerine dolaştılar ve bu "nojsoncallback" paramatresi hiç bahsedilmemesi bulundu.

kim varsayılan böyle bir özelliği yapar, sonra devre dışı bırakmak için nasıl kimseye söylemez?

daha da kötüsü, neden bu fonksiyonu devre dışı bırakmak için bunu ENable zorunda yazılı olurdu?!

saçma ... ama kafaları için teşekkürler kadar, bu benim sorunum sabit!