Posted in

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

Telegram бот для уведомлений от flurry sdk пример
Telegram бот для уведомлений от flurry sdk пример

Сделал недавно свою первую игру на 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
Документация по 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

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

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

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

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *