【问题标题】:Every second web service call [closed]每隔一秒的网络服务调用[关闭]
【发布时间】:2018-06-13 15:40:54
【问题描述】:

我需要编写一个简短的脚本,每秒可以使用一次 REST 调用。大多数情况下,它会得到以下响应:

"status": "idle"

但是,如果发生了什么事,我们将获得“status”:“scan”,并带有一些额外的参数。

我们使用这些参数,然后对云服务进行不同的调用。

然后我们会得到响应,并将 JSON 发送回本地 Web 服务。

一旦完成,它应该每秒检查一次除了空闲之外的状态。

  1. Python 是一种很好的语言,还是应该使用 Java?
  2. 每秒的呼叫都是通过 LAN 进行的,而不是延迟或互联网带宽。
  3. 如果它崩溃或出现异常,我们需要能够轻松重启。

任何关于此的指针将不胜感激。

返回的响应格式为:

[{'status': 'idle', 'log_updated_at': None, 'eprom_version': '03.21', 'data': {}, 'controller_type': 'single_ball', 'address': 1}]

我在将其理解为 json 时遇到了一些挑战,以便通过下面的逻辑访问状态元素。

【问题讨论】:

    标签: java python twisted


    【解决方案1】:
    import time
    import requests
    
    while True:
        try:
            r = requests.get(local_rest_url)
            json_data = r.json()
    
            if json_data.get('status') == 'idle':
                time.sleep(1)  # wait 1 second
                continue       # and try again
    
            r = requests.post(cloud_service_url, data=json_data)
            cloud_response = r.json()
    
            r = requests.post(local_rest_url, data=cloud_response)
        except Exception:
            pass  # any error, just ignore and restart the loop
    

    【讨论】:

    • 几乎可以工作... [jamie@MacBook-Pro-4 Documents]$ python egm.py [{u'status': u'idle' 不喜欢响应中的 unicode。抱歉这么简单,我的第一个 python 脚本......
    • 我不明白这个新问题。 Unicode 很好,每个人都喜欢 unicode。请编辑问题并添加更多信息
    • 'list' 对象没有属性 'get' 在响应中返回。从快速搜索来看,这是因为它把它看作一个列表? r = requests.get("192.168.1.48:8080/api") json_data = r.json() print json_data if json_data.get("status") == 'idle':
    • @JamieAbbott 那么您的回答不是您在问题中所说的{"status": "idle"} 映射 - 您得到的是一个列表。您必须修复代码以处理您从服务中获取的数据。
    • 感谢@noskio - 问题是在 OSX 上运行 Python 2.7,而不是正确处理 unicode 的 3。感谢您的帮助。
    猜你喜欢
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多