【问题标题】:Google AJAX API - How do I get more than 4 Results?Google AJAX API - 我如何获得超过 4 个结果?
【发布时间】:2011-06-19 14:56:04
【问题描述】:

我正在使用下面的 google API ajax 来获取特定搜索词的图像。这是在 WinForms 应用中完成的。

下面的链接似乎有效,但它只返回 4 个结果(通过 JSON)

有人知道如何哄骗更多吗?

http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=Apple+Cake

显然必须有另一个参数来请求更多或翻阅结果,但我似乎无法弄清楚?有人知道吗?

【问题讨论】:

标签: image json google-api


【解决方案1】:

我认为唯一的方法是多次调用指定“开始”参数的网络服务。

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

【讨论】:

  • 太棒了,正是我想要的。谢谢
  • 这似乎在 2014 年被弃用(参见 developers.google.com/web-search/docs)。现在的解决方案是什么?
  • Link 说最后一天的操作是在 2014 年 9 月,但它似乎仍然有效。也许这曾经更强大,他们只是留下了一个基本版本。
  • 我们能得到超过8个的结果吗
  • 什么是替代 API,因为它已被弃用?
【解决方案2】:

【讨论】:

  • 很好,顺便说一句,你是怎么知道的?
【解决方案3】:

对于那些想知道如何做到这一点的人来说,有很多方法。一种是基于某个事件运行循环查询。比如说……

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,顺便说一句)将抓取您最喜欢的流行歌星的前四张图片。它从这里计算结果的数量,如果不够,它将再次运行 getBieb,但这次增加了 startNumber 参数。

【讨论】:

  • jquery 是禁忌。不要开始谈论 jquery,除非它已经在页面上讲过。
【解决方案4】:

Google Feed 提供了一种可选方法,您可以在其中指定编号。您想要获得的结果。如果你不指定这个方法默认没有。你得到的结果是 4,但是得到更多的没有。您可以按如下方式指定此可选方法;

feed.setNumEntries(int);

例如:feed.setNumEntries(16); // will return 16 results.

.setNumEntries(num) 设置由此加载的提要条目数 喂给 num。默认情况下,Feed 类加载四个条目。

.setNumEntries() 没有返回值。

https://developers.google.com/feed/v1/reference#setNumEntries

【讨论】:

    【解决方案5】:

    使用下面得到 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;
             }
    

    ?>

    【讨论】:

    • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
    • yas 把 for 的意思是让它嵌套循环......你会得到更多的结果
    【解决方案6】:

    如果你愿意,你可以得到更多

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

    【讨论】:

      【解决方案7】:

      访问...this link了解您需要的方法:setResultSetSize(num)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        • 2017-12-19
        • 1970-01-01
        • 2015-10-24
        相关资源
        最近更新 更多