Комментарии 14
Я в своего новостного бота добавлял ИИ, чтобы делать выдержки по темам, но что-то народу не зашло, убрал нафиг. Да и много токенов уходит, т.к. за сутки около 3 тысяч заголовков в среднем, а это капец сколько символов.
Похожие новости удаляю методом схожести строк Джаро-Винклера, никаких ИИ. Ставлю порог 85% и выбираю из нескольких похожих заголовков самое короткое сообщение.. для экономии трафика, ну и времени чтения.
И раньше пытался делать из телеграм каналов RSS с помощью сервисов, подмены ссылок и т.д., в итоге сделал загрузчик постов себе в БД с помощью Rome и Jsoup. Люди заходят и добавляют по 30 тг каналов и мониторят по ним свои новости.
Да, у вас масштаб уже совсем другой — 3 тысячи заголовков в сутки через ИИ действительно можно довольно быстро превратить в заметный расход токенов :)
У меня задача немного отличается. Я не пытаюсь прогонять через ИИ непрерывный новостной поток. Идея скорее в том, чтобы после какого-то пропущенного периода взять сообщения из выбранных мной каналов и получить вместо десятков похожих постов нормальную картину событий: что произошло, что добавилось в следующих сообщениях, где источники расходятся, что пока только инсайд и т.д.
Поэтому простое удаление похожих заголовков здесь решает только часть задачи. Например, два сообщения могут быть очень похожи текстом, но во втором появится важная цифра или реакция другой стороны — такое хотелось бы не выбрасывать. И наоборот, одно и то же событие разные каналы могут описать совершенно разными словами.
Но идея с Джаро–Винклером мне нравится именно как предварительный фильтр перед ИИ. Сначала дешёвыми методами убрать очевидные дубли и только потом отдавать оставшееся на смысловую обработку. Возможно, со временем так и сделаю — это как раз тот случай, когда можно заметно уменьшить расход токенов без большой потери качества.
А свой загрузчик Telegram вы, по сути, сделали ровно по той же причине, что и я начал этот проект: в какой-то момент проще один раз сделать инструмент под себя, чем постоянно обходить ограничения чужих сервисов :)
Прикольно, тоже задумывался о таком, что бы не читать одно и тоже
А какие лимиты? Разве телега нынче не банит всякие кроулеры?
Тут немного не тот случай с кроулерами :) 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; например, в НЯН посты без текста вообще пропускаются. Но идею точно забрал, спасибо.

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