Декодируйте строку json, возвращенную из Flickr API с помощью PHP, завихрения

Я пытаюсь декодировать строку json, возвращенную из flickr в рамках моего кода PHP. Я использую ЗАВИХРЕНИЕ, но это продолжает возвращать строку, даже когда я переношу 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));
14
задан Programmer Bruce 17 June 2011 в 16:34
поделиться

4 ответа

Это потому, что возвращаемые данные не являются корректным 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 );
17
ответ дан 1 December 2019 в 05:54
поделиться

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

&format=json&jsoncallback=1';

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

&format=json&nojsoncallback=1';

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

С уважением.

47
ответ дан 1 December 2019 в 05:54
поделиться

Сохранение переполнения стека день снова. Я просмотрел документацию flickr и не нашел НИКАКИХ УКАЗАНИЙ об этом параметре nojsoncallback.

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

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

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

0
ответ дан 1 December 2019 в 05:54
поделиться

Еще лучше, вместо использования 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);
2
ответ дан 1 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: