Отправка сообщений с помощью Telegram - API или CLI?
Я хотел бы иметь возможность отправить сообщение в групповой чат в Telegram. Я хочу запустить python script (который выполняет некоторые операции, которые уже работают), а затем, если некоторые параметры имеют некоторые значения, script должен отправить сообщение в групповой чат через Telegram. Я использую Ubuntu и Python 2.7
Я думаю, если я не ошибаюсь, у меня есть два способа сделать это:
-
Путь один: сделайте Python script напрямую подключенным к API Telegram и отправьте сообщение (https://core.telegram.org/api).
-
Шаг второй: сделайте Python script вызовом CLI Telegram (https://github.com/vysheng/tg), передайте некоторые значения этому, а затем отправите сообщение с помощью CLI Telegram.
Я думаю, что первый путь длиннее, поэтому хорошей идеей может быть использование второго пути.
В этом случае я действительно не знаю, как действовать.
Я не знаю много о скриптах в linux, но я попытался сделать это:
#!/bin/bash
cd /home/username/tg
echo "msg user#******** messagehere" | ./telegram
sleep 10
echo "quit" | ./telegram
это работает пополам: он отправляет сообщение правильно, но тогда процесс остается открытым. И вторая проблема, я не знаю, как назвать это из python и как передать некоторое значение этому script. Значение, которое я хотел бы передать в script, это varweb "messagehere": это будет сообщение из 100 символов, определенное изнутри python script.
Есть ли у кого-нибудь подсказки?
Спасибо за ответы, я надеюсь, что это может быть полезно для кого-то другого.
Ответы
Ответ 1
Сначала создайте bash script для телеграммы с именем tg.sh:
#!/bin/bash
now=$(date)
to=$1
subject=$2
body=$3
tgpath=/home/youruser/tg
LOGFILE="/home/youruser/tg.log"
cd ${tgpath}
${tgpath}/telegram -k ${tgpath}/tg-server.pub -W <<EOF
msg $to $subject
safe_quit
EOF
echo "$now Recipient=$to Message=$subject" >> ${LOGFILE}
echo "Finished" >> ${LOGFILE}
Затем поместите script в ту же папку, что и ваш python script, и дайте ему + x с помощью chmod +x tg.sh
И, наконец, из python вы можете сделать:
import subprocess
subprocess.call(["./tg.sh", "user#****", "message here"])
Ответ 2
Недавно Telegram выпустила свой новый API-интерфейс Bot, который делает отправку/получение сообщений тривиальными. Я предлагаю вам также взглянуть на это и посмотреть, соответствует ли он вашим потребностям, это оборачивает упаковку клиентской библиотеки или интеграцию с их API MTProto.
import urllib
import urllib2
# Generate a bot ID here: https://core.telegram.org/bots#botfather
bot_id = "{YOUR_BOT_ID}"
# Request latest messages
result = urllib2.urlopen("https://api.telegram.org/bot" + bot_id + "/getUpdates").read()
print result
# Send a message to a chat room (chat room ID retrieved from getUpdates)
result = urllib2.urlopen("https://api.telegram.org/bot" + bot_id + "/sendMessage", urllib.urlencode({ "chat_id": 0, "text": 'my message' })).read()
print result
К сожалению, я не видел ни одной библиотеки Python, с которой вы можете напрямую взаимодействовать, но вот эквивалент NodeJS, над которым я работал для справки.
Ответ 3
Начиная с версии 1.05 вы можете использовать опцию -P для приема сообщений из сокета, что является третьим вариантом для решения вашей проблемы. Извините, что это не ответ на ваш вопрос, но я не могу комментировать ваш вопрос, потому что у меня недостаточно репутации.
Ответ 4
Я работаю с pytg, который можно найти здесь:
Пакет Python, который обертывает CLI для обмена сообщениями Telegram
он работает очень хорошо. У меня уже есть python-бот на основе этого проекта
Ответ 5
Вы можете использовать safe_quit
для прекращения соединения, так как он ждет, пока все не будет завершено до закрытия соединения и завершения приложения
#!/bin/bash
cd /home/username/tg
echo "msg user#******** messagehere\nsafe_quit\n" | ./telegram
используйте это как простой script и назовите его из кода python, как и предложил другой ответ.
Ответ 6
Я бы порекомендовал первый вариант.
Как только вам будет удобно создавать AuthKey, вы должны начать обрабатывать документацию.
Чтобы помочь, я написал подробное пошаговое руководство о том, как я написал код генерации AuthKey с нуля здесь.
Это в vb.net, но шаги должны помочь вам сделать то же самое в python.