【发布时间】:2015-05-12 07:19:00
【问题描述】:
我编写了一个脚本,用于在发布新的Nexus factory image 时将更新推送到 Pushbullet 频道。该页面上的前 11 台设备中的每台都有一个单独的频道,我正在使用一个相当复杂的脚本来监视更新。完整的设置是here(特别是this script),但我将简要总结下面的脚本。 我的问题是:这显然不是正确的方法,因为它很容易出现多点故障。有什么更好的方法来做到这一点?我更愿意坚持使用 Python,但如果它们更简单/更好,我愿意接受其他语言。
(这个问题是因为我今晚更新了我的 apache 2.4 配置,它显然触发了 urlwatch 观看的本地文件输出的轻微变化,所以所有 11 个频道都有一个向他们推送了错误的更新。)
基本脚本功能(不包括一些非必要部分):
- 创建与其完整型号名称关联的每个设备代号的字典
- 使用Requests 获取现有的 Nexus Factory 图像页面
- 从源代码制作bs4对象
- 对于字典(循环)中的 11 个设备中的每一个,执行以下操作:
- 在设备的公共 Web 目录中打开/创建页面
- 将源代码写入该页面,使用 bs4 过滤:
str(soup.select("h2#" + dev + " ~ table")[0]) - 在页面调用
urlwatch检查更新,将输出保存到临时文件 - 如果临时文件大小 > 0,则页面已更改,因此将更新推送到相应频道
- 删除网页和临时文件
我在输入此问题时的一个想法: 可能的解决方案是将每个当前版本字符串(例如:5.1.0 (LMY47I))保存为腌制变量,然后如果urlwatch 检测到不同之处在于它将新版本的字符串与腌制的字符串进行比较,并且仅在它们不同时才推送?我也会加入正则表达式匹配,以确保新格式与旧格式匹配并且刚刚更新了数据,但这至少可以作为一个很好的临时措施来防止未来出现误报吗?
【问题讨论】:
标签: python beautifulsoup python-requests pushbullet