2013-07-01 25 views
6

Ben yahoo geliştiriciler web sitesinde bulunabilir yönergeleri kullanarak, benim API anahtarı ile yahoo sonuçlarını almak mümkün. http://developer.yahoo.com/boss/search/boss_api_guide/codeexamples.html#Ayrıştırma JSON PHP ile Sonuçları - Yahoo Search API

Kodu:

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); 

} 

yukarıda gösterildiği gibi print_r ($ sonuçlar) kullanarak, örneğin "fil aramaya gelen gösterilen ilk üç sonuçları aşağıdaki (özü olarak sonuçları almak Ben fAZLA 2 bağlantıları yazılan EN AZINDAN 10 iTİBAR GEREKTİREN GİBİ 'WWW: ")

Ben İÇİN URLLERİ DEĞİŞTİ LÜTFEN DİKKAT'.

stdClass nesnesi ([bossresponse] => stdClass nesne ([ResponseCode] => 200 [web] => stdClass nesne ([start] => 0: [sayısı] => 50: [totalresults] => 36800000 [sonuçlar] => Array ([0] => stdClass Nesne ([tarih] => [clickurl] => WWW [url] => WWW [dispurl] => en.wikipedia.org/wiki/Elephant [ başlık] => Fil - Vikipedi, ücretsiz ansiklopedi [soyut] => Fil gövdeleri, nefes alma, koku alma, dahil olmak üzere birden fazla fonksiyonuna sahiptir ... Bir filin ön ayakları üzerinde diz çökerek otlattığı gözlenen olmuştur ...) [1] => stdClass Nesne ([tarih] => [clickurl] => WWW [url] => WWW [dispurl] => www.defenders.org/elephant/basic-facts [title] => Fil | Temel Filler Hakkında Gerçekler | Yaban Hayatı savunucuları [soyut] => Fil. Filler Hakkında Temel Bilgiler Fil Hakkında Daha Fazlası: Fillere Tehditler » Fil hakkında daha fazlası: Temel Bilgiler. Tehditler. Savunucuların Yardımına Ne Yapıyor? Ne Yapabilirsiniz ...) [2] => stdClass Nesnesi ([tarih] => [clickurl] => WWW [url] => WWW [dispurl] => kids.nationalgeographic.com/.../zenci-fil [title] => Afrika fil Gerçekler ve Resimler - National Geographic Çocuk [soyut] => fotoğraf, video, ses, eğlenceli gerçekler, bir e-posta kartpostal ve bağlantılar ile filler hakkında Kids' özelliği diğer hayvanlara.) [3] => stdClass Nesnesi ([tarih] => [clickurl] => WWW [url] => WWW [dispurl] => elephant.elehost.com/About_Elephants/about_elephants.htm [title] => Filler Hakkında [abstract] => Fil Bilgi Deposu'ndaki filler hakkında herşey Bu sayfa'in bir özetini içerirfil ile ilgili gerçekleri, filler dünyasına sokmak için.aşağıdaki gibi)

Ben, okunaklı bir biçimde, çıkış sonuçları çalıştılar:

Kod Denemesi 1: Ben de başarılı olamadı aşağıdakileri denedim

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

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


} 

:

Kod Denemesi 2:

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

Ne yapılacağı hakkında bir fikrin var mı?

Teşekkürler.

+2

kullanımını birleştirmek "json_decode ($ json, doğru); " stdClass nesnesinden kurtulmak için Nesne – cptnk

+1

Sonuçların bana ulaştığını görmek beni $ sonuçları-> bossresponse-> web-> results' –

cevap

1

Yalnızca kodun the documentation's code examples kopyasını yapıştırdığınızı fark ettim, ancak bunu boşver.

Sen results Dizisi yanlış yöne erişiyorsunuz: cptnk önerildiği gibi,

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

Veya:

$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/>'; 
} 

Veya, iki

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

Hey Elias, yardım için teşekkürler. Geçen saat için birkaç farklı yöntem deniyorum, (cevabınızdan beri). Hiç şansım yok. İlişkili dizin önerisine dayanarak: "{ 'url' }}\">{$result[2]->{ 'title' }}". ":". "$ Newline". "$ Newline". $ Sonuç [2] -> {'abstract'}. "\ N \ n"; Bu, her sonuç için yalnızca ":" değerini verir. Bu gerçekten beni şaşırtıyor, daha fazla ipucu harika olurdu! :) Teşekkürler. – Tom

+1

@Jenny: "true" kelimesini json_decode 'a ikinci argüman olarak iletiyorsanız, thre sonuç dizisi _any_ nesneleri içermeyecek, bu yüzden $ sonuç [2] -> {' url '} 'olmalıdır:' $ sonuç [2] [ 'uRL'] '. Ayrıca, sonuç dizisine doğru şekilde mi erişiyorsunuz? '$ Results [' bossresponse '] [' web '] [' results '] 'aracılığıyla bir assoc dizisi veya' $ response-> bossresponse-> web-> results '(eğer bir nesne –

+0

ise ah, şimdi sıraladım .... Yaptığım gibi bir nesne, yani '$ response-> bossresponse-> web-> results' ... Örneğin söylemem gerekmiyordu: '$ sonuç [ 2] -> url 'sadece' $ sonuç-> url '.. Tekrar teşekkürler! :) ... bu arada bir yorumda kodu nasıl vurgulayacaksınız? – Tom