使用 Telegram - API 或 CLI 发送消息?
Posted
技术标签:
【中文标题】使用 Telegram - API 或 CLI 发送消息?【英文标题】:Sending messages with Telegram - APIs or CLI? 【发布时间】:2014-08-11 10:15:10 【问题描述】:我希望能够向 Telegram 中的群聊发送消息。我想运行一个 python 脚本(它可以进行一些已经可以运行的操作),然后,如果某些参数有一些值,该脚本应该通过 Telegram 向群聊发送一条消息。我正在使用 Ubuntu 和 Python 2.7
我认为,如果我没记错的话,我有两种方法可以做到这一点:
方法一:让 Python 脚本直接连接到 Telegram API 并发送消息 (https://core.telegram.org/api)。
方法二:让 Python 脚本调用 Telegram 的 CLI (https://github.com/vysheng/tg),将一些值传递给它,然后由 Telegram 的 CLI 发送消息。
我认为第一种方式更长,所以一个好主意可能是使用方式二。
在这种情况下,我真的不知道如何进行。 我不太了解 linux 中的脚本,但我尝试过这样做:
#!/bin/bash
cd /home/username/tg
echo "msg user#******** messagehere" | ./telegram
sleep 10
echo "quit" | ./telegram
这工作了一半:它正确发送消息,但随后进程保持打开状态。第二个问题,我不知道如何从 python 调用它以及如何将一些值传递给这个脚本。我想传递给脚本的值是“messagehere”变量:这将是一条 100/200 个字符的消息,从 python 脚本内部定义。
有人对此有任何线索吗? 感谢您的回复,我希望这可能对其他人有用。
【问题讨论】:
你有没有从 python 中找到一种方法来做到这一点? 【参考方案1】:我会推荐第一个选项。
一旦您对生成 AuthKey 感到满意,您就应该开始掌握文档了。
为了提供帮助,我编写了详细的分步指南,说明我如何从头开始编写 AuthKey 生成代码 here。
它在 vb.net 中,但这些步骤应该可以帮助您在 python 中做同样的事情。
【讨论】:
【参考方案2】: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 等价物供我参考。
【讨论】:
这个链接可能会回答这个问题,但是你能提供比仅仅链接到 API 更多的上下文吗?也许是关于如何设置 API 和发送消息的小 sn-p? 我用一些 Python 示例更新了答案。我在 NodeJS 中使用 API,但示例代码应该可以正常工作。 非常感谢!我现在通过 github.com/leonjza/hogar 使用他们的 Bot API,它要简单得多!【参考方案3】:从 1.05 版开始,您可以使用 -P 选项来接受来自套接字的消息,这是解决问题的第三个选项。抱歉,这不是您问题的真正答案,但我无法评论您的问题,因为我没有足够的声誉。
【讨论】:
【参考方案4】:我正在使用 pytg,可以在这里找到: A Python package that wraps around Telegram messenger CLI
效果很好。我已经有一个基于该项目的 python 机器人
【讨论】:
仅供参考:它被称为pytg,可通过pip install pytg
安装【参考方案5】:
您可以使用safe_quit
来终止连接,因为它会等到一切都完成后再关闭连接并终止应用程序
#!/bin/bash
cd /home/username/tg
echo "msg user#******** messagehere\nsafe_quit\n" | ./telegram
将其用作一个简单的脚本,并按照其他答案的建议从 python 代码中调用它。
【讨论】:
【参考方案6】:首先为电报创建一个名为 tg.sh 的bash script:
#!/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
给它+x权限
最后在 python 中,你可以这样做:
import subprocess
subprocess.call(["./tg.sh", "user#****", "message here"])
【讨论】:
它不起作用,并且出现此错误:[警告] fd 0 上的 Epoll ADD(1) 失败。旧事件为 0;读取更改为 1(添加);写入更改为 0(无):不允许操作以上是关于使用 Telegram - API 或 CLI 发送消息?的主要内容,如果未能解决你的问题,请参考以下文章