JSON API-вызов: пагинация l oop - невозможно увеличить значение смещения - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь выполнить вызов API, у которого есть ограничение на 50 записей на вызов, ответ JSON дает мне «объекты» и «total_objects».

У меня проблема с кодом что мне удалось собрать с помощью, вывод действительно увеличивается с 50-й записи до 95-й записи, после чего он возвращается к печати с 45-й записи и зацикливается с тем же набором.

проблема: застрял в al oop, где приращение составляет одну запись за раз и повторение 49 старых записей

 var client_id = 'xxxx';
    var client_secret = 'xxx';
    var email = 'xxx';
    var password = 'abc';
    var device = '1';
    var app_version = '1';
    var Token = 'abcde';

    // call the API to get data for your list
    function AP_Hyd() {
        // URL and params for the API
        var root = 'https://abcdef:443//v2/';
        var endpoint = 'ghij/3241/objects?search=rtewq&limit=50&offset=';
        var offset = '0'
        // parameters for url fetch
        var params = {
            'method': 'GET',
            'muteHttpExceptions': true,
            'headers': {
                'Authorization': 'Bearer ' + Token
            }
        };
        // call the API for first offset
        var json = getAssetData(root,endpoint, offset, params);
        var totalObjects = json.objects;
        //Adding data to ActiveGoogleSheet
        var sheet = SpreadsheetApp.getActiveSheet();
        sheet.clear()
        //Adding Column Headings
        var headerRow = ['erwf', 'gtre', 'poi', 'hgf', 'lkj', 'zyx'];
        sheet.appendRow(headerRow);
        //print first batch
        printRows(totalObjects,sheet);
        //check for any further data available
        if (totalObjects) {
            let totalPages = json.totals.objects;
            //get total number of pages to be retrieved
            var pageCount = parseInt(totalPages / 50)
           
             //check for decimal
            //if decimal is found increase the value of pageCount by 1
            if(totalPages%50 !=0){
              pageCount++;
            }
            Logger.log("pageCount:::" + pageCount +" for total objects:: " + totalPages);
           for (i = 1; i < pageCount; i++) {
                //invoke again and lets say the response is added in response
                // call the API with incremented offset
                var pageResponse = getAssetData(root,endpoint, i, params);
                var jsonObjects = pageResponse.objects;
                //print the rows 
                printRows(jsonObjects,sheet);
            }
        }
    }
    function getAssetData(root,endpoint,offset, params){
        var response = UrlFetchApp.fetch(root + endpoint + offset, params);
        var content = response.getContentText()
        //return the parsed content
        //TODO: add null check
        return JSON.parse(content)
    }
    function printRows(jsonData, sheet) {
        if (jsonData) {
            for (var i = 0; i < jsonData.length; i++) {
                var fieldObj = jsonData[i];
                
                ;
                Logger.log(fieldObj)
                // print out all the Columns
                
                sheet.appendRow(row);
            }
        }
    }
...