Всем привет, в этой статье я расскажу, как создать удобный инструмент для автоматической отправки статистики из Яндекс.Метрики в Telegram.
В рамках этой статьи мы будем:
- создавать счётчик Яндекс.Метрики
- настраивать и встраивать его на сайт
- работать с API Яндекс.Метрики
- работать с Telegram Bot Api
- программировать на Python получение статистики от Метрики и отправку в Telegram
Создаём счётчик в Метрике
Переходим на сайт Яндекс.Метрики и регистрируемся, если у вас еще нет аккаунта в Яндексе. После этого нужно создать счётчик, настроить его и встроить на сайт. Нажимаем кнопку «Добавить счётчик».
Заполняем все необходимые поля и нажимаем «Создать счётчик». Теперь нам нужно его настроить.
Переходим на страницу счётчика и нажимаем «Настройки», во вкладке «Код счётчика» отмечаем нужные нам функции. Подсказки по функциям находятся справа. Внизу страницы будет JavaScript-код счётчика, копируем его и встраиваем на все страницы нашего сайта, откуда мы хотим получать статистику. Для более глубокого понимания как работают счётчики, советую почитать официальную документацию.
Создаём приложение в Метрике
Заходим в личный кабинет Яндекс.Метрики, во вкладку API , там находится вся необходимая документация. Приложение нам нужно, чтобы получать данные от Яндекс.Метрики с помощью Python.
Для начала нам нужно получить OAuth-токен, с которым мы будем отправлять запросы к нашему приложению. Нажимаем на «Получить OAuth-токен» и регистрируем приложение. Заполняем все необходимые поля, в поле «Права» выбираем «Яндекс.Метрика».
Выставляем необходимые права приложению. Рядом с полем «Callback URL» нажимаем «Подставить URL для разработки» — это адрес, на который нас перенаправит Яндекс для получения токена, но об этом позже. После подтверждения откроется новая страница с данными нашего приложения. Желательно сохранить их в надёжном месте. Теперь нам нужно получить наш заветный токен, для этого необходимо сформировать в адресной строке браузера такой запрос:
https://oauth.yandex.ru/authorize?response_type=&client_id=
Вместо подставляем ID со страницы нашего приложения. В ответ Яндекс перенаправит нас на страницу, которую мы указали в Callback URL и там будет токен. Вот документация, в которой объяснено, как делать запросы к API Яндекс.Метрики с помощью своего приложения.
Создаём бота для Telegram
Теперь нужно создать бота в Telegram, который будет присылать сообщения нам в чат. Я не буду расписывать поэтапно как создать бота, эту тему отлично раскрыл Александр Менщиков в своей статье. А так же официальная документация от Telegram.
Работаем с API Яндекс.Метрики с помощью Python
Нам нужно написать программу на Python, которая будет обращаться за данными к API Яндекс.Метрики. Есть два способа это реализовать. Первый — это использовать open source библиотеки для работы с Telegram Bot API и API Яндекс.Метрика. Второй — это написать необходимую реализацию самому. Я выберу второй вариант, итак, приступим. Нам нужно выбрать библиотеку для работы с HTTP запросами. Я предлагаю использовать одну из самых популярных — requests. Так же можно использовать urllib2 или httplib2.
Качаем requests с помощью pip в терминале:
sudo pip install requests
Python-код:
import requests
url = "https://api-metrika.yandex.ru/stat/traffic/summary.json"
r = request.get(url, {"id":"12345678","oauth_token":"00504030535435345"})
res = r.json()
В данном участке кода я импортирую библиотеку requests, затем присваиваю переменной url строку со структурой запроса к API Яндекс.Метрике. С помощью функции get из модуля requests производим GET-запрос и передаем необходимые параметры. Метод r.json()преобразует JSON в словарь и возвращает его. Советую поделать запросы в браузере, чтобы изучить структуру ответов. Также необходимо передавать параметр "pretty=1", чтобы JSON ответ был читабелен.
Отправляем полученную статистику в Telegram с помощью бота
Для этой задачи нам потребуется уже созданный бот в Telegram, токен от него для работы с Telegram Bot API и всё та же библиотека requests. После того как мы создали бота и получили токен, нам нужно создать личный чат с ботом либо добавить его в уже существующий общий чат, в который хотим отправлять статистику. Создаем чат с ботом или добавляем в существующий, затем делаем запрос в адресной строке браузера:
https://api.telegram.org/bot/getupdates
В полученном JSON ответе нам нужно найти поле «chat». У этого поля будет вложенное поле «id» — это уникальный идентификатор чата, в котором мы начали переписку с ботом. Переходим к Python.
import requests
from urllib import urlencode
api_token = "ваш_токен"
chat_id = "122512369"
text = "статистика от API Яндекс.Метрики"
query = "https://api.telegram.org/bot%s/sendMessage?text=%s&chat_id=%s" % (api_token, text, chat_id)
requests.get(query)
Здесь импортируем requests и функцию urlencode из модуля urllib. Затем создаем необходимые переменные, api_token — токен от Telegram Bot, chat_id — уникальный идентификатор чата, в который будем отправлять статистику. В переменной query формируем строку запроса. Request.get(query) — производит сам GET запрос, в данном случае отправляет сообщение в Telegram.
На этом все. Для автоматического перезапуска скрипта можно использовать Supervisor. Советую прочитать статью Александра Менщикова на эту тему.