1

Cognitive Services のドキュメントに Bing Custom Search の API を使用しようとしています。奇妙なことに、インドから実行すると 1000 を超える結果が得られますが、米国のサーバーから実行すると 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 攻撃などを防ぐためにすべての呼び出しに対して保持されるかということです。1回の反復がすでに1秒以上かかっている可能性があるため、インドからのものである可能性があります。

于 2017-11-13T11:56:39.800 に答える