Bing自定义搜索API仅返回来自一个位置的有限结果和来自不同位置的完整结果

时间:2017-11-13 05:23:02

标签: bing-api azure-cognitive-services

我正在尝试将Bing Custom Search的API用于Cognitive Services的文档。奇怪的是,当我从印度运行它时,它给了我超过一千个结果,但是当我从美国服务器运行它时,它只返回25(有时50个结果)。以下是示例代码:

var totalCount = 0;
var filetypes = new List<string> { "pdf", "docx", "doc" };
foreach (var filetype in filetypes)
{
    var searchTerm = "microsoft%20.net%20resume+filetype%3a" + filetype;
    Console.WriteLine("Searching for : " + filetype);

    for (var i = 0; i < 40; i++)
    {
        var nextCount = 0;
        var url = "https://api.cognitive.microsoft.com/bingcustomsearch/v7.0/search?" +
                  "q=" + searchTerm +
                  "&customconfig=" + customConfigId +
                  "&count=25" + "&offset=" + ((i * 25) + nextCount);

        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
            var httpResponseMessage = client.GetAsync(url).Result;
            var responseContent = httpResponseMessage.Content.ReadAsStringAsync().Result;
            BingCustomSearchResponse response =
                JsonConvert.DeserializeObject<BingCustomSearchResponse>(responseContent);

            if (response.webPages == null || response.webPages.value.Length <= 0)
            {
                Console.WriteLine("response.webPages is null ");
                break;
            }

            foreach (var webPage in response.webPages.value)
            {
                Console.WriteLine("name: " + webPage.name);
                Console.WriteLine("url: " + webPage.url);
                Console.WriteLine("displayUrl: " + webPage.displayUrl);
                Console.WriteLine("snippet: " + webPage.snippet);
                Console.WriteLine("dateLastCrawled: " + webPage.dateLastCrawled);
                Console.WriteLine();
            }
            totalCount = totalCount + response.webPages.value.Length;
        }
    }
}

我使用的订阅密钥是试用密钥。

2 个答案:

答案 0 :(得分:2)

我明白了这种行为的原因。实际上它与地区/国家/市场无关。 在查看响应后,我收到了这条消息。 “超出了速率限制。请在1秒后重试” 这意味着在循环中的每次调用之后,我必须等待1秒才能进行下一次呼叫。现在需要知道试用订阅的这个限制,或者保留所有呼叫以防止DDOS攻击等。 可能来自印度它正在工作,因为可能一次迭代已经花了一秒或更多秒。

答案 1 :(得分:0)

您可以尝试两件事:1)在searchTerm中,不需要使用%20和%3a,只需在Bing中键入时使用标点符号,例如 var searchTerm =“microsoft.net resume filetype ::”+ filetype ,以及2)通过在查询中附加mkt = en-in(对于India)或en-us(对于US)来强制执行市场。您可以通过在网址末尾添加 +“&amp; mkt = en-in”来实现此目的。

我认为您为自定义搜索选择了域名( en-in和en-us market),这些域会为此查询返回数千个结果。