监控API的变化-使用Python的方式?

4
我希望当一个RESTful API改变其响应时收到提醒。使用Python,最好的方法是什么?
我有一个可以调用的API - 192.168.1.1/status.json - 它返回一个JSON文件,其中包含大量数据。例如:
{
  "status"      : "charging",
  "status_code" : 123
}

我希望检测状态码何时发生变化。
我可以设置cron每分钟轮询API(这对我的需求足够了) - 但是将新结果与上一个结果进行比较的最佳方法是什么?
我唯一能想到的是将.json文件保存到磁盘中,然后读取和比较它。是否有更好/更正确的方法在会话之间保持数据?
另一种选择是将Python程序设置为运行循环,休眠60秒并将结果保存在内存中。但是那我就必须确保没有内存泄漏,让它在启动时运行,防止它崩溃等等。
API服务器非常基本 - 因此无法使用“适当地定期检查api以获取新数据的方法”中的建议。
我是否忽略了一些明显的东西?

1
你考虑过使用pickle将数据保存吗?这比读取JSON文件并再次解析更符合Python风格(而且可能更快)。 - d6bels
2个回答

2

也许你应该看看这个链接。这里

import json
#import tempfilehttp://stackoverflow.com/editing-help
# first install pandokia  ( pip install pandokia )
import pandokia.helpers.filecomp as filecomp

# string object
obj = """
{
  "status"      : "charging",
  "status_code" : 123
}
"""

objTwo = """
{
  "status"      : "chargingToo",
  "status_code" : 123
}
"""
# From a json back to a python string object
result = json.dumps(obj)
resultTwo = json.dumps(objTwo)

assert filecomp.diffjson( result, resultTwo )

请在导入Pandokia模块后阅读文档,运行help(filecomp)命令。

2
jsondiff Python包可以实现您想要的功能。
从API中拉取最新的JSON,然后使用jsondiff将其与上一个JSON进行比较。如果有更改,则以某种方式(例如电子邮件)进行提醒,并将新的JSON保存在旧的JSON上。根据需要重复检查API。
jsondiff易于使用,并将为您提供API输出中的更改,以便用于警报。
>>> from jsondiff import diff

>>> diff({'a': 1, 'b': 2}, {'b': 3, 'c': 4})
{'c': 4, 'b': 3, delete: ['a']}

>>> diff(['a', 'b', 'c'], ['a', 'b', 'c', 'd'])
{insert: [(3, 'd')]}

>>> diff(['a', 'b', 'c'], ['a', 'c'])
{delete: [1]}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接