Categories: Python

Как сделать телеграм бот для получения уведомлений от Flurry SDK на python

Сделал недавно свою первую игру на unity под android, и поставил туда систему аналитики Flurry. Постоянно заходить на сайт и мониторить не совсем удобно, простенький скрипт — скучно, а вот уведомления в телеграм — самое оно.

Итак, сделал простенький бот в телеграм, который раз в час присылает мне статистику: активные устройства, сессии, новые устройства.

Что нужно для бота уведомлений

Token от бота в telegram и для статистики во Flurry. Как создать бота в телеграм легко найдете в сети (через @botfather), а вот для flurry нужно создать отдельного специального пользователя.

Как создать пользователя для API Flurry

Вот ссылка на документацию по статистике от flurry (сразу на нужный раздел): https://developer.yahoo.com/flurry/docs/api/code/publishing/ . Нам нужен Reporting API.

Документация по api flurry sdk

Дальше нам надо получить свой programmatic token. Как это сделать детально описано на странице https://developer.yahoo.com/flurry/docs/api/code/apptoken/ , со скриншотами. Если кратко:

  1. Заходим в админку flurry.
  2. Нажимаем Admin-User-Programmatic user, возможно нужно еще раз залогиниться.
  3. Пишем имя.
  4. Генерируем код. Сохраните его где-то. Он нам и нужен.
Добавить пользователя для апи flurry

Делаем бот для телеграма

Все, токены от бота и 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)

Какие данные еще можно запрашивать и некоторые примеры смотрите в документации. Ну или спросите в комментарии. Еще можно вызывать количество показов, кликов, заработанного, но если кликов нет, возвращает «ноль», а это еще париться, отслеживать, менять код . Меня пока устраивает такое решение, дальше возможно улучшу.

Как выглядит результат — в главном изображении статьи.

Есть вопросы или замечания? С радостью жду в комментарии или пишите сообщения. Профили в Контактах.

veniamin

Recent Posts

Как заработать токен NOT за стейкинг BNB или FDUSD

Очень много разговоров в последнее время за токен NOT. Много бирж будут делать листинг токена,…

6 месяцев ago

Как заработать TON и NOT за стейкинг в телеграм

Телеграм недавно запустил возможность стейкать (замораживать) USDT и получать за это их валюту TON. Очень…

6 месяцев ago

Бонус 100 USDT +10 BUSD от Binance

Биржа криптовалют Binance проводит сейчас промо-акцию: новым пользователям дают ваучеры в сумме 110 долларов. Деньги…

3 года ago

Как парсить длительность видео youtube на php в привычном виде

Самый главный момент в работе с youtube - это получить ключ api через консоль разработчика…

3 года ago

Как удалить чужую сессию пользователя в ubuntu (linux)

Арендую сервер для небольшого проекта на python. И вот приходит мне уведомление, что за сутки…

3 года ago

Как наложить watermark на видео в python windows массово

Тестирую одну схему, и нужно на много видео наложить watermark. Решил делать через Python 3,…

3 года ago