特定の検索用語の画像を取得するために、以下のGoogle API Ajaxを使用しています。これはWinFormsアプリで行われています。
以下のリンクは機能しているようですが、(JSON経由で)4つの結果のみを返します
誰もがそれからもっと同軸化する方法を知っていますか?
http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=Apple+Cake
明らかに、より多くをリクエストするため、または結果をページングするために別のパラメーターが必要ですが、それを理解することができないようですか?誰か知ってる?
これを行う唯一の方法は、 'start'パラメーターを指定してWebサービスを複数回呼び出すことだと思います。
http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=Apple+Cake&start=4
start
パラメータは、検索結果への0から始まるインデックスです。したがって、この例では、画像4..7を返します。
パラメータrsz=[1-8]
を追加することもできます。デフォルト値は4です。そのため、リクエストごとに4つの結果が得られます。ここにリンクがあります:
http://code.google.com/apis/imagesearch/v1/jsondevguide.html#basic_query
「&rsz = 8」を使用できます。以下を参照してください...
http://ajax.googleapis.com/ajax/services/search/video?q=SpongeBob%20Full&v=1.0&start=8&rsz=8
これを行う方法を疑問に思う方のために、かなりいくつかの方法があります。 1つは、特定のイベントに基づいてループクエリを実行することです。したがって、たとえば...
var biebresults = [], start = 0;
function getBieb(startNumber){
$.getJSON("https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=Justin%20Bieber&start="+startNumber+"&callback=?", function(results){
biebresults.Push(results.responseData.results);
if(biebresults.length < 538){
start = start + 4;
getBieb(start);
} else {
// Do something with your billion bieb images.
}
});
}
getBieb(start);
この特定のコード(jQuery、btwを使用)は、お気に入りのポップスターの最初の4つの画像を取得します。ここから結果の数をカウントし、それが十分でない場合は、今回はstartNumber引数を増やして、getBiebを再度実行します。
Google Feedにはオプションのメソッドがあり、ここでnoを指定できます。取得したい結果の。このメソッドを指定しない場合、デフォルトはnoです。あなたが得る結果の4は4ですが、それ以上を得るには。フィードの中で、このオプションのメソッドを次のように指定できます。
_feed.setNumEntries(int);
_
e-g:feed.setNumEntries(16); // will return 16 results.
.setNumEntries(num)は、このフィードによってロードされるフィードエントリの数をnumに設定します。デフォルトでは、Feedクラスは4つのエントリをロードします。
.setNumEntries()には戻り値がありません。
https://developers.google.com/feed/v1/reference#setNumEntries
以下を使用して8つの結果を取得します
$url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&start=0&q=".$query;
その後forループを配置すると、64個の結果を取得できます
<?php
$search =str_replace(' ', '+', @$_GET["q"]);
$query = $search;
for ($i=1; $i < 100; $i+8) {
$url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=8&start=".$i."&q=".$query;
$body = file_get_contents($url);
$json = json_decode($body);
for($x=0;$x<count($json->responseData->results);$x++){
echo "<b>Result ".($x+1)."</b>";
echo "<br>URL: ";
?>
<a href="<?php echo $json->responseData->results[$x]->url; ?>" target="_blank"> <?php echo $json->responseData->results[$x]->url; ?> </a>
<?php
echo "<br>VisibleURL: ";
?>
<a href="http://<?php echo $json->responseData->results[$x]->visibleUrl; ?>" target="_blank"> <?php echo $json->responseData->results[$x]->visibleUrl; ?> </a>
<?php
echo "<br>Title: ";
echo $json->responseData->results[$x]->title;
echo "<br>Content: ";
echo $json->responseData->results[$x]->content;
echo "<br><br>";
}
$i+=8;
}
?>
訪問... このリンク 必要なメソッドについて:setResultSetSize(num)
あなたが望むならあなたはより多くを得ることができます
public static void main(String[] args) throws UnsupportedEncodingException, IOException {
String google = "http://www.google.com/search?q=";
String search = "dinh la thang site:dantri.com.vn";
String charset = "UTF-8";
String userAgent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"; // Change this to your company's name and bot homepage!
System.out.println(URLEncoder.encode(search, charset));
int i=1;
while(i<100){
Elements links = Jsoup.connect(google + URLEncoder.encode(search, charset)+"&start="+i).userAgent(userAgent).get().select("li.g>h3>a");
for (Element link : links) {
String title = link.text();
//System.out.println(link.toString());
String url = link.absUrl("href"); // Google returns URLs in format "http://www.google.com/url?q=<url>&sa=U&ei=<someKey>".
//System.out.println(url);
url = URLDecoder.decode(url.substring(url.indexOf('=') + 1, url.indexOf('&')), "UTF-8");
if (!url.startsWith("http")) {
continue; // Ads/news/etc.
}
System.out.println(i+"Title: " + title);
System.out.println("URL: " + url);
} i=i+10;
}
}
}