使用Telegram发送消息 - API还是CLI?
我想在Telegram的群聊中发送一条消息。我想运行一个Python脚本(这个脚本已经可以正常工作),然后如果某些参数满足特定条件,脚本就应该通过Telegram发送一条消息。我现在使用的是Ubuntu系统,Python版本是2.7。
我觉得,如果我没记错的话,我有两种方法可以做到这一点:
第一种方法:让Python脚本直接连接到Telegram的API,然后发送消息(https://core.telegram.org/api)。
第二种方法:让Python脚本调用Telegram的命令行工具(https://github.com/vysheng/tg),把一些值传递给它,然后消息就会通过Telegram的命令行工具发送。
我觉得第一种方法比较复杂,所以使用第二种方法可能更好。
不过在这种情况下,我真的不知道该怎么做。我对Linux中的脚本了解不多,但我尝试了这样做:
#!/bin/bash
cd /home/username/tg
echo "msg user#******** messagehere" | ./telegram
sleep 10
echo "quit" | ./telegram
这个方法有点效果:它能正确发送消息,但之后进程一直保持开启。第二个问题是,我不知道怎么从Python调用这个脚本,以及怎么把一些值传递给它。我想传递给脚本的值是“messagehere”变量:这个变量会是一个100到200个字符的消息,由Python脚本内部定义。
有没有人对此有什么建议?谢谢大家的回复,希望这对其他人也有帮助。
7 个回答
你可以使用 safe_quit
来结束连接,因为它会等到所有事情都处理完再关闭连接和结束程序。
#!/bin/bash
cd /home/username/tg
echo "msg user#******** messagehere\nsafe_quit\n" | ./telegram
可以把这个当作一个简单的脚本,然后按照其他回答的建议从 Python 代码中调用它。
我正在使用pytg,这个东西可以在这里找到:一个封装了Telegram聊天工具命令行的Python包
它运行得很好。我已经基于这个项目做了一个Python机器人。
从1.05版本开始,你可以使用-P这个选项来接受来自一个套接字(socket)的消息。这是解决你问题的第三种方法。抱歉这不是你问题的直接答案,但我因为声望不够,无法评论你的问题。
Telegram最近发布了他们的新Bot API,这个接口让发送和接收消息变得非常简单。我建议你也去看看这个接口,看看它是否适合你的需求,它比使用客户端库或者与他们的MTProto API进行集成要简单得多。
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版本供你参考。
首先,创建一个叫做 tg.sh 的 bash 脚本,用来发送 Telegram 消息,具体可以参考这个链接。
#!/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}
然后,把这个脚本放在和你的 Python 脚本同一个文件夹里,并使用 chmod +x tg.sh
命令给它添加可执行权限。
最后,在 Python 中,你可以这样做:
import subprocess
subprocess.call(["./tg.sh", "user#****", "message here"])