diff --git a/stacks/rpi-tg-export/README.md b/stacks/rpi-tg-export/README.md index 71b19ce..2c98983 100644 --- a/stacks/rpi-tg-export/README.md +++ b/stacks/rpi-tg-export/README.md @@ -67,3 +67,9 @@ sudo systemctl enable --now tg-export.timer с `tg-export.service` — одна сессия): `/mnt/backup/tg/members/_<название>/members.{json,csv}` + `avatars/.jpg` (маленькие). Персональные данные участников — в поиск/индекс не идут. 2026-10-18: CY Fast Track Talks — 2774 из 2774, аватарок 1619. Разовая выгрузка, не по таймеру. +- **Личные каналы участников** — `app/tg_bios.py`: bio и «личный канал» каждого участника (GetFullUser, ~1 запрос/с — + 2765 профилей за ~55 мин без ограничений) → `bios.json`. 2026-10-18 CY Fast Track Talks: личный канал у 145 из 2765, + топ — `top-personal-channels.txt` в папке участников. ⚠️ Второй шаг скрипта (размер каждой ссылки через + `get_entity` = ResolveUsername) после ~190 запросов получил **FloodWait 77 545 с (~22 ч)** — остановлен; размеры + публичных каналов взяты со страниц `t.me/` (без сессии). Массово резолвить username через API нельзя — + брать `t.me`-страницы или `full.chats` из GetFullUser. diff --git a/stacks/rpi-tg-export/app/tg_bios.py b/stacks/rpi-tg-export/app/tg_bios.py new file mode 100644 index 0000000..ad426cd --- /dev/null +++ b/stacks/rpi-tg-export/app/tg_bios.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 +"""Ссылки на группы/каналы в профилях участников (владелец 2026-10-18): по members.json группы — bio и «личный канал» +каждого участника (GetFullUser, ~1 запрос/с), затем размер каждой найденной группы/канала → топ по участникам. + + sudo -u tgexport sh -c '. /etc/tg-export/env; /opt/tg-export/venv/bin/python /opt/tg-export/tg_bios.py <папка members>' + +Результат в той же папке: bios.json (id → bio, личный канал; докачка с места остановки), links.json (группа/канал → +кто ссылается, размер), top.txt. ⚠️ Не параллельно с tg-export.service (одна сессия). +""" +import asyncio +import json +import os +import re +import sys +from pathlib import Path + +from telethon import TelegramClient, errors +from telethon.tl.functions.channels import GetFullChannelRequest +from telethon.tl.functions.users import GetFullUserRequest + +LINK = re.compile(r"(?:https?://)?(?:t\.me|telegram\.me)/(?:s/)?([A-Za-z][\w]{3,31})(?![\w/])|(?