Переобход сайта в Яндексе с автоматизацией и уведомлением в телеграм. Яндекс Вебмастер API

Содержание

Проблема

Иногда нужно отправить большое количество страниц сайта на переобход в Яндекс Вебмастере. Чтобы роботы этой поисковой системы обошли страницы в приоритетном порядке и они были быстрее проиндексированы. Но квота на переобход может быть меньше той, что нам нужна. Например, нам нужно отправить на переобход 300 страниц, а квота (в день) 200.

Решение

Скрипт на python, который:

  1. Берёт из файла urls.csv url-ы (адреса страниц), отправляет их по очереди на переобход в Яндекс Вебмастер с помощью API Яндекс Вебмастера. Столько раз (урлов), сколько дневной лимит (указывается в переменной limit).
  2. Удаляет отправленные url-ы из файла urls.csv
  3. Запускается каждый день с помощью планировщика задач Windows.
  4. Если все url-ы отправлены на переобход (файл urls.csv пуст), отправляется оповещение в телеграм-бота, что все url-ы отправлены.

Входные данные для скрипта

OAuth токен, переменная token.

Инструкция по получению здесь https://yandex.ru/dev/direct/doc/start/token.html.

Токен и chat id телеграм

Шаг 1: Создание бота

  1. Найдите BotFather в Telegram. Откройте Telegram и найдите пользователя @BotFather.
  2. Создайте нового бота. Отправьте команду /newbot в чат с BotFather.
  3. Следуйте инструкциям BotFather:
    • Вас попросят выбрать имя для бота.
    • Затем вас попросят выбрать уникальное имя пользователя для бота, которое должно заканчиваться на «bot» (например, myawesomebot).
  4. Получите токен API. После создания бота BotFather предоставит вам токен API, который выглядит примерно так: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11.

Шаг 2: Найдите chat_id

  1. Отправьте сообщение вашему боту. Найдите вашего бота в Telegram с помощью имени пользователя, которое вы выбрали, и отправьте ему любое сообщение.
  2. Получите chat_id. Введите следующий URL в браузере, заменив TOKEN на токен вашего бота:
				
					https://api.telegram.org/bot<TOKEN>/getUpdates

				
			

В ответе API найдите объект chat, который будет содержать id — это ваш chat_id.

Пример получения chat_id:

Если ваш токен API выглядит так: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11, то URL для получения обновлений будет:

				
					https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getUpdates

				
			

В ответе будет что-то вроде:

				
					{
  "ok": true,
  "result": [
    {
      "update_id": 123456789,
      "message": {
        "message_id": 1,
        "from": {
          "id": 987654321,
          "is_bot": false,
          "first_name": "YourName",
          "username": "yourusername",
          "language_code": "en"
        },
        "chat": {
          "id": 987654321,  # Это ваш chat_id
          "first_name": "YourName",
          "username": "yourusername",
          "type": "private"
        },
        "date": 1638380671,
        "text": "Hello"
      }
    }
  ]
}

				
			

Ваш chat_id — это значение id в объекте chat.

HOST_ID

Сайт из Яндекс Вебмастера в формате https:site.ru:443

LIMIT

Нужно указать дневной лимит указанный в Яндекс Вебмастере (см. скриншот выше)

Автоматизация

  • Откройте Планировщик заданий.
  • Нажмите «Создать простую задачу…» в правой панели.

  • Задайте имя и описание задачи.

  • Выберите «Ежедневно» для частоты выполнения.

  • Установите время и интервал в 1 день.
  • Создайте в папке проекта файл с расширением .bat. Пропишите в нем места расположения python и скрипта (см. комментарии в примере файла):
				
					::Изменение текущего рабочего каталога, для избежания ошибок с ненайденным файлом urls.csv
cd /d C:\Users\victorem\!python_scripts\add_feeds

::Запуск скрипта, 1 - где расположен установленный python, 2 - где расположен скрипт
C:\Users\victorem\AppData\Local\Programs\Python\Python310\python.exe C:\Users\victorem\!python_scripts\add_feeds\to_indexing_one_domain.py

:: Для отладки. Оставляет консоль открытой, если есть ошибки - смотрим в консоли.
::pause

				
			

 

  • В поле «Программа или сценарий» пропишите полный путь до файла .bat

Автоматизация переобхода в Яндекс Вебмастере с помощью API и python

  • Завершите создание задачи.

Скрипт

				
					import csv
import requests

# Замените на ваш OAuth токен
token = ""

headers = {"Authorization": f"OAuth {token}"}

# Telegram Bot конфигурация
telegram_bot_token = "ваш_токен_бота"
telegram_chat_id = "ваш_chat_id"

# Получить ID пользователя
user_url = "https://api.webmaster.yandex.net/v4/user"
user_response = requests.get(user_url, headers=headers)
user_id = user_response.json()["user_id"]

# Конфигурация
API_URL = f"https://api.webmaster.yandex.net/v4/user/{user_id}/hosts/{{host_id}}/recrawl/queue/"
HOST_ID = "ваш_host_id"  # Замените на ваш HOST_ID
LIMIT = 10  # Количество URL, обрабатываемых за один запуск скрипта

def read_urls(file_path):
    """
    Читает URL из файла CSV и возвращает их в виде списка.
    """
    with open(file_path, mode='r', newline='', encoding='utf-8') as file:
        reader = csv.reader(file)
        urls = [row[0] for row in reader]
    return urls

def write_urls(file_path, urls):
    """
    Записывает список URL в файл CSV, перезаписывая существующие данные.
    """
    with open(file_path, mode='w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        for url in urls:
            writer.writerow([url])

def send_url_to_recrawl(url):
    """
    Отправляет URL на переобход в Яндекс Вебмастер.
    Возвращает True, если запрос был успешным, иначе False.
    """
    headers = {
        "Authorization": f"OAuth {token}",
        "Content-Type": "application/json"
    }
    data = {
        "url": url
    }
    response = requests.post(API_URL.format(host_id=HOST_ID), json=data, headers=headers)
    return response.status_code == 200

def send_telegram_message(message):
    """
    Отправляет сообщение в Telegram с использованием Bot API.
    """
    send_text = f"https://api.telegram.org/bot{telegram_bot_token}/sendMessage?chat_id={telegram_chat_id}&text={message}"
    response = requests.get(send_text)
    return response.json()

def main():
    """
    Основная функция, выполняющая следующие действия:
    1. Чтение URL из файла urls.csv.
    2. Проверка на пустой список URL. Если пуст, отправка сообщения в Telegram.
    3. Отправка URL на переобход в Яндекс Вебмастер, ограничивая количество до значения LIMIT.
    4. Обновление файла urls.csv с оставшимися URL.
    """
    urls = read_urls('urls.csv')
    if not urls:
        # Если список URL пуст, отправляем сообщение в Telegram и завершаем выполнение.
        send_telegram_message(f"Все URL {HOST_ID} обработаны.")
        return

    for _ in range(min(LIMIT, len(urls))):
        url = urls.pop(0)  # Берем первый URL из списка и удаляем его
        send_url_to_recrawl(url)  # Отправляем URL на переобход

    # Перезаписываем файл urls.csv оставшимися URL
    write_urls('urls.csv', urls)

if __name__ == "__main__":
    main()  # Запуск основной функции

				
			
Прокрутить вверх