1

我正在尝试将 Bing 自定义搜索的 API 用于认知服务中的文档。奇怪的是,当我从印度运行它时,它给了我一千多个结果,但是当我从美国服务器运行它时,它只返回 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;
        }
    }
}

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

4

2 回答 2

2

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

于 2017-11-13T11:56:39.800 回答
0

您可以尝试两件事:1) 在 searchTerm 中,无需使用 %20 和 %3a,只需在 Bing 中键入时使用标点符号,例如var searchTerm = "microsoft.net resume filetype::"+filetype和 2) 强制通过在查询中附加 mkt=en-in(对于印度)或 en-us(对于美国)来进行市场营销。您可以通过在 url 末尾附加+"&mkt=en-in"来做到这一点。

我假设对于自定义搜索,您选择了返回数千个此查询结果的域(用于 en-in 和 en-us 市场)

于 2017-11-13T07:04:20.557 回答