gpt4 book ai didi

google-api - 网站管理员 API - 配额限制

转载 作者:行者123 更新时间:2023-12-04 19:43:39 25 4
gpt4 key购买 nike

我们正在尝试通过调用 WebmastersService.SearchAnalytics.Query() 为使用网站管理员 API .NET 客户端库的站点下载页面数据。 .为此,我们使用 Batching并发送约。一批 600 个请求。但是,其中大多数都失败了,并显示错误“超出配额”。失败的数量每次都不同,但只有 600 个有效(并且它们在批次中的位置不同)中只有 10 个左右。我们让它工作的唯一方法是将批量大小减少到 3,并在每次调用之间等待 1 秒。

根据开发者控制台,我们的每日配额设置为 1,000,000(我们还有 99%),我们的每个用户限制设置为 10,000 个请求/秒/用户。

我们返回的错误是:

Quota Exceeded [403] Errors [ Message[Quota Exceeded] Location[ - ] Reason[quotaExceeded] Domain[usageLimits]]



是否有另一个强制执行的配额? “域[使用限制]”是什么意思 - 是我们查询页面数据的站点的域,还是我们的用户帐户?

如果我们单独运行每个请求,我们仍然会遇到问题,除非我们在每次调用之间等待 1 秒。由于站点数量和页面数量,我们需要为此下载数据并不是一个真正的选择。

我找到了 this post这指出,仅仅因为最大批量大小为 1000 并不意味着您正在调用的 Google 服务支持这些大小的批量。但我真的很想知道配额限制到底是什么(因为它们与开发者控制台的数字无关)以及如何避免错误。

更新 1

这是一些示例代码。专门写的只是为了证明问题所以不需要评论它的质量;o)
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using Google.Apis.Webmasters.v3;
using Google.Apis.Webmasters.v3.Data;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
new Program().Run().Wait();
}

private async Task Run()
{
List<string> pageUrls = new List<string>();
// Add your page urls to the list here

await GetPageData("<your app name>", "2015-06-15", "2015-07-05", "web", "DESKTOP", "<your domain name>", pageUrls);
}

public static async Task<WebmastersService> GetService(string appName)
{
//if (_service != null)
// return _service;
//TODO: - look at analytics code to see how to store JSON and refresh token and check runs on another PC
UserCredential credential;
using (var stream = new FileStream("c:\\temp\\WMT.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { Google.Apis.Webmasters.v3.WebmastersService.Scope.Webmasters },
"user", CancellationToken.None, new FileDataStore("WebmastersService"));
}

// Create the service.
WebmastersService service = new WebmastersService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = appName,
});

//_service = service;
return service;

}

private static async Task<bool> GetPageData(string appName, string fromDate, string toDate, string searchType, string device, string siteUrl, List<string> pageUrls)
{
// Get the service from the initial method
bool ret = false;

WebmastersService service = await GetService(appName);
Google.Apis.Requests.BatchRequest b = new Google.Apis.Requests.BatchRequest(service);

try
{
foreach (string pageUrl in pageUrls)
{
SearchAnalyticsQueryRequest qry = new SearchAnalyticsQueryRequest();
qry.StartDate = fromDate;
qry.EndDate = toDate;
qry.SearchType = searchType;
qry.RowLimit = 5000;
qry.Dimensions = new List<string>() { "query" };
qry.DimensionFilterGroups = new List<ApiDimensionFilterGroup>();
ApiDimensionFilterGroup filterGroup = new ApiDimensionFilterGroup();
ApiDimensionFilter filter = new ApiDimensionFilter();
filter.Dimension = "device";
filter.Expression = device;
filter.Operator__ = "equals";

ApiDimensionFilter filter2 = new ApiDimensionFilter();
filter2.Dimension = "page";
filter2.Expression = pageUrl;
filter2.Operator__ = "equals";

filterGroup.Filters = new List<ApiDimensionFilter>();
filterGroup.Filters.Add(filter);
filterGroup.Filters.Add(filter2);
qry.DimensionFilterGroups.Add(filterGroup);

var req = service.Searchanalytics.Query(qry, siteUrl);
b.Queue<SearchAnalyticsQueryResponse>(req, (response, error, i, message) =>
{
if (error == null)
{
// Process the results
ret = true;
}
else
{
Console.WriteLine(error.Message);
}

});
await b.ExecuteAsync();
}
}
catch (Exception ex)
{
Console.WriteLine("Exception occurred getting page stats : " + ex.Message);
ret = false;
}

return ret;
}
}
}

将其粘贴到新控制台应用程序的 program.cs 中,并通过 nuget 添加 Google.Apis.Webmasters.v3。它在 c:\temp 中查找 wmt.json 文件,但调整身份验证代码以适合您的设置。如果我向 pageUrls 添加了 5 个以上的页面网址列出然后我得到配额超出异常(exception)。

最佳答案

我发现规定的配额似乎并不是真正的配额。我不得不放慢我的请求以避免同样的问题(1/秒),即使我总是处于或低于规定的速率限制(20/秒)。此外,它声称它在文档中给出了一个 rateLimitExceeded 错误,因为速度太快了,但实际上它返回了一个 quotaExceeded 错误。这可能与谷歌如何平均请求率随时间的推移有关(因为我们提出的一些请求是同时发生的,即使长期平均值被设计为等于或低于 20/秒),但我不能确定.

关于google-api - 网站管理员 API - 配额限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32497821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com