Сообщество - Программирование на python

Программирование на python

929 постов 11 940 подписчиков

Популярные теги в сообществе:

Моя статья внезапно стала вирусной и это чуть не убило мой Telegram-канал. Рассказываю, как я спасался от тысяч ботов-подписчиков

Казалось бы - все бьются над увеличением количества подписчиков в своих Telegram-каналах - зачем уменьшать их число?

Я сам заинтересовался этой темой после странного всплеска трафика. Опубликовал статью про голосовых ассистентов - и из-за неудачного заголовка она внезапно стала вирусной. Обычно мои тексты собирают около 7 тысяч просмотров (медиана), но в этот раз счётчик вырос до 148 тысяч. А до этого я уже слышал истории, как на каналы без рекламы и инфоповодов «наливаются» сотни или тысячи подписчиков. Звучит как подарок судьбы, но на практике это тревожный сигнал: чаще всего - это фейковые аккаунты.

Мёртвая аудитория - это падение вовлеченности (ER - уровень вовлеченности, ERR - вовлеченность на охват), потеря интереса со стороны рекламодателей и снижение позиций канала в поиске Telegram. Особенно сейчас, когда алгоритмы всё больше ориентируются на наличие Premium-подписчиков.

ERR канала

ERR канала

В этой статье покажу, как выявить и удалить нежелательных подписчиков с помощью open-source скрипта на Python - который работает даже несмотря на ограничения Telegram API, позволяющий получить лишь последние 200 участников.

Почему Telegram не даёт полного списка подписчиков канала?

Telegram ограничивает доступ к списку подписчиков каналов через официальное API. Максимум, что можно получить - это 200 последних подписчиков методом ChannelParticipantsRecent. Причём Telegram не предоставляет параметров для сортировки или фильтрации по дате вступления, что делает задачу модерации практически невозможной.

Работа скрипта о котором ниже

Работа скрипта о котором ниже

Это ограничение - защита от накруток и массового сбора данных, но в то же время оно мешает администраторам выявлять ботов и проводить чистку. В группах всё иначе: там API позволяет получить полный список участников, что открывает больше возможностей для анализа.

Для частичной аналитики можно использовать сторонние сервисы вроде TGStat и Telemetr (возможно ещё какие-то) - они показывают прирост подписчиков и вовлечённость.

Альтернативные варианты собрать всех подписчиков

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

Поэтому я решил разрабатывать скрипт, который работает с доступными 200 последними подписчиками.

Скрипт очистки: удаляем новых подписчиков после даты

Эта инструкция для продвинутого пользователя Windows.

Что нужно заранее:

  1. Компьютер с Windows.

  2. Установленный Python (скачать с python.org, при установке обязательно включите галочку "Add Python to PATH").

  3. Telegram-аккаунт, зарегистрированный по номеру телефона.

  4. Юзернейм канала (например, @mychannel).

  5. Готовность скопировать 2 строки с сайта Telegram (API ID и API HASH).

Установка

  1. Скачайте скрипт с https://github.com/empenoso/telegram-channel-pruner
    Откройте меню Пуск → введите cmd → нажмите Enter. В открывшемся окне введите:

    Generated bash

    git clone https://github.com/empenoso/telegram-channel-pruner.git
    cd telegram-channel-pruner

    Если у вас не установлен Git - скачайте отсюда и установите, а потом повторите.

  2. Создайте виртуальное окружение (рекомендуется)

    python -m venv
    venv .\venv\Scripts\activate

  3. Установите зависимости (библиотеки)

    pip install -r requirements.txt

Настройка Telegram API

  1. Перейдите на сайт https://my.telegram.org → войдите через Telegram → зайдите в раздел API development tools → создайте приложение → скопируйте api_id и api_hash.

  2. Создайте файл .env в папке со скриптом. Вставьте туда:

    # .env api_id=хххххххх
    # Замените на ваш API ID api_hash='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    # Замените на ваш API Hash phone_number=+xxxxxxxxxxx
    # Ваш номер телефона для входа (если сессия новая)

    Пример:
    api_id=1234567
    api_hash=abcd1234abcd5678efgh9012ijkl3456
    hone_number=+79991234567

  3. Откройте файл channel_cleaner.py (через Блокнот или VS Code) и замените строку:

    CHANNEL_USERNAME = 'homeinv'

    на ваш юзернейм канала, например:

    CHANNEL_USERNAME = 'mychannel'

Как использовать

Все команды нужно запускать в окне cmd из папки telegram-channel-pruner, с активированным окружением (venv).

Проверка работы скрипта

