将我的.php输出发送到curl命令,该命令使用机器人通过电报向我发送消息

时间:2019-01-11 22:43:25

标签: php bash curl bots telegram

我每隔几分钟执行一次以下cron:

*/8 * * * * /usr/local/bin/php -f /home/xxx/yyyy.php >> /home/xxx/zzzz.log

当前,其输出存储在.log文件中。但是我希望能够通过电报机器人将输出作为消息发送给我。

我已经制造了一个机器人并拥有api密钥,但是我不确定如何连接它们。

在电报api文档上,它说我可以使用curl来使bot通过在bash文件中执行以下操作来向我发送消息:

#!/bin/bash

CHATID="1234"
KEY="abcd"
TIME="10"
URL="https://api.telegram.org/bot$KEY/sendMessage"
TEXT="Hello world"

curl -s --max-time $TIME -d "chat_id=$CHATID&disable_web_page_preview=1&text=$TEXT" $URL >/dev/null

在>>之后添加curl显然不起作用。怎么做?

2 个答案:

答案 0 :(得分:0)

您可以使用管道(|)将cron输出重定向到脚本或命令。 这是一个示例:

*/8 * * * * /usr/local/bin/php -f /home/xxx/yyyy.php | tee /home/xxx/zzzz.log | /home/xxx/telegram.sh

这会将命令的输出写入/home/xxx/zzzz.log并将其发送到脚本的标准输入。

答案 1 :(得分:0)

将PHP脚本的输出分配给TEXT shell变量

CHATID="1234"
KEY="abcd"
TIME="10"
URL="https://api.telegram.org/bot$KEY/sendMessage"
TEXT=$(usr/local/bin/php -f /home/xxx/yyyy.php)
# URL-encode some special characters
TEXT=${TEXT//%/%25}
TEXT=${TEXT//&/%26}
TEXT=${TEXT//=/%3D}
TEXT=${TEXT// /%20}
curl -s --max-time $TIME -d "chat_id=$CHATID&disable_web_page_preview=1&text=$TEXT" "$URL" >/dev/null

将以上内容放入shell脚本中,然后从cron运行该脚本,而不是直接运行PHP脚本。

如果还希望将其发送到日志文件,则可以使用tee命令:

TEXT=$(usr/local/bin/php -f /home/xxx/yyyy.php | tee -a /home/xxx/zzzz.log)