зацикливание дней поиска в API для получения полных данных о днях - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь взять пример псевдокода на https://developers.google.com/webmaster-tools/search-console-api-original/v3/how-tos/all-your-data (заголовок «Обзор»)

и применить его к моему сценарию, поскольку ограничение на 25 000 строк на вызов.Решение будет для каждого дня, начиная с первой итерации цикла, я получу максимальное количество строк (25 000), затем следующей итерацией будет начальная строка последней строки вставки (то есть 25 000).Например:

  • 0 начальная строка: 25 000 строк
  • 25 000 начальная строка: 25 000 вставленных строк,
  • 50 000 начальная строка: 25 000, вставленных строк
  • 75 000 начальная строка: 25 000, вставленные строки
  • ..... и т. Д.

До сих пор я изо всех сил пытаюсь достичь этого и не уверен, где это поставитьцикл while.

Я попытался поместить его ниже - но фильтры пропущены в цикле (он будет получать только мобильные данные и даже тогда выглядит так, как будто он пропускает некоторые другие фильтры):

        startRowindexIterator = 0
        while True:

            for filter_set in generate_filters(page=pages, device=args.devices, country=args.countries):
                    print day
                    request = {
                        'startDate' : day,
                        'endDate' : day,
                        'dimensions' : ["page","query"],
                        'startRow' : startRowindexIterator * args.max_rows_per_day,
                        'rowLimit' : args.max_rows_per_day,
                        'dimensionFilterGroups' : [
                            {
                                "groupType" : "and",
                                "filters" : filter_set
                            }
                        ]
                    }

                    response = execute_request(service, args.property_uri, request)
                    print 'startRowIterator: '+ str(startRowindexIterator)
                    print 'maxRows: '+ str(args.max_rows_per_day)

                    if response is None:
                        logging.error("Request failed %s", json.dumps(request, indent=2))
                        continue

                    if 'rows' in response:
                        startRowindexIterator = startRowindexIterator + 1

                        print 'rows: '+ str(len(response['rows']))

                        if pages:
                            filters = [pages[0], 'worldwide', 'all_devices', args.url_type]
                        else:
                            filters = ['gsc_property', 'worldwide', 'all_devices', args.url_type]

                        filter_mapping = {'page': 0, 'country': 1, 'device': 2}
                        for _filter in filter_set:
                            filters[filter_mapping[_filter['dimension']]] = _filter['expression']

Код основан на https://github.com/stephan765/Google-Search-Console-bulk-query/blob/master/search_console_query.py

Я изменил его, чтобы использовать вместо него учетную запись службы и несколько настроек для работы с моей версией и средой Python, ниже приведены остальные соответствующиекод (без цикла while добавлено) - это, очевидно, означает, что мы ограничены 25 000 строк для каждого устройства:

     for day in date_range(start_date, end_date):
        output_file = os.path.join(
            args.output_location,
            "{}_{}.csv".format(args.url_type, day.strftime("%Y%m%d"))
        )
        day = day.strftime("%Y-%m-%d")
        output_rows = []

        for filter_set in generate_filters(page=pages, device=args.devices, country=args.countries):
                request = {
                    'startDate' : day,
                    'endDate' : day,
                    'dimensions' : ["page","query"],
                    'rowLimit' : args.max_rows_per_day,
                    'dimensionFilterGroups' : [
                        {
                            "groupType" : "and",
                            "filters" : filter_set
                        }
                    ]
                }

                response = execute_request(service, args.property_uri, request)

                if 'rows' in response:

                    if pages:
                        filters = [pages[0], 'worldwide', 'all_devices', args.url_type]
                    else:
                        filters = ['gsc_property', 'worldwide', 'all_devices', args.url_type]

                    filter_mapping = {'page': 0, 'country': 1, 'device': 2}
                    for _filter in filter_set:
                        filters[filter_mapping[_filter['dimension']]] = _filter['expression']

                print len(response['rows'])


Я ожидаю возможность зацикливания, пока не будут получены все записи для каждого дня и устройства.Конечный результат, когда я запускаю команду типа:

./script.py https://example.com/ 2019-01-01 2019-01-01 --max-rows-per-day=25000

Я смогу получить все данные для всех устройств за данный день.

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