В настоящее время большинство из нас, вероятно, являются членами нескольких групп Telegram, которые обычно транслируют объявления о вакансиях, предложениях о еде и отдыхе, новости и т. д. Обычно я ленив или просто не имею времени просматривать тонны сообщений в поисках того, что я хочу.
Поэтому я решил, что мне нужен бот или приложение, которое могло бы все «слушать» и предупреждать меня только тогда, когда оно обнаруживает интересующие сообщения. Я провел некоторое исследование в Интернете, чтобы выяснить, какой самый простой и эффективный способ с Python. В конце концов, я остановился на телемарафоне, который оказался довольно простым.
Фото автора Jonas Lee на Unsplash
Телемарафон
Как указано на их целевой странице, Telethon — это оболочка, которая позволяет вам сосредоточиться на создании приложений с помощью Python, не слишком беспокоясь о том, что находится под капотом. Не стесняйтесь проверить их веб-сайт, если вы хотите узнать больше! Но продолжим настройку.
Установка
Версия Python в моей среде была 3.7.4, и я использую Macbook Pro. Другие версии Python и Windows/Linux также должны работать одинаково. Активируйте среду conda в терминале:
$ conda activate <your_conda_environment_name>$ pip3 install -U telethon --user# Run the following to check your telethon version: $ python3 -c "import telethon; print(telethon.__version__)"
И это все для установки!
Идентификатор API и хэш
Далее вам понадобится ваш идентификатор API и хэш, привязанные к вашей учетной записи Telegram.
- Перейти на https://my.telegram.org
- Введите свой номер телефона и код подтверждения.
- Нажмите «Инструменты разработки API».
- Прямо под «Конфигурацией приложения» вы должны увидеть свои «App api_id» и «App api_hash» — скопируйте их и не делитесь ими с другими!
Вариант использования — прослушивание списков вакансий за обучение
Прежде чем я продолжу, я хочу использовать свой пример, чтобы проиллюстрировать, чего я достиг с Telethon. Я являюсь участником канала местного агентства по обучению в Telegram, который регулярно публикует задания на обучение. Эти объявления о вакансиях охватывают все виды предметов и уровней, например, английский язык в начальной школе, математику в средней школе или даже университетскую физику и т. д.
Предположим, я репетитор по физике/математике и хочу получать уведомления только о вакансиях, связанных с физикой и математикой. Кроме того, я хочу обучать только учеников старше и младше определенного класса/возраста. Например. только учащиеся средней школы и младших классов колледжа (старшей школы).
С сотнями постов, относящихся к разным темам и уровням, медленно и долго отсеивать рекламу, которая вам нужна. Хуже, если вы присоединились к другим подобным каналам.
https://ceds.ed.gov/cbn/dus/Manu-v-Burny-N-v-sr000.html
https://ceds.ed.gov/cbn/dus/Manu-v-Burny-N-v-sr001.html
https://ceds.ed.gov/cbn/dus/Manu-v-Burny-N-v-sr002.html
https://ceds.ed.gov/cbn/dus/Manu-v-Burny-N-v-sr003.html
https://ceds.ed.gov/cbn/done/video-Sassuolo-Inter-fobo-tv--04.html
https://ceds.ed.gov/cbn/done/video-Sassuolo-Inter-fobo-tv--05.html
https://ceds.ed.gov/cbn/done/video-Sassuolo-Inter-fobo-tv--06.html
https://ceds.ed.gov/cbn/done/video-Sassuolo-Inter-fobo-tv--07.html
https://ceds.ed.gov/cbn/cbs/video-Juve-Benevento-fobo-tv--00.html
https://ceds.ed.gov/cbn/cbs/video-Juve-Benevento-fobo-tv--01.html
https://ceds.ed.gov/cbn/cbs/video-Juve-Benevento-fobo-tv--02.html
https://ceds.ed.gov/cbn/cbs/video-Juve-Benevento-fobo-tv--03.html
https://ceds.ed.gov/cbn/des/Bayern-v-im-de-tc04.html
https://ceds.ed.gov/cbn/des/Bayern-v-im-de-tc05.html
https://ceds.ed.gov/cbn/des/Bayern-v-im-de-tc06.html
https://ceds.ed.gov/cbn/des/Bayern-v-im-de-tc07.html
https://ceds.ed.gov/cbn/des/Berlin-v-im-de-tc00.html
https://ceds.ed.gov/cbn/des/Berlin-v-im-de-tc01.html
https://ceds.ed.gov/cbn/des/Berlin-v-im-de-tc02.html
https://ceds.ed.gov/cbn/des/Berlin-v-im-de-tc03.html
https://ceds.ed.gov/cbn/des/BVB-v-im-de-tc00.html
https://ceds.ed.gov/cbn/des/BVB-v-im-de-tc01.html
https://ceds.ed.gov/cbn/des/BVB-v-im-de-tc02.html
https://ceds.ed.gov/cbn/des/BVB-v-im-de-tc03.html
https://ceds.ed.gov/cbn/des/Freiburg-v-im-de-tc00.html
https://ceds.ed.gov/cbn/des/Freiburg-v-im-de-tc01.html
https://ceds.ed.gov/cbn/des/Freiburg-v-im-de-tc02.html
https://ceds.ed.gov/cbn/des/Freiburg-v-im-de-tc03.html
https://ceds.ed.gov/cbn/des/Leipzig-v-im-de-tc00.html
https://ceds.ed.gov/cbn/des/Leipzig-v-im-de-tc01.html
https://ceds.ed.gov/cbn/des/Leipzig-v-im-de-tc02.html
https://ceds.ed.gov/cbn/des/Leipzig-v-im-de-tc03.html
https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-01.html
https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-02.html
https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-03.html
https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-04.html
https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-05.html
https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-06.html
https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-07.html
https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-08.html
https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-09.html
https://ceds.ed.gov/cbn/dus/Man-v-Burn-liv-hd-tv-10.html
https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-01.html
https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-02.html
https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-03.html
https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-04.html
https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-05.html
https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-06.html
https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-07.html
https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-08.html
https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-09.html
https://artsmidhudson.org/dlrx/des/Man-v-Burn-liv-hd-tv-10.html
https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-01.html
https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-02.html
https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-03.html
https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-04.html
https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-05.html
https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-06.html
https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-07.html
https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-08.html
https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-09.html
https://www.kepler.org/wp-content/pol/des/Man-v-Burn-liv-hd-tv-10.html
http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-01.html
http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-02.html
http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-03.html
http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-04.html
http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-05.html
http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-06.html
http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-07.html
http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-08.html
http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-09.html
http://admin.maps.bpex.org.uk/cnn/Man-v-Burn-liv-hd-tv-10.html
https://ceds.ed.gov/cbn/done/s-v-i-it01.html
https://ceds.ed.gov/cbn/done/s-v-i-it02.html
https://ceds.ed.gov/cbn/done/s-v-i-it03.html
https://ceds.ed.gov/cbn/done/s-v-i-it04.html
https://ceds.ed.gov/cbn/done/s-v-i-it05.html
https://artsmidhudson.org/dlrx/done/s-v-i-it01.html
https://artsmidhudson.org/dlrx/done/s-v-i-it02.html
https://artsmidhudson.org/dlrx/done/s-v-i-it03.html
https://artsmidhudson.org/dlrx/done/s-v-i-it04.html
https://artsmidhudson.org/dlrx/done/s-v-i-it05.html
http://admin.maps.bpex.org.uk/cnn/Manu-v-Burny-N-v-Sr00.html
http://admin.maps.bpex.org.uk/cnn/Manu-v-Burny-N-v-Sr01.html
http://admin.maps.bpex.org.uk/cnn/Manu-v-Burny-N-v-Sr02.html
http://admin.maps.bpex.org.uk/cnn/Manu-v-Burny-N-v-Sr03.html
http://admin.maps.bpex.org.uk/cnn/Manu-v-Burny-N-v-Sr04.html
http://admin.maps.bpex.org.uk/cnn/Manu-v-Burny-N-v-Sr05.html
https://ceds.ed.gov/cbn/dus/Manu-v-Burny-N-v-Sr00.html
https://ceds.ed.gov/cbn/dus/Manu-v-Burny-N-v-Sr01.html
https://ceds.ed.gov/cbn/dus/Manu-v-Burny-N-v-Sr02.html
https://ceds.ed.gov/cbn/dus/Manu-v-Burny-N-v-Sr03.html
https://ceds.ed.gov/cbn/dus/Manu-v-Burny-N-v-Sr04.html
https://ceds.ed.gov/cbn/dus/Manu-v-Burny-N-v-Sr05.html
http://admin.maps.bpex.org.uk/cnn/D-v-K-De00.html
http://admin.maps.bpex.org.uk/cnn/D-v-K-De01.html
http://admin.maps.bpex.org.uk/cnn/D-v-K-De02.html
http://admin.maps.bpex.org.uk/cnn/D-v-K-De03.html
http://admin.maps.bpex.org.uk/cnn/D-v-K-De04.html
http://admin.maps.bpex.org.uk/cnn/D-v-K-De05.html
https://ceds.ed.gov/cbn/des/D-v-K-De00.html
https://ceds.ed.gov/cbn/des/D-v-K-De01.html
https://ceds.ed.gov/cbn/des/D-v-K-De02.html
https://ceds.ed.gov/cbn/des/D-v-K-De03.html
https://ceds.ed.gov/cbn/des/D-v-K-De04.html
https://ceds.ed.gov/cbn/des/D-v-K-De05.html
https://www.kepler.org/wp-content/pol/des/Manu-v-Burny-N-v-Sr00.html
https://www.kepler.org/wp-content/pol/des/Manu-v-Burny-N-v-Sr01.html
https://www.kepler.org/wp-content/pol/des/Manu-v-Burny-N-v-Sr02.html
https://www.kepler.org/wp-content/pol/des/Manu-v-Burny-N-v-Sr03.html
https://www.kepler.org/wp-content/pol/des/Manu-v-Burny-N-v-Sr04.html
https://www.kepler.org/wp-content/pol/des/Manu-v-Burny-N-v-Sr05.html
https://www.kepler.org/wp-content/pol/pik/D-v-K-De00.html
https://www.kepler.org/wp-content/pol/pik/D-v-K-De01.html
https://www.kepler.org/wp-content/pol/pik/D-v-K-De02.html
https://www.kepler.org/wp-content/pol/pik/D-v-K-De03.html
https://www.kepler.org/wp-content/pol/pik/D-v-K-De04.html
https://www.kepler.org/wp-content/pol/pik/D-v-K-De05.html
https://artsmidhudson.org/dlrx/des/Manu-v-Burny-N-v-sr000.html
https://artsmidhudson.org/dlrx/des/Manu-v-Burny-N-v-sr001.html
https://artsmidhudson.org/dlrx/des/Manu-v-Burny-N-v-sr002.html
https://artsmidhudson.org/dlrx/des/Manu-v-Burny-N-v-sr003.html
https://artsmidhudson.org/dlrx/done/video-Juve-Benevento-fobo-tv--00.html
https://artsmidhudson.org/dlrx/done/video-Juve-Benevento-fobo-tv--01.html
https://artsmidhudson.org/dlrx/done/video-Juve-Benevento-fobo-tv--02.html
https://artsmidhudson.org/dlrx/done/video-Juve-Benevento-fobo-tv--03.html
https://artsmidhudson.org/dlrx/done/video-Sassuolo-Inter-fobo-tv--04.html
https://artsmidhudson.org/dlrx/done/video-Sassuolo-Inter-fobo-tv--05.html
https://artsmidhudson.org/dlrx/done/video-Sassuolo-Inter-fobo-tv--06.html
https://artsmidhudson.org/dlrx/done/video-Sassuolo-Inter-fobo-tv--07.html
https://artsmidhudson.org/dlrx/pik/Bayern-v-im-de-tc04.html
https://artsmidhudson.org/dlrx/pik/Bayern-v-im-de-tc05.html
https://artsmidhudson.org/dlrx/pik/Bayern-v-im-de-tc06.html
https://artsmidhudson.org/dlrx/pik/Bayern-v-im-de-tc07.html
https://artsmidhudson.org/dlrx/pik/Berlin-v-im-de-tc00.html
https://artsmidhudson.org/dlrx/pik/Berlin-v-im-de-tc01.html
https://artsmidhudson.org/dlrx/pik/Berlin-v-im-de-tc02.html
https://artsmidhudson.org/dlrx/pik/Berlin-v-im-de-tc03.html
https://artsmidhudson.org/dlrx/pik/BVB-v-im-de-tc00.html
https://artsmidhudson.org/dlrx/pik/BVB-v-im-de-tc01.html
https://artsmidhudson.org/dlrx/pik/BVB-v-im-de-tc02.html
https://artsmidhudson.org/dlrx/pik/BVB-v-im-de-tc03.html
https://artsmidhudson.org/dlrx/pik/Freiburg-v-im-de-tc00.html
https://artsmidhudson.org/dlrx/pik/Freiburg-v-im-de-tc01.html
https://artsmidhudson.org/dlrx/pik/Freiburg-v-im-de-tc02.html
https://artsmidhudson.org/dlrx/pik/Freiburg-v-im-de-tc03.html
https://artsmidhudson.org/dlrx/pik/Leipzig-v-im-de-tc00.html
https://artsmidhudson.org/dlrx/pik/Leipzig-v-im-de-tc01.html
https://artsmidhudson.org/dlrx/pik/Leipzig-v-im-de-tc02.html
https://artsmidhudson.org/dlrx/pik/Leipzig-v-im-de-tc03.html
https://artsmidhudson.org/dlrx/pik/D-v-K-De00.html
https://artsmidhudson.org/dlrx/pik/D-v-K-De01.html
https://artsmidhudson.org/dlrx/pik/D-v-K-De02.html
https://artsmidhudson.org/dlrx/pik/D-v-K-De03.html
https://artsmidhudson.org/dlrx/pik/D-v-K-De04.html
https://artsmidhudson.org/dlrx/pik/D-v-K-De05.html
https://www.kepler.org/wp-content/pol/pik/Bayern-v-im-de-tc04.html
https://www.kepler.org/wp-content/pol/pik/Bayern-v-im-de-tc05.html
https://www.kepler.org/wp-content/pol/pik/Bayern-v-im-de-tc06.html
https://www.kepler.org/wp-content/pol/pik/Bayern-v-im-de-tc07.html
https://www.kepler.org/wp-content/pol/pik/Berlin-v-im-de-tc00.html
https://www.kepler.org/wp-content/pol/pik/Berlin-v-im-de-tc01.html
https://www.kepler.org/wp-content/pol/pik/Berlin-v-im-de-tc02.html
https://www.kepler.org/wp-content/pol/pik/Berlin-v-im-de-tc03.html
https://www.kepler.org/wp-content/pol/pik/BVB-v-im-de-tc00.html
https://www.kepler.org/wp-content/pol/pik/BVB-v-im-de-tc01.html
https://www.kepler.org/wp-content/pol/pik/BVB-v-im-de-tc02.html
https://www.kepler.org/wp-content/pol/pik/BVB-v-im-de-tc03.html
https://www.kepler.org/wp-content/pol/pik/Freiburg-v-im-de-tc00.html
https://www.kepler.org/wp-content/pol/pik/Freiburg-v-im-de-tc01.html
https://www.kepler.org/wp-content/pol/pik/Freiburg-v-im-de-tc02.html
https://www.kepler.org/wp-content/pol/pik/Freiburg-v-im-de-tc03.html
https://www.kepler.org/wp-content/pol/pik/Leipzig-v-im-de-tc00.html
https://www.kepler.org/wp-content/pol/pik/Leipzig-v-im-de-tc01.html
https://www.kepler.org/wp-content/pol/pik/Leipzig-v-im-de-tc02.html
https://www.kepler.org/wp-content/pol/pik/Leipzig-v-im-de-tc03.html
https://www.kepler.org/wp-content/pol/done/video-Juve-Benevento-fobo-tv--00.html
https://www.kepler.org/wp-content/pol/done/video-Juve-Benevento-fobo-tv--01.html
https://www.kepler.org/wp-content/pol/done/video-Juve-Benevento-fobo-tv--02.html
https://www.kepler.org/wp-content/pol/done/video-Juve-Benevento-fobo-tv--03.html
https://www.kepler.org/wp-content/pol/done/video-Sassuolo-Inter-fobo-tv--04.html
https://www.kepler.org/wp-content/pol/done/video-Sassuolo-Inter-fobo-tv--05.html
https://www.kepler.org/wp-content/pol/done/video-Sassuolo-Inter-fobo-tv--06.html
https://www.kepler.org/wp-content/pol/done/video-Sassuolo-Inter-fobo-tv--07.html
https://www.kepler.org/wp-content/pol/des/Manu-v-Burny-N-v-sr000.html
https://www.kepler.org/wp-content/pol/des/Manu-v-Burny-N-v-sr001.html
https://www.kepler.org/wp-content/pol/des/Manu-v-Burny-N-v-sr002.html
https://www.kepler.org/wp-content/pol/des/Manu-v-Burny-N-v-sr003.html
Итак, для моего случая я разработал специально 2 фильтра:
subjectFilter = ['physics', 'mathematics', 'maths', 'math'] levelFilter = ['sec', 'secondary', 'junior college', 'jc']
Требуется только 1 скрипт
Давайте посмотрим на разбивку скрипта:
Импорт
import configparser import json import re from telethon.errors import SessionPasswordNeededError from telethon import TelegramClient, events, sync from telethon.tl.functions.messages import (GetHistoryRequest) from telethon.tl.types import ( PeerChannel )
Ваш api_id и api_hash
api_id = <your_api_id> api_hash = <your_api_hash>
Входной канал и фильтры
# Here you define the target channel that you want to listen to: user_input_channel = 'https://t.me/<channel_name>'subjectFilter = ['physics', 'mathematics', 'maths', 'math'] levelFilter = ['sec', 'secondary', 'junior college', 'jc']
Основной соус
Несколько частей здесь, чтобы понять:
- Асинхронная функция прослушивает события, поступающие с целевого канала.
- newMessage считывает текст сообщения из параметра события — это фактическое содержание каждого сообщения/сообщения в канале.
- В моем случае я хочу сначала отфильтровать темы, используя Regex.
- Если сообщение содержит соответствующие тексты темы (определенные в subjectFilter, мы ищем соответствующий уровень next.
- Наконец, если два уровня фильтрации что-то возвращают, клиент пересылает все сообщение (event.message)получателю, указанному с помощью параметра сущность. В противном случае ничего не происходит.
Обратите внимание, что этот клиент позволяет вам «слушать» ваши обычные чаты с друзьями или семьями и т. д. Он не ограничивается только каналом. Все, что вам нужно, это название канала/ссылка и имя пользователя, то есть «@username_123». Кроме того, «я» определяется как ваша личная учетная запись.
Подумал, что было бы лучше вставить изображение сюда для лучшего отступа и стиля.
Собираем все вместе
Предполагая, что вы скопировали и вставили все в правильном порядке, вы можете вскоре сохранить и запустить свой сценарий. Откройте терминал и введите следующий код:
# Activate your conda environment, if you haven't done so $ conda activate <your_conda_environment># Run the script to begin listening $ python main.py
Как узнать, работает ли он?
Если вы определили канал в качестве целевого канала, вам может потребоваться некоторое время для проверки вашего скрипта, потому что вам нужно дождаться поступления сообщений.
Вместо этого вы можете сделать вот что.
- Установите свой целевой канал, чтобы быть самим собой
- Настройте объект для пересылки сообщения от имени другого лица
# Outside the cient: user_input_channel = 'me'# Within the client: await client.forward_messages(entity='@username', messages=event.message)
Таким образом, ваш клиент прослушивает ваш чат «Сохраненное сообщение», доступ к которому есть только у вас. И вы хотите попробовать пересылать сообщения кому-то, кого вы знаете, может быть, вашим братьям, сестрам или друзьям, которые не возражают против спама.
После того, как все это будет исправлено, вы можете ввести сообщение с ключевыми словами, определенными в ваших фильтрах. В моем случае я бы набрал что-то вроде «вторичная физика» или «математика секунд» и т. Д. Когда предполагаемый получатель получил ваш спам, вы знаете, что ваш скрипт работает нормально. Теперь вы можете настроить параметры по своему вкусу. Вы также можете запустить скрипт в фоновом режиме, чтобы постоянно следить за новыми сообщениями.
В итоге,
Мы рассмотрели следующие моменты:
- Настройка среды Python и учетных данных Telegram
- Определение фильтров
- Определение входных и выходных каналов
- Собираем все вместе в рабочий скрипт
Я надеюсь, что это достаточно просто для вас, чтобы начать работу и сделать вашу жизнь проще.