График онлайна человека в Telegram
Есть у меня друг-наркоман. Принимает дозу соц. сетей внутриглазно каждую секунду, пока не спит или работает.
😷 Кого лечим
Симптомы поциэнта:
- "Это по работе"
- "Да не сижу я в соц. сетях так часто"
- "Нет времени" в ответ на "Давай чет делать"
- "Я стал сидеть реже, чем раньше" (заменив одну сеть на другую)
- "И вообще вы все врети, статистика не верна"
Конечно, вылечить такого пациента указанием ему на проблему невозможно, но моя жопа горела вместо его, когда я видел как уходит его жизнь и все же решил показать наглядно, как это выглядит.
🍴 Инструментарий
- 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
Если нужна помощь с реализацией подобной слежки – пишите мне