Настройка автоматического сбора статистики из Телеграм

Analytic Workspace - мощный инструмент для бизнес-аналитики, который позволяют компаниям собирать, анализировать и визуализировать данные для принятия обоснованных бизнес-решений. Одной из ключевых особенностей таких систем является возможность интеграции с различными сторонними сервисами через API. Например, Analytic Workspace позволяет собирать статистику из популярных платформ, таких как Telegram, YouTube и других, что позволяет компаниям получать всестороннее представление о своей деятельности и рыночной среде. В данном примере посмотрим, как настроить автоматический сбор количества подписчиков из сообщества в Телеграм.

Создание телеграм бота

В первую очередь необходимо зарегистрировать телеграм бота и получить токен.
Как получить токен в BotFather:

  1. Отправьте в чат с BotFather команду /newbot.
    image

  2. Введите название бота — в этой категории особых ограничений нет.

  3. Введите юзернейм бота — его техническое имя, которое будет отображаться в адресной строке. К нему уже больше требований: юзернейм должен быть уникальным, написан на латинице и обязательно заканчиваться на bot. Так «Телеграм» защищается от злоумышленников, которые могут выдавать ботов за реальных людей.

  4. Готово. BotFather пришлет токен бота — его можно использовать для настройки в сторонних сервисах.

Настройка модели

Теперь переходим к настройке в Analytic Workspace. Создаем новую модель и добавляем вычисляемую таблицу. Определяем в ней поля

  • date – тип «Дата»
  • members_count – тип «Число»
  • tg_group_name — тип «Строка»

Добавляем таблицу на схему модели и переходим в ETL редактор. Добавляем следующий код:

import requests
from pyspark.sql import Row
import json
from datetime import datetime

def after_all(df, spark, app, *args, **kwargs):
    # variables for telegram api
    # input yours
    bot_token = '64:AAEet'
    chat_ids = ["@awcommunity", "@awbi_ru"]

    def get_chat_name(chat_id):
        try:
            path = f'https://api.telegram.org/bot{bot_token}/getChat?chat_id={chat_id}'
            response = requests.get(path)
            if not response.ok:
                raise Exception(f'\nОшибка URL: {response.url} \/n {response.status_code}: {response.text}')
            return response.json()
        except Exception as e:
            print(e)

    def get_chat_member_count(chat_id):
        try:
            path = f'https://api.telegram.org/bot{bot_token}/getChatMemberCount?chat_id={chat_id}'
            response = requests.get(path)
            if not response.ok:
                raise Exception(f'\nОшибка URL: {response.url} \/n {response.status_code}: {response.text}')
            return response.json()
        except Exception as e:
            print(e)

    def get_community_stat(chat_id):
        res = get_chat_member_count(chat_id)
        member_count = None
        if res:
            member_count = res["result"]
        now = datetime.now()
        return [now, member_count]
    
    def get_telegram_chat_title(chat_id):
        res = get_chat_name(chat_id)
        telegram_chat_title = None
        if res:
            telegram_chat_title = res["result"]["title"]
        return telegram_chat_title

    result_rows = []
    for chat_id in chat_ids:
        [current_date, members_count] = get_community_stat(chat_id)
        telegram_chat_title = get_telegram_chat_title(chat_id)
        result_row = [current_date, members_count, telegram_chat_title]
        result_rows.append(result_row)

    print(result_rows)
    df = df.union(spark.createDataFrame(result_rows))
    return df

В переменной bot_token необходимо указать токен телеграм бота, а в chat_ids перечислить username каналов и групп по которым нужно собирать статистику. Сохраняем скрипт.

Загрузка данных

Для настройки периодической подгрузки данных необходимо выполнить следующие шаги:

  1. Первичная загрузка. На данном этапе на схему модели добавлена только вычисляемая таблица. Запускаем синхронизацию и дожидаемся успешного выполнения.
  2. Теперь необходимо добавить на схему:
  • новый блок UNION
  • фрагмент той же самой модели, в которой сейчас ведется настройка
Затем фрагменты вычисляемой таблицы и модели необходимо добавить в блок UNION.

Таким образом при каждой загрузке вычисляемая таблица будет забирать статистику сообществ на текущую дату, а в самой модели будет накопительная статистика за прошлые периоды. При запуске синхронизации это данные будут объединяться в одну таблицу. Также можно настроить запуск синхронизаций по расписанию(раздел “Планировщик” в настройках модели).

В данной статье рассмотрен пример настройки автоматического сбора статистики телеграм сообществ в Analytic Workspace. В дальнейшем эти данные можно визуализировать и отслеживать динамику роста групп.

1 лайк