2013-07-01 9 views
6

याहू डेवलपर्स वेबसाइट पर दिए गए निर्देशों का उपयोग करके, मैं अपने एपीआई कुंजी के साथ याहू से परिणाम पुनर्प्राप्त करने में सक्षम हूं। http://developer.yahoo.com/boss/search/boss_api_guide/codeexamples.html#PHP के साथ JSON परिणाम पार्सिंग - याहू खोज एपीआई

कोड:

if ($_POST['query']) 
{ 
$newline="<br />"; 
$query = urlencode("'{$_POST['query']}'"); 

require("OAuth.php"); 

$cc_key = "key goes here"; 
$cc_secret = "secret goes here"; 
$url = "http://yboss.yahooapis.com/ysearch/web"; 
$args = array(); 
$args["q"] = "$query"; 
$args["format"] = "json"; 

$consumer = new OAuthConsumer($cc_key, $cc_secret); 
$request = OAuthRequest::from_consumer_and_token($consumer, NULL,"GET", $url, $args); 
$request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, NULL); 
$url = sprintf("%s?%s", $url, OAuthUtil::build_http_query($args)); 
$ch = curl_init(); 
$headers = array($request->to_header()); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_URL, $url); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
$rsp = curl_exec($ch); 
$results = json_decode($rsp); 

print_r($results); 

} 

जैसा कि ऊपर दिखाया print_r ($ परिणाम) का उपयोग करना, मैं इस तरह के "हाथी के लिए खोज से पता चला पहले तीन परिणामों के निम्नलिखित (निकालने के रूप में परिणाम है, मिलता है "):

कृपया ध्यान दें कि मैंने" डब्ल्यूडब्ल्यूडब्लू "को यूआरएल बदल दिया है क्योंकि मुझे कम से कम 10 रिपोर्टों को पोस्ट करने के लिए कम से कम 10 प्रतिस्थापन की आवश्यकता है।