python channel_cleaner.py info

Сохранить последних подписчиков в CSV

python channel_cleaner.py save

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

Удалить подписчиков после определённой даты

Удалить подписчиков после определённой даты

python channel_cleaner.py kickbydate --after-date "2025-08-01 10:40:00"

Замените дату на свою — в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС, по московскому времени.

Скрипт покажет, кого собирается удалить, и спросит подтверждение.

Важно:

  • Вы должны быть админом канала с правами на удаление подписчиков.

  • Скрипт работает только с 200 последними подписчиками, но удаляет их порциями, пока не встретит «старых».

  • Все удалённые пользователи записываются в файл kicked_users.csv.

  • Необратимость: используйте на свой страх и риск. Удаление подписчиков - необратимый процесс.

Заключение

Борьба за чистоту аудитории в Telegram - задача не из лёгких, особенно когда сам мессенджер ограничивает доступ к данным. Однако можно отслеживать всплески подписок, анализировать подозрительную активность и удалять фейков вручную.

Скрипт, о котором я рассказал не универсальное решение, но это рабочий инструмент.

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

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

05 августа 2025 года

Показать полностью 6
8

Бесплатный курс по упрощению работы с vscode

Ссылка на полный конфиг: https://github.com/sobolevn/dotfiles?tab=readme-ov-file#vsco...

Ссылка на пошаговые изменения: https://github.com/sobolevn/the-best-python-course/tree/main...

Пока вышло 2 видео, скоро будет еще :)

Показать полностью
0

Посоветуйте курс по питону?

Уверена, что вопрос звучал неоднократно, простите-помогите.

Хочется курс чтобы чуть сложнее чем для совсем начинающих, так как уже знаю js и со всеми базовыми вещами типа циклов знакома.

Формат в целом не важен - youtube, stepik, etc. Важно чтобы без воды и структурированно. Цель - пока просто ознакомиться с синтаксисом, понять что такое вообще бэкенд разработка.

0

Как конвертировать Word в Markdown и наоборот с помощью Python

Конвертация документов важна для поддержания согласованности между платформами. Например, вы можете начать с документа Word из-за его богатых возможностей форматирования. Однако, когда приходит время публиковать или делиться вашей работой в Интернете, конвертация в Markdown гарантирует, что она будет легко читаемой и совместимой с такими платформами, как GitHub или Medium.

В этом посте блога я поделюсь простым решением для конвертации между Word и Markdown с помощью Python и библиотеки Free Spire.Doc для Python.

  • Библиотека Python для конвертации Word-Markdown

  • Конвертация Word в Markdown

  • Конвертация Markdown в Word

  • Заключение

Библиотека Python для конвертации Word-Markdown

Free Spire.Doc для Python — это мощная библиотека, разработанная для работы с документами Word. Она предоставляет широкий спектр функциональных возможностей, включая создание, обработку и конвертацию документов. С помощью Spire.Doc вы можете легко конвертировать документы Word в Markdown и наоборот, не теряя форматирования или содержимого.

Чтобы начать, вы можете установить Free Spire.Doc из PyPI, используя следующую команду pip:

pip install spire.doc.free

Конвертация Word в Markdown

Конвертировать Word в Markdown с помощью Python и Spire.Doc просто. Сначала загрузите документ Word с помощью метода LoadFromFile(), затем сохраните его как файл MD с помощью метода SaveToFile().

from spire.doc import *

from spire.doc.common import *

# Создание объекта Document

document = Document()

# Загрузка файла Word

document.LoadFromFile("C:\\Users\\Administrator\\Desktop\\input.docx")

# Сохранение как файл MD

document.SaveToFile("output/ToMarkdown.md", FileFormat.Markdown)

# Освобождение ресурсов

document.Dispose()

При конвертации документов Word в Markdown с помощью Spire.Doc изображения по умолчанию сохраняются в кодировке Base64, что может увеличить размер файла и вызвать проблемы совместимости. Чтобы решить эту проблему, вы можете удалить изображения перед конвертацией.

Вы можете удалить изображения вручную или с помощью следующего кода:

# Итерация по секциям

for i in range(document.Sections.Count):

# Получение конкретной секции

section = document.Sections.get_Item(i)

# Итерация по абзацам

for j in range(section.Body.Paragraphs.Count):

# Получение конкретного абзаца

paragraph = section.Body.Paragraphs.get_Item(j)

k = 0

# Итерация по дочерним объектам

while k < len(paragraph.ChildObjects):

# Получение конкретного дочернего объекта

obj = paragraph.ChildObjects.get_Item(k)

