«Чтение запросов на пользователя за 100 секунд» службы «sheet.googleapis.com» - PullRequest
0 голосов
/ 27 апреля 2020

Я отправляю 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...