Автоматизация - Индексирование сайтов с помощью Google Indexing API на Python

Автоматизация - Индексирование сайтов с помощью Google Indexing API на Python

  1. Как использовать код из статьи
  2. Подготовка

  3. Отправка URL на индексирование

Как использовать код из статьи

Я размещу код на Гитхабе в формате Jupyter Notebook – думаю, что так нагляднее.

Установите питон и сборку библиотек Anaconda.

Скачайте папку с Гитхаба. В ней будет:

  • файл google_indexing_api.ipynb с кодом и комментариями,
  • таблица davita.xlsx, которая используется в качестве примера в первом скрипте,
  • специальный json-ключ, который используется для API.

Подготовка

Документация.

Регистрация приложения

1. Перейти https://console.cloud.google.com/

2. Выбрать Select Project:


3. Нажать New Project:


4. Написать название проекта и нажать Create:


5. Когда проект создастся, нажать на колокольчик и выбрать по названию (на этом скрине у меня проект называется «Project Name»):


6. Навести курсор на APIs & Services, выбрать Credentials (на этом скрине у меня проект называется «Project Name 2»):


7. В разделе Service Accounts нажать Manage service accounts:


8. Нажать Create service account:


9. Написать название, нажать Done:


10. Затем нажать на три точки и выбрать Manage keys:


11. Нажать на Add Key, затем выбрать Create new key:


12. Выбрать JSON и нажать Create:


13. Скачанный файл разместить в папке с кодом.


14. Набрать в поиске Indexing Api:


15. Нажать Enable:


Настройка Google Search Console

1. Перейти в настройки проекта:


2. Выбрать Пользователи и разрешения:


3. Нажать Добавить пользователя, появится форма, где нудно указать Service account, который был создан ранее:


4. Скопировать Service Account из Google Cloud:


5. Вставить в форму в Google Search Console, в разрешениях поставить статус Владелец:


Установка специальных библиотек

Для отправки страниц на индексирование понадобятся:

  • httplib2
  • oauth2client.service_account

Доки:

1. В терминале или командной строке напишите pip install google-api-python-client.

2. Если вы используете Anaconda, перейдите в Navigator, выберете вкладку Environment, через поиск найдите:

httplib2, поставьте галочки:


oauth2client, поставьте галочку


Или напишите pip install google-api-python-client в Jupyter:


Отправка URL на индексирование

Разместите json-ключ в папке с кодом:


Импорт библиотек

import json
import time
import requests
 
import httplib2
from oauth2client.service_account import ServiceAccountCredentials
 
import pandas as pd


Настройки

Ресурсы для отправки:

SCOPES = ["https://www.googleapis.com/auth/indexing"]
ENDPOINT = "https://indexing.googleapis.com/v3/urlNotifications:publish"


Параметры проекта:

key = 'davita-301710-699786f70a1b'


project_name = 'davita'


Загрузка URL для индексирования

Файл в формате xlsx с названием поля "urls":

table_with_urls_for_recrawl = pd.read_excel(f'{project_name}.xlsx')


Отправка на индексирование

Функция принимает датафрейм и ключ,
отправленные адреса добавляет в отдельный список,
пишет ответ и количество отправленных страниц,
возвращает сформированный список.

def send_pages_to_google_for_recrawl(data, key):
 
    json_key_file = f"{key}.json"
    credentials = ServiceAccountCredentials.from_json_keyfile_name(json_key_file, 
                                                                   scopes=SCOPES)
    http = credentials.authorize(httplib2.Http())
 
    sent_urls_for_recrawl = []
    for url in data['urls']:
 
        urls = {'url''{}'.format(url),
                'type''URL_UPDATED'}
 
        response, content = http.request(ENDPOINT, method="POST", 
                                        body=json.dumps(urls))
 
        time.sleep(1)
 
        if response['status'] != '200':
            break
 
        sent_urls_for_recrawl.append(url)
 
    sent_urls_list_len = len(sent_urls_for_recrawl)
 
    print(response['status'])
    print(content.decode())
 
    print('На переобход отправлено:', sent_urls_list_len)
 
    return sent_urls_for_recrawl


Удаление из списка и экспорт

Функция принимает датафрейм и список отправленных url,
Из загруженной таблицы удаляются url, которые были отправлены. Это нужно для того, чтобы в следующий раз, когда обновится квота, эти же страницы не оправлялись на переобход.

Экспорт

def export_data_to_excel(data):
    project_report = pd.ExcelWriter(f'{project_name}.xlsx', engine='xlsxwriter')
    data.to_excel(project_report, index=False)
    project_report.save()


Удаление и экспорт

def delete_sent_urls_and_export_new_table(data, sent_urls_for_recrawl):
    data = data[~data['urls'].isin(sent_urls_for_recrawl)]
    export_data_to_excel(data)


Главная функция

def main_send_pages_to_google_for_recrawl(data):
 
    sent_urls_for_recrawl = send_pages_to_google_for_recrawl(data, key)
 
    delete_sent_urls_and_export_new_table(data, sent_urls_for_recrawl)


Запуск

main_send_pages_to_google_for_recrawl(table_with_urls_for_recrawl)



Ответ 429 со статусом «Quota exceeded». Стандартная квота на проект – 200 URL.

Подробнее про квоты.

Другие ответы и статусы.

Рекомендуемые статьи

Об авторе

Василий Фокин

Василий Фокин

Работаю в агенстве Marronnier с 2015 года, занимаюсь продвижением сайтов в посковых системах.

Создание сайтов

Разработка

Дизайн

Верстка

Контент

Техническая поддержка

Сопровождение 1C-Bitrix

Расширение функционала

Оптимизация скорости

Правка верстки

Контекстная реклама

Разработка кампаний

Сопровождение

Аналитика

Автоматизация процессов