# Определение, является ли дочерний объект текстовым диапазоном

if isinstance(obj, DocPicture):

# Удаление экземпляра DocPicture

paragraph.ChildObjects.Remove(obj)

else:

k += 1

Конвертация Markdown в Word

Конвертировать Markdown обратно в Word так же просто, как и конвертировать Word в Markdown. Вы можете загрузить файл Markdown с помощью метода LoadFromFile(), а затем конвертировать его в файл Word с помощью метода SaveToFile().

from spire.doc import *

from spire.doc.common import *

# Создание объекта Document

document = Document()

# Загрузка файла Markdown

document.LoadFromFile("C:\\Users\\Administrator\\Desktop\\input.md")

# Сохранение как файл docx

document.SaveToFile("output/ToWord.docx", FileFormat.Docx2016)

# Освобождение ресурсов

document.Dispose()

Заключение

В этой статье описано, как конвертировать Word в Markdown и Markdown в Word с помощью Free Spire.Doc для Python. Надеюсь, это поможет кому-то в нужде.

Показать полностью
7

FastStream: современный асинхронный Python фреймворк для работы с очередями

Сгоняли с автором на рыбалку: поговорили про FastStream, пожарили мясо, обсудили проблемы разработчиков при работе с очередями / брокерами сообщений.

FastStream – аналог FastAPI, но для работы с событиями в брокерах / очередях.

Пример:

FastStream: современный асинхронный Python фреймворк для работы с очередями

Что делает данный код? Читает сообщения из first-topic, парсит из них поле user типа str, выполняет логику обработки, отправляет новое сообщение в another-topic. Просто? Удобно?

Что нам дает такой код?

- Декларативное описание, чего мы хотим. Не надо руками создавать коннекты и рулить потоком выполнения

- AsyncAPI документацию (аналог OpenAPI в вебе)

- Удобное тестирование

- Кучу других плюшек!

Внутри видео обсудили:

- Детали работы DI фастстрима

- Встроенное Observability

- Open Tracing

- Сообщество фреймворка (тут не будет проблемы "одного автора", сообщество живет!)

- Отличия от Celery: когда брать что?

Репозиторий: https://github.com/ag2ai/faststream

Документация: https://faststream.ag2.ai

Показать полностью 1
7

Cursor теперь работает в вебе и с телефона

Прямо со смарта запускаешь агентов, редактируешь код, всё сохраняется в проект и спокойно подхватывается потом на компе

Ссылка

Источник

Показать полностью
19

Голь на выдумки хитра: прикрутил бесплатные котировки с Московской биржи к Excel. Делюсь способом

Excel - главный рабочий инструмент многих частных инвесторов. Здесь ведут портфели, стратегии и мониторинг котировок. Но получить от Московской биржи лучшие цены на покупку (BID) и продажу (OFFER) из стакана прямо в таблицу - задача не из простых. Даже платная подписка на сайт биржи не даёт получать котировки в Excel напрямую.

Но слово «взлом» в названии статьи - это художественное преувеличение. Мы не будем нарушать никаких законов или пытаться обойти защиту биржи и вообще даже не дышим в сторону серверов Мосбиржи. Однако голь на выдумки хитра - построим элегантное решение с помощью официального API от любого брокера.

Идея проста: создать локальный сервер-прокладку, который Excel сможет опрашивать через веб-запросы. Сервер будет обращаться к API брокера, получать данные стакана и возвращать их в понятном для себя XML формате прямо в вашу таблицу, в ячейке которой будет отображена нужная цифра.

Фактически по такой схеме можно получать любые параметры с биржи и видеть их в своём локальном Microsoft Excel или его свободном аналоге LibreOffice Calc.

Как это будет работать: схема

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

Excel делает веб-запрос - например, на адрес http://127.0.0.1:8000/orderbook.xml?ticker=SiU5&class_code=SPBFUT. Этот запрос поступает на локальный сервер, работающий на FastAPI. Сервер, в свою очередь, обращается к официальному API -брокера (в моём случае это Тинькофф Инвестиции), получает данные стакана - лучшие BID и OFFER и возвращает их в виде XML-ответа.

Excel легко обрабатывает XML через встроенные функции (но только для Windows, под Mac работать не будет), и нужные значения попадают прямо в ячейки таблицы.

Пока скрипт активен, Excel получает свежие данные. Выключили сервер - то есть закрыли bat файл (для Windows) - поток информации прекращается. Это безопасно и локально.

В России есть несколько брокеров с открытыми API:

Тинькофф (T-Invest): https://developer.tbank.ru/invest/intro/intro

