Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 7

Подключение к Google Search Console через API, забирает меньше данных

22.08.2022, 18:00. Показов 613. Ответов 0
Метки api (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, дорогие профессионалы. Никак не получается решить такую задачу. Забираю данные из Google Search Console по расписанию и кладу в Bigquery. Однако например количество кликов в итоге в Bigquery оказывается на 30-40% меньше, чем на панели Google Search Console за ту же дату. Очень надеюсь на вашу помощь! Код прикладываю.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/home/user/bigquery-search-console/venv/bin/python
 
import os
import json
import datetime
import requests
import pandas as pd
 
from google.oauth2 import service_account
from googleapiclient.discovery import build
from google.cloud import bigquery
 
#######today_date = '2022-07-15'
today_date_strf = '2022-07-15'
 
########### SET YOUR PARAMETERS HERE ####################################
PROPERTIES = [""]
BQ_DATASET_NAME = ''
BQ_TABLE_NAME = ''
SERVICE_ACCOUNT_FILE = ''
################ END OF PARAMETERS ######################################
 
THIS_FOLDER = os.path.dirname(os.path.abspath(__file__))
file_regal_fortress = os.path.join(THIS_FOLDER, SERVICE_ACCOUNT_FILE)
 
SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']
credentials = service_account.Credentials.from_service_account_file(
    file_regal_fortress, scopes=SCOPES)
 
service = build(
    'searchconsole',
    'v1',
    credentials=credentials
)
 
 
# Изменил на searchconsole в виду ошибки:
# googleapiclient.errors.UnknownApiNameOrVersion: name: webmasters  version: v3
# service = build(
#     'webmasters',
#     'v3',
#     credentials=credentials
# )
 
def get_sc_df(site_url, start_date, end_date, start_row):
    request = {
        'startDate': start_date,
        'endDate': end_date,
        'dimensions': ["date", "device", "country", "query","page"],
        # uneditable to enforce a nice clean dataframe at the end!
        'rowLimit': 20000,
        'startRow': start_row
    }
 
    response = service.searchanalytics().query(siteUrl=site_url, body=request).execute()
 
    if len(response) > 1:
 
        x = response['rows']
 
        df = pd.DataFrame.from_dict(x)
 
        # split the keys list into columns
        df[["date", "page", "device", "country", "query"]] = pd.DataFrame(df['keys'].values.tolist(), index=df.index)
        df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
 
        # Drop the key columns
        result = df.drop(['keys'], axis=1)
 
        # Add a website identifier
        result['website'] = site_url
 
        # establish a BigQuery client
        client = bigquery.Client.from_service_account_json(file_regal_fortress)
        dataset_id = BQ_DATASET_NAME
        table_name = BQ_TABLE_NAME
        # create a job config
        job_config = bigquery.LoadJobConfig()
        # Set the destination table
        table_ref = client.dataset(dataset_id).table(table_name)
        job_config.destination = table_ref
        job_config.write_disposition = 'WRITE_APPEND'
 
        load_job = client.load_table_from_dataframe(result, table_ref, job_config=job_config)
        load_job.result()
 
        return result
    else:
        print("There are no more results to return.")
 
 
# # Loop through all defined properties, for up to 100,000 rows of data in each
for p in PROPERTIES:
    for x in range(0, 2000000, 20000):
        y = get_sc_df(p, today_date_strf, today_date_strf, x)
        if len(y) < 20000:
            break
        else:
            continue
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.08.2022, 18:00
Ответы с готовыми решениями:

Организовать поиск на сайте через гугл с использованием API Google AJAX Search
Раньше не работал с ASP, но вот судьба злодейка заставила))) нужно организовать поиск на сайте через гугл с использованием API Google...

Google Search Console. Страницы находятся в исключениях
Проблема такова, Google Search Console жалуется что страница не индексируется так как имеется тег &quot;noindex&quot;. Под исключения...

Не могу подтвердить права на сайт в Google Search Console
Добрый день, товарищи. Возникла проблема с добавлением сайта в Search Console. Домен http://femidaforce.ru Все делаю как всегда. 1....

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.08.2022, 18:00
Помогаю со студенческими работами здесь

Появление огромного количества ошибок 404 в Google Search Console
Добрый день. Есть сайт https://haeckervrn.ru. В прошлом году (весна-лето) сайт был заражен вирусами, в индексе были десятки тысяч страниц с...

500 Internal Server Error в Яндекс.Вебмастер и Google Search Console
Здравствуйте, проблема следующая. При попытке проиндексировать сайт в Яндекс.Вебмастер(проверка ответа сервера) и Google Search Console...

Google Search Console: резкое падение количества показов после 30 сентября
Загрузил текстовые данные на сайт 30-го сентября утром или днём. Поставил Google Analytics. 2 октября открыл GA, вижу сколько показов...

Google search API не работает правильно
Кто нибудь парсил запросы с гугла API в XML? https://developers.google.com/custom-search/docs/xml_results?hl=en Делаю всё по...

Получить вторую страницу Google Api Search
Доброго времени суток. Таким кодом, я получаю первую страницу выдачи Google, по своему ключу. const string apiKey =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru