Перейти к основному содержимому

График онлайна человека в Telegram

· 4 мин. чтения

Есть у меня друг-наркоман. Принимает дозу соц. сетей внутриглазно каждую секунду, пока не спит или работает.

😷 Кого лечим

Симптомы поциэнта:

  • "Это по работе"
  • "Да не сижу я в соц. сетях так часто"
  • "Нет времени" в ответ на "Давай чет делать"
  • "Я стал сидеть реже, чем раньше" (заменив одну сеть на другую)
  • "И вообще вы все врети, статистика не верна"

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


🍴 Инструментарий

  • Python 3 + telegram-tracker на GitHub для сбора данных
  • Желательно Linux, хотя Windows тоже подойдет. на винде команды вводить в cmd.exe, а лучше в PowerShell
  • СмекалОчка или знание какого-то языка программирования, чтобы превратить полученные данные в .csv формат. Если вы хотите сделать график, конечно. График не нужен? Тогда ладно
  • Google Data Studio (инфо) для визуализации (бэзплатно!1)

🪣 Сбор данных

Установка "скрипта-шпиона"

# Копируем репозиторий для отслеживания и входим в скачанную папку
git clone https://github.com/gentoo-root/telegram-tracker.git && cd telegram-tracker

# Установка зависимости telethon
pip3 install --user telethon

Запуск

В папке settings создаем файл keys.py и вставляем в него

API_ID = 123456
API_HASH = '1234567890abcdef1234567890abcdef'

Замените значения на данные отсюда (нужно создать приложение. Настройки вроде не имеют значения)

В скачанной папке выполняем python3 -m track '+380991234567'

Вас попросит ввести еще свой номер, код подтверждения из Telegram и пароль двухфакторной аутенфикации (если включена). Я параноик, поэтому делал все с фейкового аккаунта.

к сведению

No module named track значит вы выполняете python3 -m track не в папке с модулем. Перейдите к ней через cd путь_к_папке

к сведению

Если появилась ошибка No module named 'telethon', значит вместо pip3 попробуйте написать pip (без 3) в разделе установки

к сведению

Ошибка The api\_id/api\_hash combination is invalid (caused by SendCodeRequest) говорит о том, что данные в settings.py указаны неправильно

к сведению

Ошибка ValueError: Cannot find any entity corresponding to "номер телефона" говорит, что по номеру телефона не получилось найти отслеживаемый контакт. Тогда вместо телефона вводите TELEGRAM ЛОГИН.

Теперь ждем денек-второй, пока данные наберутся. Выглядеть будут как-то так:

~2020-12-21 @ 06:50:07: User went online.
=2020-12-21 @ 06:50:21: User went offline.
=2020-12-21 @ 06:51:48: User went offline after being online for short time.

🪄 Превращение в csv

Короче, тут нужен кодераст, чтобы написать конвертер этих логов с человеческого языка в формат бездушной машины. Если эта статья кому-то нужна, пните меня по контактным данным и я напишу для вас код или скиньте свой, я добавлю сюда

Я гавнокодер и написал свой конвертер на модифицированном Lua прямо внутри одной игры, так что он будет тебе мало чем полезен, но держи:

чем воняет?

Выглядеть сформированный лог будет вот так:

📊 Визуализация

Заходим на сайт GDS, создаем новый отчет, выбираем источник данных "Загрузка файла", заливаем наш csv файл

Дальше добавляем диаграммы

Настраиваем

Таблица с тепловой картой

  • Категория " Параметр": кликаем на календарик возле даты, выбираем Тип -> Дата и время -> Час. Важно сделать это именно в "Параметр", а не "Параметр: диапазон дат"
  • Показатель : session_time. Название: входов в сеть, Агрегирование: количество. Еще "Добавить показатель" снова session_time. Название: Время в сети, Агрегирование: сумма, Тип: число -> Продолжительность

Столбчатая диаграмма

  • Параметр : снова делаем Час
  • Показатель : сумма session_time, Тип: продолжительность
  • Сортировка : по возрастанию date_start.

В "Стиль" этой диаграммы надо указать 24 столбца

Диаграмма динамических рядов

  • Параметр: снова Час
  • Показатель: сумма session_time, название "Накопительно часов", тип Продолжительность, расчет скользящего показателя: Суммирование

Сводка

Вроде ничего сложного после предыдущих пунктов. Просто в агреггировании для session_time выбираем "Медиана" и "Максимальное значение"

Получится вот такое чудо:

Сортировку по часам приходится делать в режиме просмотра отчета вручную, потому что для самой таблицы почему-то у меня не получается прописать сортировку по полю даты

🆙 Улучшения визуализации

В моем варианте анализируется один единственный день. В GDS можно добавить выборку по датам и сделать, чтобы анализировать можно было хоть целый месяц, хоть отдельные дни

Еще в таблицу можно добавить вычислительные поля, которые покажут именно периодичность входов в конкретный час и среднее время оффлайн. Если кому надо - пните меня, расскажу как

Изначально идеей было сделать еще один график временную линию, где можно увидеть наглядно отрезками времени, когда человек был в сети, но он бы не поместился в мой экран, а горизонтально скроллить в GDS вроде нельзя

UPD 2021-08-06

Нашел еще одну штуку на питоне, которая позволяет следить за чьим-то онлайном более юзер-френдли: GitHub - Forichok/TelegramOnlineSpy: Simple telegram online spy logger bot

UPD 2022-06-14

Если нужна помощь с реализацией подобной слежки – пишите мне