Публикация статистики из Яндекс.Метрики в Telegram

6 min read

Всем привет, в этой статье я расскажу, как создать удобный инструмент для автоматической отправки статистики из Яндекс.Метрики в 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. Советую прочитать статью Александра Менщикова на эту тему.