Сделал недавно свою первую игру на 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.
1 2 3 4 5 | import telebot import re, os, time, json import random import requests as rq from datetime import datetime, timedelta |
Тест бота в телеграм
Проверим, нет ли у нас проблем с самой отправкой сообщений в бот. Запустим бот, и отправим какое-то сообщение в ответ.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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) |
Основные комментарии есть в боте, напишу немного об этом:
1 | print(message.chat.id) |
Так как мы хотим слать статистику только себе, а не всем, то нужно узнать наш ID для «переписки» бота.
Идем дальше.
Код для получения статистики flurry sdk
Документация по апи понятная, главное передавать правильный header с токеном.
1 | 'Authorization': 'Bearer eyJhIU****6kBw' |
Слово Bearer обязательно! (на 02.10.2019)
Выкладываю свой код, до идеала не доводил, свою задачу решает:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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) |
Какие данные еще можно запрашивать и некоторые примеры смотрите в документации. Ну или спросите в комментарии. Еще можно вызывать количество показов, кликов, заработанного, но если кликов нет, возвращает «ноль», а это еще париться, отслеживать, менять код . Меня пока устраивает такое решение, дальше возможно улучшу.
Как выглядит результат — в главном изображении статьи.
Есть вопросы или замечания? С радостью жду в комментарии или пишите сообщения. Профили в Контактах.
0 Comments