Analytic Workspace - мощный инструмент для бизнес-аналитики, который позволяют компаниям собирать, анализировать и визуализировать данные для принятия обоснованных бизнес-решений. Одной из ключевых особенностей таких систем является возможность интеграции с различными сторонними сервисами через API. Например, Analytic Workspace позволяет собирать статистику из популярных платформ, таких как Telegram, YouTube и других, что позволяет компаниям получать всестороннее представление о своей деятельности и рыночной среде. В данном примере посмотрим, как настроить автоматический сбор количества подписчиков из сообщества в Телеграм.
Создание телеграм бота
В первую очередь необходимо зарегистрировать телеграм бота и получить токен.
Как получить токен в BotFather:
-
Отправьте в чат с BotFather команду /newbot.
-
Введите название бота — в этой категории особых ограничений нет.
-
Введите юзернейм бота — его техническое имя, которое будет отображаться в адресной строке. К нему уже больше требований: юзернейм должен быть уникальным, написан на латинице и обязательно заканчиваться на bot. Так «Телеграм» защищается от злоумышленников, которые могут выдавать ботов за реальных людей.
-
Готово. 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 каналов и групп по которым нужно собирать статистику. Сохраняем скрипт.
Загрузка данных
Для настройки периодической подгрузки данных необходимо выполнить следующие шаги:
- Первичная загрузка. На данном этапе на схему модели добавлена только вычисляемая таблица. Запускаем синхронизацию и дожидаемся успешного выполнения.
- Теперь необходимо добавить на схему:
- новый блок UNION
- фрагмент той же самой модели, в которой сейчас ведется настройка
Таким образом при каждой загрузке вычисляемая таблица будет забирать статистику сообществ на текущую дату, а в самой модели будет накопительная статистика за прошлые периоды. При запуске синхронизации это данные будут объединяться в одну таблицу. Также можно настроить запуск синхронизаций по расписанию(раздел “Планировщик” в настройках модели).
В данной статье рассмотрен пример настройки автоматического сбора статистики телеграм сообществ в Analytic Workspace. В дальнейшем эти данные можно визуализировать и отслеживать динамику роста групп.