В настоящее время большинство из нас, вероятно, являются членами нескольких групп 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)

Таким образом, ваш клиент прослушивает ваш чат «Сохраненное сообщение», доступ к которому есть только у вас. И вы хотите попробовать пересылать сообщения кому-то, кого вы знаете, может быть, вашим братьям, сестрам или друзьям, которые не возражают против спама.

После того, как все это будет исправлено, вы можете ввести сообщение с ключевыми словами, определенными в ваших фильтрах. В моем случае я бы набрал что-то вроде «вторичная физика» или «математика секунд» и т. Д. Когда предполагаемый получатель получил ваш спам, вы знаете, что ваш скрипт работает нормально. Теперь вы можете настроить параметры по своему вкусу. Вы также можете запустить скрипт в фоновом режиме, чтобы постоянно следить за новыми сообщениями.

В итоге,

Мы рассмотрели следующие моменты:

  1. Настройка среды Python и учетных данных Telegram
  2. Определение фильтров
  3. Определение входных и выходных каналов
  4. Собираем все вместе в рабочий скрипт

Я надеюсь, что это достаточно просто для вас, чтобы начать работу и сделать вашу жизнь проще.