Bing 自定义搜索 api 仅返回来自一个位置的有限结果和来自不同位置的完整结果
Bing custom search apis returning only limited results from one location and full result from different location
我正在尝试使用 Bing 自定义搜索的 API 来搜索来自认知服务的文档。奇怪的是,当我从印度 运行 它时,它给了我一千多个结果,但是当我从美国服务器 运行 它时,它 returns 只有 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;
}
}
}
我使用的订阅密钥是试用密钥。
您可以尝试两件事: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 市场)return 此查询的数千个结果。
我明白了这种行为的原因。其实跟region/country/market没有关系。
查看回复后,我收到了这条消息。
"Rate limit is exceeded. Try again in 1 seconds"
这意味着在循环中每次调用后我必须等待 1 秒才能进行下一次调用。现在需要知道这个限制是用于试用订阅还是为所有呼叫保留以防止 DDOS 攻击或其他东西。
可能来自印度,它正在运行,因为可能一次迭代已经花费了一秒或更多秒。
我正在尝试使用 Bing 自定义搜索的 API 来搜索来自认知服务的文档。奇怪的是,当我从印度 运行 它时,它给了我一千多个结果,但是当我从美国服务器 运行 它时,它 returns 只有 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;
}
}
}
我使用的订阅密钥是试用密钥。
您可以尝试两件事: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 市场)return 此查询的数千个结果。
我明白了这种行为的原因。其实跟region/country/market没有关系。 查看回复后,我收到了这条消息。 "Rate limit is exceeded. Try again in 1 seconds" 这意味着在循环中每次调用后我必须等待 1 秒才能进行下一次调用。现在需要知道这个限制是用于试用订阅还是为所有呼叫保留以防止 DDOS 攻击或其他东西。 可能来自印度,它正在运行,因为可能一次迭代已经花费了一秒或更多秒。