Итак, я работаю над SEO для сайта, который получает около 5 миллионов показов в месяц.Однако запросы к API GSC дают мне очень небольшое подмножество общих показов, обычно порядка 1-2%.Моя строка запроса (код на python):
request = {
'startDate': date.strftime("%Y-%m-%d"), #Date
'endDate': date.strftime("%Y-%m-%d"),
'dimensions': ['page'],
'rowLimit': 5000,
'startRow': row_count, #Starts at 0. Then counts the number of
rows in the response. If the response has more than 0 rows, the API is invoked again, with row_count equal to the number of rows in the previous response.
'aggregationType' :"byPage"
}
Использование этого дает мне данные примерно на 1-2% от общего впечатления, полученного сайтом, согласно GSC.
Когда я добавляю «запрос» измерения к этому запросу, данные становятся значительно меньше, обычно порядка 0,5% или менее от общего числа показов!
Кроме того, хотя rowLimit установлен на 5k, каждый ответ со страницей и запросом измерения дает мне всего несколько сотен строк данных, что требует от меня зацикливания и отправки большого количества запросов для одной страницы.,Просто чтобы проиллюстрировать, что я имею в виду: за 2018-07-01 было сделано 175 звонков.Первый запрос привел к 446 строкам;восьмое из 400;и от второго до последнего всего за 5.
2018-07-01 00:00:00 Loop 1 row 0
2018-07-01 00:00:00 Loop 2 row 446
2018-07-01 00:00:00 Loop 3 row 850
2018-07-01 00:00:00 Loop 4 row 1234
2018-07-01 00:00:00 Loop 5 row 1612
2018-07-01 00:00:00 Loop 6 row 1986
2018-07-01 00:00:00 Loop 7 row 2361
2018-07-01 00:00:00 Loop 8 row 2736
...
2018-07-01 00:00:00 Loop 173 row 47725
2018-07-01 00:00:00 Loop 174 row 47730
2018-07-01 00:00:00 Loop 175 row 47735
Наконец, данные, которые я получаю с измерением и запросом, составляют не только около 0,5% от общего числа показов, но они также полны дубликатов!Из 47735 строк, которые я получаю за этот день, после удаления дубликатов остается только около 3 тысяч!
Я делаю что-то ужасно неправильно, или этот API полностью сломан?
Весь мой код (исключая часть, которую я использую для подключения к API):
import pandas as pd
import time
col_names = ['keys', 'clicks', 'impressions','ctr','position']
newDF = pd.DataFrame()
for date in date_generated:
#print(date)
i = 1
row_count = 0
row_remaining = True
newDF_temp = pd.DataFrame()
while row_remaining == True:
request = {
'startDate': date.strftime("%Y-%m-%d"),
'endDate': date.strftime("%Y-%m-%d"),
'dimensions': ['page','query'],
'rowLimit': 5000,
'startRow': row_count,
'aggregationType' :"byPage"
}
#time.sleep(5)
response = execute_request(webmasters_service, 'https://...', request)
if 'rows' not in response:
row_remaining = False
print("breaking",date)
break
if 'rows' in response:
print(date, "Loop ",i, " row ", row_count)
i = i+1
keys,clicks,imp,ctr,pos,dt = [],[],[],[],[],[]
for result in response['rows']:
keys.append(result['keys'])
clicks.append(result['clicks'])
imp.append(result['impressions'])
ctr.append(result['ctr'])
pos.append(result['position'])
dt.append(date.strftime("%Y-%m-%d"))
df = pd.DataFrame([keys,clicks,imp,ctr,pos,dt]).T
row_count = len(df) + row_count
newDF_temp=newDF_temp.append(df)
newDF_temp = newDF_temp.iloc[newDF_temp.astype(str).drop_duplicates().index]
newDF=newDF.append(newDF_temp)