2010-05-02 10 views
14

का उपयोग कर लौटा, मैं अपने PHP कोड में फ़्लिकर से लौटाई गई एक जेसन स्ट्रिंग को डीकोड करने का प्रयास कर रहा हूं। मैं कर्ल का उपयोग कर रहा हूं लेकिन जब मैं json sring चर के चारों ओर json_decode() लपेटता हूं तब भी यह एक स्ट्रिंग लौटता रहता है। कोई विचार?डीकोड जेसन स्ट्रिंग फ़्लिकर एपीआई से PHP, कर्ल

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

प्रतिक्रिया क्या दिखती है? – sberry

उत्तर

17

ऐसा इसलिए है क्योंकि लौटाया गया डेटा वैध JSON नहीं है। हालांकि, इसकी वैध जावास्क्रिप्ट। लौटाया गया डेटा jsonFlickrApi नामक डिफ़ॉल्ट कॉलबैक फ़ंक्शन के अंदर लपेटा गया है।

आपको JSON कॉलबैक से छुटकारा पाने की आवश्यकता है जो जेएसओएन को कॉलबैक फ़ंक्शन के अंदर लपेटता है जिसे क्लाइंट साइड पर निष्पादित किया जाना चाहिए। आप डिफ़ॉल्ट कॉलबैक jsonFlickrApi निकालें और फिर में लौटे JSON पर कुछ स्ट्रिंग परिवर्तन करने की जरूरत है इसे करने के लिए 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); 
+3

एक सरल विकल्प के लिए नीचे दिए गए उत्तर को देखें (दूसरों को ध्यान दें क्योंकि मैंने इसे लगभग खुद याद किया है)। –

47

आपका अनुरोध यूआरएल पारित साथ समाप्त होता है:

&format=json&jsoncallback=1'; 

पैरामीटर का सही नाम है nojsoncallback, इसलिए सही URL आप इस तरह समाप्त होता है का उपयोग करना चाहिए:

&format=json&nojsoncallback=1'; 

इसे बदलें और इसे काम करना चाहिए।

सम्मान।

+1

मेरे लिए जैकब और xmarcos स्पष्ट करने के लिए धन्यवाद! सही समझ में आता है ... – Globalz

+3

* @ xmarcos * - अच्छा है! इच्छा @ ग्लोबलज़ * ने इसे सही उत्तर के रूप में चुना था क्योंकि मुझे लगभग इसे याद आया था। – MikeSchinkel

+1

धन्यवाद, xmarcos, जिसने पूरी तरह से उस मुद्दे को ठीक किया था। –

0

स्टैक ओवरफ़्लो दिन को फिर से बचाता है। मैंने फ़्लिकर प्रलेखन को खराब कर दिया और इस "नोजसनकॉलबैक" पैरामीटर के बारे में कोई जानकारी नहीं मिली।

जो डिफ़ॉल्ट रूप से ऐसी सुविधा बनाता है, तो किसी को भी इसे अक्षम करने के बारे में नहीं बताता है?

और भी बदतर, यह क्यों लिखा जाएगा कि आपको फ़ंक्शन को अक्षम करने के लिए इसे सक्षम करना होगा ?!

हास्यास्पद ... लेकिन सिर के लिए धन्यवाद, यह मेरी समस्या तय है!

2

के बजाय और भी बेहतर अपने यूआरएल, उपयोग प्रारूप = php_serial में एक प्रारूप = json का उपयोग कर और एक serialize स्ट्रिंग तो मिल आप अभ्यस्त फ़्लिकर से मान्य formating के बारे में चिंता करने की ज़रूरत है और आप बदले में एक सरणी मिल

 
$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); 
संबंधित मुद्दे