Я пытаюсь взять пример псевдокода на 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
Я смогу получить все данные для всех устройств за данный день.