Я отправляю 35 запросов в API googlesheets один раз в час.
Но я получаю сообщение об ошибке "Превышена квота для группы квот" ReadGroup "и ограничено" Количество запросов на чтение на пользователя в течение 100 секунд "обслуживания" sheet.googleapis .com '"часто
Почему?
Мои квоты:
Чтение запросов в 100 секунд 500
Чтение запросов в 100 секунд на пользователя 100
Я не отправляю другие запросы. Никто другой не использует этот API. Я использую BatchGetValues, если мне нужно несколько диапазонов
И вообще, 35 меньше 100
UPD
console.developers.google.com снимок экрана
Sheet sheet = new Sheet();
sheet.Authorize(Config.googleClientSecret);
sheet.GetSheetService();
//gets 35 sheets
sheetsToImport = SheetImportInfo.FromDatabase();
foreach (SheetImportInfo i in sheetsToImport)
{
try
{
if (i.range.Split(',').Length > 1)
{
IList<Range> resultList = sheet.BatchGetRange(i.spreadsheetId, rangeList);
}
else
{
IList<IList<object>> result = sheet.GetRange(i.spreadsheetId, i.range);
}
}
catch (Exception err)
{
errors++;
}
}
листовой класс
public class Sheet
{
private SheetsService service;
private UserCredential credential;
public void Authorize(string clientSecret)
{
string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly };
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(clientSecret)))
{
string credPath = $"{System.AppDomain.CurrentDomain.BaseDirectory}\\credentials";
this.credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets, Scopes, "user", CancellationToken.None, new FileDataStore(credPath, true)).Result;
}
}
public void GetSheetService()
{
string ApplicationName = "BI Google Sheets Importer";
SheetsService service = new SheetsService(new BaseClientService.Initializer()
{
HttpClientInitializer = this.credential,
ApplicationName = ApplicationName,
});
this.service = service;
}
public IList<IList<object>> GetRange(string spreadsheetId, string range)
{
//SheetsService service = GetSheetService();
SpreadsheetsResource.ValuesResource.GetRequest request = this.service.Spreadsheets.Values.Get(spreadsheetId, range);
ValueRange response = request.Execute();
return response.Values;
}
public IList<Range> BatchGetRange(string spreadsheetId, List<string> ranges)
{
//SheetsService service = GetSheetService();
SpreadsheetsResource.ValuesResource.BatchGetRequest request = this.service.Spreadsheets.Values.BatchGet(spreadsheetId);
request.Ranges = ranges;
BatchGetValuesResponse response = request.Execute();
IList<Range> resultList = new List<Range>();
foreach (var valueRange in response.ValueRanges)
{
resultList.Add(new Range(valueRange.Range, valueRange.Values));
}
return resultList;
}
}
public class SheetImportInfo
{
public string spreadsheetId;
public string range;
public string sqlCmdPreImport;
public string sqlDestTableName;
public string sqlCmdPostImport;
public bool createTable;
public static List<SheetImportInfo> FromDatabase(string connectionString, string cmdText)
{
List<SheetImportInfo> result = new List<SheetImportInfo>();
DataTable dt = Utils.Sql.Utils.GetDataTable(connectionString, cmdText);
foreach(DataRow row in dt.Rows)
{
SheetImportInfo si = new SheetImportInfo();
si.spreadsheetId = row["spreadsheet_id"].ToString();
si.range = row["range"].ToString();
si.sqlCmdPreImport = row["cmd_pre_import"].ToString();
si.sqlDestTableName = row["dest_table_name"].ToString();
si.sqlCmdPostImport = row["cmd_post_import"].ToString();
si.createTable = (Convert.ToInt32(row["create_table"].ToString()) == 1);
result.Add(si);
}
return result;
}
}
UPD2. За последний час я отправил 37 запросов и получил 4 ошибки [429] (квота превышена для группы квот «ReadGroup» и ограничена «количество запросов на чтение на пользователя в течение 100 секунд» листа «.g.gapapis.com »)
запросов на чтение за 100 секунд
Ошибки по методу API