Сделал недавно свою первую игру на unity под android, и поставил туда систему аналитики Flurry. Постоянно заходить на сайт и мониторить не совсем удобно, простенький скрипт – скучно, а вот уведомления в телеграм – самое оно.
Итак, сделал простенький бот в телеграм, который раз в час присылает мне статистику: активные устройства, сессии, новые устройства.
Что нужно для бота уведомлений
Token от бота в telegram и для статистики во Flurry. Как создать бота в телеграм легко найдете в сети (через @botfather), а вот для flurry нужно создать отдельного специального пользователя.
Как создать пользователя для API Flurry
Вот ссылка на документацию по статистике от flurry (сразу на нужный раздел): https://developer.yahoo.com/flurry/docs/api/code/publishing/ . Нам нужен Reporting API.

Дальше нам надо получить свой programmatic token. Как это сделать детально описано на странице https://developer.yahoo.com/flurry/docs/api/code/apptoken/ , со скриншотами. Если кратко:
- Заходим в админку flurry.
- Нажимаем Admin-User-Programmatic user, возможно нужно еще раз залогиниться.
- Пишем имя.
- Генерируем код. Сохраните его где-то. Он нам и нужен.

Делаем бот для телеграма
Все, токены от бота и flurry у нас есть, теперь пишем чат-бота на питоне.
Импортируем нужные модули. Requests, telebot и может еще что-то нужно поставить через pip.
import telebot import re, os, time, json import random import requests as rq from datetime import datetime, timedelta
Тест бота в телеграм
Проверим, нет ли у нас проблем с самой отправкой сообщений в бот. Запустим бот, и отправим какое-то сообщение в ответ.
def start_bot():
token = '65****gY' # Token для телеграм бота
global bot
bot = telebot.TeleBot(token)
print('bot started')
@bot.message_handler(content_types=["text", 'photo', 'location'])
def mess(message): # Названия функций почти не играют роли
bot.send_message(message.chat.id, text = "Проверка бота телеграм")
print(message.chat.id)
if __name__ == '__main__':
bot.polling(none_stop=True)
Основные комментарии есть в боте, напишу немного об этом:
print(message.chat.id)
Так как мы хотим слать статистику только себе, а не всем, то нужно узнать наш ID для “переписки” бота.
Идем дальше.
Код для получения статистики flurry sdk
Документация по апи понятная, главное передавать правильный header с токеном.
'Authorization': 'Bearer eyJhIU****6kBw'
Слово Bearer обязательно! (на 02.10.2019)
Выкладываю свой код, до идеала не доводил, свою задачу решает:
def flurry():
url = 'https://api-metrics.flurry.com/public/v1/data/' # Основной URL для запросом по API Flurry SDK
head = rq.utils.default_headers()
head.update(
{
'Authorization': 'Bearer e*Ваш_токен_FLURRY_SDK*Bw',
}
)
try:
while True:
d1 = datetime.today() + timedelta(days=1)
d = datetime.today() - timedelta(days=1)
today_date2 = d.strftime('%Y-%m-%d')
today_date = today_date2 + '/' + d1.strftime('%Y-%m-%d')
analytics = 'appUsage/day/app?metrics=sessions,activeDevices,newDevices&dateTime=' + today_date # Запрашиваем данные: сессии, активные устройства и новые устройства, за период со вчера до завтра.
r = rq.get(url+analytics, headers = head)
reports = json.loads(r.text)
analytics2 = 'appUsage/day/app/country/?metrics=sessions&dateTime=' + today_date # Отдельный запрос для получения стран, в которых запускали приложение
r2 = rq.get(url+analytics2, headers = head)
report_country = json.loads(r2.text)
countries = ''
for country in report_country['rows']:
countries += country['country|name'] + '; '
date2send = datetime.strptime(reports['rows'][-1]['dateTime'], '%Y-%m-%d %H:%M:%S.%f-07:00') # Сделал для удобства работы с датой, чтобы в тексте сообщения передавать в удобном виде.
msd = bot.send_message(261111846, text = u'\U0001F469\U0000200D\U0001F4BB ' +
date2send.strftime('%Y.%m.%d') +
'\n activeDevice = ' + str(reports['rows'][-1]['activeDevices']) +
';\n sessions = ' + str(reports['rows'][-1]['sessions']) +
';\n new Devices = ' + str(reports['rows'][-1]['newDevices']) +
';\n Countries: ' + countries
) # 261111846 - это Ваш message.chat.id; дальше текст: смайлик и данные.
time.sleep(60*60) # Отправка каждый час с момента запуска бота
except Exception as err: # Отлов ошибки, ждем 2 минуты
print(err)
print('Error at ' + time.strftime(r'%d.%m.%Y %H:%M:%S'))
time.sleep(120)
Какие данные еще можно запрашивать и некоторые примеры смотрите в документации. Ну или спросите в комментарии. Еще можно вызывать количество показов, кликов, заработанного, но если кликов нет, возвращает “ноль”, а это еще париться, отслеживать, менять код 🙂 . Меня пока устраивает такое решение, дальше возможно улучшу.
Как выглядит результат – в главном изображении статьи.
Есть вопросы или замечания? С радостью жду в комментарии или пишите сообщения. Профили в Контактах.

