15

PHPコード内でflickrから返されたjson文字列をデコードしようとしています。私は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));
4

5 に答える 5

48

リクエストURLは次で終わります:

&format=json&jsoncallback=1';

パラメータの正しい名前はnojsoncallbackであるため、使用する必要のある正しいURLは次のように終了します。

&format=json&nojsoncallback=1';

それを変更すれば、うまくいくはずです。

よろしく。

于 2010-05-09T00:26:58.287 に答える
18

これは、返されたデータが有効な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 );
于 2010-05-02T04:27:52.027 に答える
2

URLでformat=jsonを使用する代わりに、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(); //curlセッションを開きます

//カールオプションを設定します
curl_setopt($ ch、CURLOPT_URL、$ query);
curl_setopt($ ch、CURLOPT_RETURNTRANSFER、1);    
$ data = curl_exec($ ch); //curlセッションを実行します
curl_close($ ch); //カールセッションを閉じます

$ output = unserialize($ data);
于 2010-07-16T15:59:03.900 に答える
0

スタックオーバーフローは再びその日を救います。私はflickrのドキュメントを調べたところ、この「nojsoncallback」パラメータについての言及はありませんでした。

誰がデフォルトでそのような機能を作成し、それを無効にする方法を誰にも教えませんか?

さらに悪いことに、関数を無効にするためにそれを有効にする必要があると書かれているのはなぜですか?!

ばかげている...しかし、頭を上げてくれてありがとう、これは私の問題を解決しました!

于 2010-06-02T15:47:11.700 に答える
0

nojsoncallbackの詳細は、このページの下部にありますhttps://www.flickr.com/services/api/response.json.html

于 2014-10-11T14:42:17.847 に答える