stdClass वस्तु ([bossresponse] => stdClass वस्तु ([प्रतिक्रिया कोड] => 200 [वेब] => stdClass वस्तु ([शुरू] => 0 [गिनती] => 50 [totalresults] => 36800000 [परिणाम] => ऐरे ([0] => stdClass ऑब्जेक्ट ([date] => [clickurl] => WWW [url] => WWW [dispurl] => en.wikipedia.org/wiki/Elephant [ शीर्षक] => हाथी - विकिपीडिया, मुक्त विश्वकोष [सार] => हाथी ट्रंक में सांस लेने, ओलफैक्शन सहित कई फ़ंक्शन हैं ... एक हाथी अपने सामने के पैरों पर घुटने टेककर चराई गई है ...) [1] => stdClass ऑब्जेक्ट ([date] => [clickurl] => डब्ल्यूडब्ल्यूडब्ल्यू [यूआरएल] => डब्ल्यूडब्ल्यूडब्ल्यू [dispurl] => www.defenders.org/elephant/basic-facts [title] => हाथी | मूल हाथियों के बारे में तथ्य | वन्यजीवन के संरक्षक [सार] => हाथी। हाथियों के बारे में मूल तथ्य हाथी पर अधिक: हाथियों को धमकी » हाथी पर अधिक: मूल तथ्य। धमकी। क्या डिफेंडर सहायता कर रहे हैं। आप क्या कर सकते हैं ...) [2] => stdClass ऑब्जेक्ट ([date] => [clickurl] => WWW [url] => WWW [dispurl] => kids.nationalgeographic.com/.../अफ्रीकी-हाथी [शीर्षक] => अफ्रीकी हाथी तथ्य और चित्र - नेशनल ज्योग्राफिक किड्स [अमूर्त] => हाथियों के बारे में बच्चों की सुविधा, तस्वीरों, वीडियो, ऑडियो, मजेदार तथ्य, एक ई-मेल पोस्टकार्ड और लिंक अन्य जानवरों के लिए।) [3] => stdClass वस्तु ([तिथि] => [ClickURL] => WWW [url] => WWW [dispurl] => elephant.elehost.com/About_Elephants/about_elephants.htm [शीर्षक] => हाथियों के बारे में [सार] => हाथी सूचना रिपोजिटरी पर हाथियों के बारे में सभी! इस पृष्ठ मेंका सारांश शामिल हैहाथी से संबंधित तथ्यों को हाथियों की दुनिया में शामिल करने के लिए।)

मैं उत्पादन के लिए परिणाम एक पढ़ने योग्य प्रारूप में, का प्रयास किया है, इस प्रकार है:

कोड का प्रयास 1:

foreach ($results->{ 'results' } as $item) 
{ 

echo "<a href=\"{$item->{ 'url' }}\"><font color ='blue'>{$item->{ 'title' }}</font></a>".": "."$newline"."$newline".$item->{ 'abstract' }."\n\n"; 


} 

मैं भी, निम्नलिखित की कोशिश की सफलता के बिना:

कोड प्रयास 2:

echo $results['results']['url']; 
echo $results['results']['title']; 
echo $results['results']['abstract']; 

क्या करना है इसके बारे में कोई विचार?

धन्यवाद।

+2

उपयोग "json_decode ($ जेसन, सच); " stdClass ऑब्जेक्ट – cptnk

+1

से छुटकारा पाने के लिए परिणाम मुझे $ $ results-> bossresponse-> वेब-> परिणाम ' –

उत्तर

1

मैंने देखा है कि आपने the documentation's code examples से कोड को कॉपी-पेस्ट किया है, लेकिन इसे कभी भी ध्यान न दें।

आप results सरणी गलत तरीके से एक्सेस कर रहे हैं:,

foreach ($results->bossresponse->web->results as $result) 
{ 
    //do stuff 
    echo $result->title.'<br/>'; 
} 

या के रूप में cptnk सुझाव:

$results = json_decode($rsp, true); 
//force to assoc-array, which will allow array-access 
foreach($results['bossresponse']['web']['results'] as $result) 
{ 
    //$result is array here, but do the same stuff 
    echo $result['title'].'<br/>'; 
} 

या, गठबंधन दो

foreach($results->bossresponse->web->results as $result) 
{ 
    $result = (array) $result;//casts stdClass to array 
    printf('<a href="%s">%s</a><br/>', $result['url'], $result['title']); 
} 
+0

हे एलियास, सहायता के लिए धन्यवाद के तहत मिलते हैं। मैं पिछले घंटे के लिए कुछ अलग तरीकों की कोशिश कर रहा हूं, (कभी भी आपके उत्तर के बाद से)। मुझे कोई भाग्य नहीं है। सहयोगी सरणी सुझाव के आधार पर मैंने कोशिश की: "{ 'url' }}\">{$result[2]->{ 'title' }}"। ":"। "$ Newline"। "$ Newline"। $ परिणाम [2] -> {'abstract'}। "\ N \ n"; यह केवल प्रत्येक परिणाम के लिए ":" आउटपुट करता है। यह वास्तव में मुझे परेशान कर रहा है, कोई और संकेत शानदार होगा! :) धन्यवाद। – Tom

+1

@ जेनी: यदि आप 'json_decode' के दूसरे तर्क के रूप में 'सत्य' को पार कर रहे हैं, तो परिणामी सरणी में _any_ ऑब्जेक्ट्स नहीं होंगे, इसलिए '$ परिणाम [2] -> {' url '} होना चाहिए:' $ परिणाम [2] [ 'url'] '। साथ ही, क्या आप परिणाम सरणी को सही तरीके से एक्सेस कर रहे हैं? इसे '$ परिणाम ['बॉसस्पॉन्स'] ['वेब'] ['परिणाम'] 'के माध्यम से एक्सेस किया जाना चाहिए, यदि यह एक assoc सरणी, या' $ प्रतिक्रिया-> bossresponse-> वेब-> परिणाम' अगर यह एक ऑब्जेक्ट –

+0

है आह, मैंने इसे अब हल किया है .... मैंने एक ऑब्जेक्ट के रूप में किया है, यानी '$ प्रतिक्रिया-> बॉसस्पॉन्स-> वेब-> परिणाम' ... मुझे कहने की ज़रूरत नहीं थी, उदाहरण के लिए: '$ परिणाम [ 2] -> यूआरएल 'बस' $ परिणाम-> यूआरएल '.. धन्यवाद फिर से! :) ... आप किस तरह से टिप्पणी में कोड हाइलाइट करते हैं? – Tom

संबंधित मुद्दे