Обновить

Как я перестал перечитывать десятки Telegram-каналов: локальный архив на Telethon, SQLite FTS5 и ИИ-дайджесты

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели9K
Всего голосов 8: ↑8 и ↓0+8
Комментарии14

Комментарии 14

Я в своего новостного бота добавлял ИИ, чтобы делать выдержки по темам, но что-то народу не зашло, убрал нафиг. Да и много токенов уходит, т.к. за сутки около 3 тысяч заголовков в среднем, а это капец сколько символов.
Похожие новости удаляю методом схожести строк Джаро-Винклера, никаких ИИ. Ставлю порог 85% и выбираю из нескольких похожих заголовков самое короткое сообщение.. для экономии трафика, ну и времени чтения.
И раньше пытался делать из телеграм каналов RSS с помощью сервисов, подмены ссылок и т.д., в итоге сделал загрузчик постов себе в БД с помощью Rome и Jsoup. Люди заходят и добавляют по 30 тг каналов и мониторят по ним свои новости.

Да, у вас масштаб уже совсем другой — 3 тысячи заголовков в сутки через ИИ действительно можно довольно быстро превратить в заметный расход токенов :)

У меня задача немного отличается. Я не пытаюсь прогонять через ИИ непрерывный новостной поток. Идея скорее в том, чтобы после какого-то пропущенного периода взять сообщения из выбранных мной каналов и получить вместо десятков похожих постов нормальную картину событий: что произошло, что добавилось в следующих сообщениях, где источники расходятся, что пока только инсайд и т.д.

Поэтому простое удаление похожих заголовков здесь решает только часть задачи. Например, два сообщения могут быть очень похожи текстом, но во втором появится важная цифра или реакция другой стороны — такое хотелось бы не выбрасывать. И наоборот, одно и то же событие разные каналы могут описать совершенно разными словами.

Но идея с Джаро–Винклером мне нравится именно как предварительный фильтр перед ИИ. Сначала дешёвыми методами убрать очевидные дубли и только потом отдавать оставшееся на смысловую обработку. Возможно, со временем так и сделаю — это как раз тот случай, когда можно заметно уменьшить расход токенов без большой потери качества.

А свой загрузчик Telegram вы, по сути, сделали ровно по той же причине, что и я начал этот проект: в какой-то момент проще один раз сделать инструмент под себя, чем постоянно обходить ограничения чужих сервисов :)

Ну да, я понял суть, что получить выдержку по интересующим темам.

Свой загрузчик это класс.. а то от букв RSS уже поташнивает.. и куда не плюнь - везде заплати в долларах :)

100% :)

Прикольно, тоже задумывался о таком, что бы не читать одно и тоже

А какие лимиты? Разве телега нынче не банит всякие кроулеры?

Тут немного не тот случай с кроулерами :) Telethon работает через MTProto API под обычным аккаунтом, то есть веб-страницы Telegram мы не парсим.

Фиксированного лимита вида «столько-то запросов в минуту» Telegram не публикует — ограничения динамические. Если переборщить с запросами, прилетает FLOOD_WAIT с временем, сколько нужно подождать. Telethon это умеет учитывать.

На моих нынешних 35–50 каналах это пока вообще не узкое место. А вот если проект реально пойдёт к 150+ каналам и большим периодам, тогда уже надо будет отдельно смотреть и на частоту запросов к Telegram, и на объём данных перед ИИ. То есть масштабирование там потребуется с двух сторон :)

Сейчас программа именно читает выбранные каналы и историю, а не пытается массово обходить весь Telegram.

У телеги какими-то волнами идут блокировки. Ещё в 2020м делали прогу на tdlib, только скачивание каналов и чатов, никакого спама и криминала. То работает месяц-два, то банят каждый день. API ID и API Hash и регали и от андроид-телеги подставляли.

Даже физическую симку могло забанить в первые же пару минут после первого логина. Про online-sim и подобное молчу.

Причём "добавить 50 каналов в день" это для них уже подозрительная активность была. При этом нигде ничего не расписано. Формально это не было нарушением никаких правил.

А если вводить в прогу креды от основной симки, то забанят вместе с основным аккаунтом и фиг восстановишь.

Вот это уже серьёзный аргумент, спасибо. Я выше действительно слишком упростил всё до FLOOD_WAIT.

Посмотрел документацию и ваш опыт — раз Telegram сам точные критерии не раскрывает, решил пока закрыть репозиторий и нормально погонять программу на себе под разной нагрузкой. Если всё будет спокойно — открою обратно уже с предупреждениями и, если понадобится, более консервативной работой с API. Спасибо, комментарий реально полезный.

Годная тема. Тоже периодически ловлю себя на мысли, что треть дня уходит просто на скролл одинаковых новостей в десятке каналов, и руки чешутся автоматизировать эту рутину. Локальная база под это дело отличная идея, хотя бы история не потеряется, если каналы потрут.

Согласен

Главное не сильно удивляться после:

If you didn’t violate the Terms of Service but your account does get banned after using the API, write to recover@telegram.org explaining what you intend to do with the API, asking to unban your account. Please note that emails are checked by a human, so automatically generated emails will be detected and banned.

Посты в публичных каналах можно парсить вообще без аккаунта, их можно выдернуть в превью канала на сайте t.me. Так, например, уже сделано в проекте нян https://github.com/NyanNyanovich/nyan

А удалять/объединять дубли постов можно через эмбеддинги и косинусное сходство.

Вообще сам задумывался о написании подобного проекта.

Да, спасибо, НЯН посмотрел. Там действительно интересно сделано: сборщик ходит прямо в веб-превью канала и листает историю через ?before=, так что публичные каналы можно собирать вообще без пользовательской сессии.

Для моего случая это, пожалуй, хороший кандидат на упрощённый режим без API ID/API Hash. Полностью Telethon заменять им не стал бы — веб-версия даёт более урезанные данные и зависит от HTML Telegram; например, в НЯН посты без текста вообще пропускаются. Но идею точно забрал, спасибо.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации