2011-06-07 20 views
6

मैं तालिका और अमेज़ॅन उत्पाद विज्ञापन API का उपयोग कर अमेज़ॅन से उत्पाद जानकारी प्राप्त करने के लिए PHP में YQL का उपयोग करने का प्रयास कर रहा हूं।YQL का उपयोग कर क्वेरी के लिए 10 परिणाम कैसे प्राप्त करें?

क्वेरी है कि मैं प्रयोग किया है:

select * from amazon.prodlist where Title='harry potter' and SearchIndex='Books' and ResponseGroup='Images,ItemAttributes' 

यह रिटर्न केवल 10 का परिणाम है। मैं इसे एक ही पृष्ठ पर 10 परिणामों को प्रदर्शित करने के लिए कैसे प्राप्त कर सकता हूं? इसके अलावा, अंकन के बिना।

पूर्ण PHP कोड:

<?php 
$BASE_URL = "https://query.yahooapis.com/v1/public/yql"; 

$key="my_key"; 
$secret="my_secret"; 
$title="harry potter"; 
$sindex="Books"; 
$rgroup="Images,ItemAttributes"; 
$events=""; 


// Form YQL query and build URI to YQL Web service 
$yql_query = "use 'http://www.datatables.org/amazon/amazon.ecs.xml' as amazon.prodlist; 
set AWSAccessKeyId='$key' on amazon.prodlist; 
set secret='$secret' on amazon.prodlist; 
select * from amazon.prodlist where Title='$title' and SearchIndex='$sindex' and ResponseGroup='$rgroup' "; 

$yql_query_url = $BASE_URL . "?q=" . urlencode($yql_query) . "&format=json"; 

// Make call with cURL 
$session = curl_init($yql_query_url); 
curl_setopt($session, CURLOPT_RETURNTRANSFER,true); 
$json = curl_exec($session); 
// Convert JSON to PHP object 
$phpObj = json_decode($json); 

// Confirm that results were returned before parsing 
if(!is_null($phpObj->query->results)){ 
    // Parse results and extract data to display 
    foreach($phpObj->query->results->Item as $event){ 
    $events .= "<div><h2>" . $event->ItemAttributes->Title . " by " . $event->ItemAttributes->Author . "</h2></div>"; 
} 
} 
// No results were returned 
if(empty($events)){ 
    $events = "Sorry, no events matching result"; 
} 
// Display results and unset the global array $_GET 
echo $events; 
unset($_GET); 

?> 

यह प्रदर्शित करता है 10 परिणामों के एक पृष्ठ पर। जबकि, जब मैं अमेज़ॅन वेबसाइट पर 'किताबें' में 'हैरी पॉटर' की खोज करता हूं, तो मुझे 3k से अधिक परिणाम मिलते हैं। क्या सभी परिणामों को एक पृष्ठ पर ही प्राप्त करने का कोई तरीका है? कृपया सलाह दें।

+0

पढ़ें [प्रलेखन] (http://developer.yahoo.com/yql/guide/paging.html) शायद? – Wrikken

+0

मैंने पहले से ही इसे पढ़ा है और क्वेरी को बदलने की कोशिश की है: 'amazon.prodlist (20) से चुनें * जहां शीर्षक = '$ शीर्षक' और SearchIndex = '$ sindex' और ResponseGroup = '$ rgroup'', ' चयन करें * amazon.prodlist (0) से जहां शीर्षक = '$ शीर्षक' और SearchIndex = '$ sindex' और ResponseGroup = '$ rgroup'', 'amazon.prodlist (0) से चुनें * जहां शीर्षक =' $ शीर्षक ' और SearchIndex = '$ sindex' और ResponseGroup = '$ rgroup' सीमा 20' लेकिन मुझे अभी भी 10 परिणाम मिल रहे हैं। कोई अन्य सुझाव? –

+0

ठीक है, अमेज़ॅन या वाईक्यूएल के साथ इतना अधिक अनुभव नहीं है, इसलिए मैं इसे दूसरों के पास छोड़ दूंगा, अगली बार जब आप उस छोटे तथ्य का उल्लेख कर सकते हैं, लोगों को समय बचाता है :) – Wrikken

उत्तर

3

amazon.ecs खुली डेटा तालिका (आपके प्रश्न लिखने के समय) परिणामों की पेजिंग का समर्थन नहीं करती है, इसलिए आप केवल 10 आइटम पुनर्प्राप्त करने के साथ फंस गए हैं। यह खुली डेटा तालिका लेखक के हिस्से पर एक आम निरीक्षण है।

मैंने वाईक्यूएल टेबल रिपोजिटरी के अपने स्वयं के कांटा में डेटा टेबल स्रोत में संशोधन किया है, और उम्मीद है कि मुख्य स्रोतों में बदलावों को वापस प्राप्त करने के लिए पुल अनुरोध (here) जारी किया गया है। इसके बाद आप अधिक (या कम!) परिणाम प्राप्त करने के लिए table.name([offset,]count) वाक्यविन्यास (docs) का उपयोग करने में सक्षम होंगे।

आप ऊपर और सही दूर चलाने के लिए चाहते हैं, तो आप डेटा तालिका में URL बदल सिर्फ इस प्रश्न के लिए एक विशेष शाखा में मेरे परिवर्तन पर बात करने के लिए की जरूरत है:

https://github.com/salathe/yql-tables/blob/so-6269923/amazon/amazon.ecs.xml

use 'https://raw.github.com/salathe/yql-tables/so-6269923/amazon/amazon.ecs.xml' as amazon.prodlist; 
use AWSAccessKeyId='my_access_key' on amazon.prodlist; 
use secret='my_secret' on amazon.prodlist; 

select * 
from amazon.prodlist(50) 
where Title='harry potter' 
    and SearchIndex='Books' 
    and ResponseGroup='Images,ItemAttributes'; 
:

आपका पूरा क्वेरी निम्नलिखित (बहुत अपने मौजूदा क्वेरी के समान) कुछ ऐसा दिखाई देगा

जब (अगर ... pull request पर नजर रखें) परिवर्तन मुख्य YQL टेबल भंडार में वापस खींच लिया जाता है, तो आप http://www.datatables.org/amazon/amazon.ecs.xml URL का उपयोग करने के लिए वापस जा सकेंगे।

+1

बहुत बहुत धन्यवाद! मैंने yql कंसोल में क्वेरी की कोशिश की, यह आसानी से काम करता है! जब मैं उपरोक्त php कोड में एक ही क्वेरी का उपयोग करता हूं तो कुछ त्रुटियों का सामना करना पड़ता है लेकिन उम्मीद है कि मैं उन्हें समझ दूंगा। प्रशंसा! –

+0

गुड लक, पारस। :) – salathe

+1

अच्छी खबर, परिवर्तन मुख्य YQL तालिकाओं में खींच लिया गया था। आप 'http: // www.datatables.org/amazon/amazon.ecs.xml' का उपयोग करने के लिए वापस जा सकते हैं। – salathe