Декодировать строку json, возвращаемую с Flickr API, используя PHP, curl
Im пытается декодировать строку 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));
Ответы
Ответ 1
Это потому, что возвращаемые данные недействительны 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
Ваш URL-адрес запроса заканчивается на:
&format=json&jsoncallback=1';
Правильное имя параметра nojsoncallback, поэтому правильный URL-адрес, который вы должны использовать, заканчивается следующим образом:
&format=json&nojsoncallback=1';
Измените это и он должен работать.
С уважением.
Ответ 3
Даже лучше, чем использовать формат = json в вашем URL-адресе, используйте формат = php_serial и получите строку serialize, тогда вам не придется беспокоиться о действительном формировании из 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);
Ответ 4
переполнение стека сохраняет день снова. Я просмотрел документацию flickr и нашел NO MENTION этого параметра nojsoncallback.
кто делает такую функцию по умолчанию, то не говорит кому-либо, как отключить ее?
еще хуже, почему было бы написано, что вы должны ENable его, чтобы отключить функцию?!
смешно... но спасибо за головы, это исправило мою проблему!
Ответ 5
Детали nojsoncallback находятся внизу этой страницы https://www.flickr.com/services/api/response.json.html