Алор: https://alor.dev/docs/

Финам: https://trade-api.finam.ru/swagger/index.html

Выбор субъективный и для себя выбрал Тинькофф Инвестиции.

Как воспользоваться скриптом

1. Проверка и установка Python

🖥️ Windows:

  1. Скачайте установщик с официального сайта

  2. При установке обязательно отметьте:

    • ☑ Add Python to PATH

    • ☑ Install pip

  3. После установки проверьте в командной строке:

    python --version
    pip --version

🐧 Linux (Debian/Ubuntu):

sudo apt update && sudo apt install python3-venv python3-full -y

2. Настройка проекта

Скачайте проект с GitHub.

1. Впишите Ваш секретный токен в .env файл в корневой папке проекта:

TINKOFF_TOKEN="t.xxxxxxx_xxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxx-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # ← Ваше токен здесь

Где получить токен:

  • Зайдите на сайт брокера

  • Инвестиции → Настройки → Управление токенами

  • Создайте токен с ограниченными правами

Никогда не публикуйте и никому не передавайте этот токен!

Токен появится в списке как приложение:

2. Объяснение requirements.txt

tinkoff-investments # Работа с API Тинькофф Инвестиций
fastapi # Создание веб-сервера и маршрутов
uvicorn # ASGI-сервер, запускает FastAPI
python-dotenv # Загружает токен из .env файла

3. Запуск промежуточного сервера

🖥️ Windows: запуск через .bat файлы

Если у вас Windows, то:

1_install_requirements.bat - установка зависимостей

Запустите один раз для установки двойным кликом - установятся нужные библиотеки.

2_start_server.bat - запуск сервера

Основной запуск локального сервера на localhost:8000. Отображает всю информацию о запуске.

Под Windows всё работает

Под Windows всё работает

🐧 Linux: команды для запуска

Установка зависимостей:

python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt pip list deactivate

Запуск сервера:

source .venv/bin/activate
uvicorn server:app --host 127.0.0.1 --port 8000

Через LibreOffice Calc в Ubuntu всё работает

Через LibreOffice Calc в Ubuntu всё работает

Как проверить, что всё работает

  1. Запустите сервер (BAT или командой uvicorn).

  2. Откройте браузер и введите:

http://127.0.0.1:8000/orderbook.xml?ticker=SBER&class_code=TQBR

Если картинка в браузере как на скриншоте - запускайте Эксель под Windows:

Комбинация Ctrl + Alt + F9 это полный пересчёт всех формул во всех листах:

Главный скрипт: server.py

Что он делает:

1. Загружает токен доступа

load_dotenv()
TOKEN = os.getenv("TINKOFF_TOKEN")

Скрипт берет API-токен из .env файла - это безопасный способ хранения.

2. Создает HTTP-сервер с одним маршрутом /orderbook.xml

@app.get("/orderbook.xml")

Когда пользователь обращается по этому адресу с параметрами ticker и class_code, скрипт делает следующее:

3. Находит инструмент по тикеру

instrument_response = client.instruments.get_instrument_by(...)

Он ищет инструмент (например, акцию или фьючерс), используя тикер и код класса (например, "TQBR" - основной рынок акций, "SPBFUT" - фьючерсы).

4. Получает лучшие BID и OFFER

orderbook = client.market_data.get_order_book(...)

Скрипт запрашивает "стакан" заявок (Order Book) и берет из него самую выгодную цену на покупку (bid) и продажу (offer) с глубиной 1 (то есть только первую строку).

5. Формирует XML

<orderbook>
<ticker>SBER</ticker>
<class_code>TQBR</class_code>
<name>Сбер Банк</name>
<bid>304,910</bid>
<offer>304,920</offer>
</orderbook>

Собирает результат в XML-документ, пригодный для Excel.

6. Обрабатывает ошибки

Если инструмент не найден (ошибка в тикере или class_code), возвращается XML с описанием ошибки:

<error>Инструмент не найден</error>

Заключение

Предлагаемый мной подход - не взлом, а умное использование открытых возможностей.

Благодаря официальному API брокера и простому серверу на Python, вы получаете инструмент для мониторинга лучших BID и OFFER в Excel - без подписок и ограничений.

Но на этом возможности не заканчиваются: проект открыт (open source), а значит, вы можете легко адаптировать его под любые нужды - получать не только стакан, но и любые другие рыночные данные.

Хотите больше - доработайте сами или закажите изменения. Всё локально, безопасно и полностью под вашим контролем.

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

15 июля 2025 года

Показать полностью 13
Отличная работа, все прочитано!