如何重复查询?

时间:2016-12-18 18:08:48

标签: javascript jquery google-api google-custom-search

我需要重复以下查询才能增加Google图片的效果。单击按钮后执行代码。

Google文档说:

  

Google自定义搜索和Google Site Search最多可返回10个结果   每个查询。如果要向用户显示10个以上的结果,   你可以发出多个请求(使用start = 0,start = 11 ...   参数)并在单个页面上显示结果。在这种情况下,   Google会将每个请求视为单独的查询,如果您是   使用Google Site Search时,每个查询都会计入您的限制。

Other SO question says

  

要获得更多结果,您应该拨打多个电话。在每个不同的   打电话,增加参数值' start'到了10点。

还有this one says

  

现在你不能一次向谷歌询问超过10个结果。那么你   必须再次询问从11开始要求10个结果。所以在下一个   查询,保持num = 10和start = 11。现在您可以获得所有结果   改变起始值。

如何重复以下操作并每次都增加start参数?

    function googleImages() {
        var myCx = "MY_CX";
        var myKey = "MY_KEY";
        $.getJSON("https://www.googleapis.com/customsearch/v1", {
            q: termS + " in 1930 in " + country,
            alt: "json",
            searchType: "image",
            cx: myCx,
            num: 10,
            start: 0,
            key: myKey,
            rights: "cc_publicdomain",
            filter: "1",
            safe: "high",
            imgType: "photo",
            fileType: "jpg"
        },
        function (data) {
            $.each(data.items, function(i,item) {    
                $(".my_images .row .grid").append('<div class="col-sm-4 grid-item"><div class="thumbnail"><img class="img-responsive" src="' + item.link + '"></div></div>');
            });
            var $grid = $('.grid').packery({
            // options
            itemSelector: '.grid-item',
            percentPosition: true
        });
        $grid.imagesLoaded().progress( function() {
            $grid.packery('layout');
        });
        });
    }

1 个答案:

答案 0 :(得分:1)

你应该在调用之间保存start值,例如你可以使用这样的模式:

   function createGoogleImagesLoader(initialValue) {
       var _start = initialValue || 0;
       var imagesCount = 10;

       return function() {
            $.getJSON("https://www.googleapis.com/customsearch/v1", {
                ...
                num: imagesCount,
                start: _start
             },..);
            _start += imagesCount;

       }
    }

var googleImages = createGoogleImagesLoader();
googleImages() // load from 0 to 10
googleImages() // load from 10 to 20 etc.