Декодировать строку json, возвращенную из Flickr API, используя PHP, curl - PullRequest
14 голосов
/ 02 мая 2010

Я пытаюсь декодировать строку json, возвращенную из flickr в моем PHP-коде. Я использую CURL, но он продолжает возвращать строку, даже когда я оборачиваю json_decode () вокруг переменной json sring. Есть идеи?

$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));

Ответы [ 5 ]

47 голосов
/ 09 мая 2010

URL вашего запроса заканчивается на:

&format=json&jsoncallback=1';

Правильное имя параметра: nojsoncallback , поэтому правильный URL-адрес, который вы должны использовать, заканчивается следующим образом:

&format=json&nojsoncallback=1';

Измените это, и оно должно работать.

С уважением.

17 голосов
/ 02 мая 2010

Это потому, что возвращаемые данные не являются допустимыми в формате JSON. Хотя это действительно JavaScript. Возвращенные данные помещаются в функцию обратного вызова по умолчанию jsonFlickrApi.

Вам необходимо избавиться от обратного вызова JSON, который заключает JSON в функцию обратного вызова, которая затем должна выполняться на стороне клиента. Вам нужно выполнить некоторые манипуляции со строками в возвращенном JSON, чтобы удалить обратный вызов по умолчанию jsonFlickrApi и затем передать его в json_decode

$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 );
2 голосов
/ 16 июля 2010

Еще лучше вместо использования format = json в вашем URL, используйте format = php_serial и получите сериализованную строку, тогда вам не придется беспокоиться о правильном форматировании из flickr и вы получите массив в ответ

$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);
0 голосов
/ 11 октября 2014

Подробности nojsoncallback внизу этой страницы https://www.flickr.com/services/api/response.json.html

0 голосов
/ 02 июня 2010
Переполнение стека

спасает день снова. Я просмотрел документацию по flickr и не нашел никакого упоминания об этом параметре «nojsoncallback».

кто делает такую ​​функцию по умолчанию, а потом никому не говорит, как ее отключить?

еще хуже, почему пишется, что вы должны включить его, чтобы отключить функцию?!

смешно ... но спасибо за внимание, это решило мою проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...