【发布时间】:2021-09-20 18:13:42
【问题描述】:
我想做的是:
- 我正在尝试制作一个 Telegram-bot,当特定网页上有新帖子更新时,它会向我发送消息。
- 我制作了代码并将其上传到 Heroku。
- 机器人使用 Heroku Scheduler 设置为每 10 分钟启动一次,以便检测每 10 分钟更新一次的任何新帖子。
现在的问题是:
-
代码被设置为记住最新的帖子编号,如果在上一次机器人运行和当前运行之间没有任何更新,则不会发出任何警报。
-
如果上次运行中保存的帖子编号与当前运行中的最新帖子编号匹配,则机器人不应该提醒我并继续执行预定的过程(继续每 10 分钟检查一次新帖子)。
-
这是我为完成这项工作而制作的
import os latest_num = os.environ.get("POST_ID") post_num = posts.find("td", {"class" : "no"}).text.strip() if latest_num != post_num : latest_num = post_num os.environ["POST_ID"] = latest_num -
我假设如果上次运行的最新帖子编号通过 Heroku 上的环境变量保存为“POST_ID”,则它应该出现在当前运行中,并且在使用
os.environ读取 @ 时为latest_num的值987654324@ 来自环境变量。 -
但问题是,似乎
os.environ["POST_ID"]在当前运行完成后并没有覆盖它的值。 Heroku调度器每次启动程序时,'latest_num'的值为0,与Heroku设置中"POST_ID"的默认值相同。 -
因此,即使没有新帖子,机器人也会不断向我发送消息,因为
'latest_num'始终与'post_num'不匹配。
我该如何解决这个问题?实际上,我不知道是否可以通过python代码设置环境变量。请告诉我是否有更好的方法来完成这项工作。
【问题讨论】:
-
为什么你不将上一个帖子编号保存在文本文件或 python 变量中?
-
哦,那是我无法想象的。我现在就试试。谢谢!
-
我建议使用 Heroku 的数据库解决方案来持久化更新的值
-
@Kshitiz 过分了,是的。但是文件和环境变量不是持久的,因为 Heroku dynos 会定期重启。
-
感谢您的建议。由于 Heroku 的存储是短暂的,我无法将更改后的 post_id 保存在 txt 文件中。经过一番尝试,我刚刚发现可以使用一个名为 PostgreSQL 的服务作为数据库来保存可变数据。所以我正在测试这个方法,我认为这个方法效果很好!
标签: python heroku environment-variables