简化流式request.get和JSON响应解码

时间:2018-01-25 03:16:33

标签: python json python-3.x python-requests getjson

我一直在研究一些代码,这些代码将从名为PulsePoint的服务中获取紧急事件信息。它适用于内置于计算机控制调度中心的软件。

这是一款应用程序,可以帮助公民英雄在CPR训练过程中帮助他们在第一个共鸣者到达现场之前提供帮助。我只是用它来搞其他紧急事件。

我在应用程序中进行了逆向工程,因为他们没有关于如何发出自己的请求的文档。因为这个我已经知道留在api密钥和身份验证信息,因为它在Android清单文件中是纯文本。

我肯定会最终创建一个python模块来连接这个服务,现在它只是凌乱。

无论如何,抱歉这个漫长的无聊介绍。

我真正的问题是,如何简化此功能,使其在查看定时请求并返回可以通过下标使用的json对象时看起来更清晰一些?

import requests, time, json
def getjsonobject(agency):
    startsecond = time.strftime("%S")
    url = REDACTED
    body = []
    currentagency = requests.get(url=url, verify=False, stream=True, auth=requests.auth.HTTPBasicAuth(REDACTED, REDCATED), timeout = 13)
    for chunk in currentagency.iter_content(1024):
        body.append(chunk)
        if(int(startsecond) + 5 < int(time.strftime("%S"))): #Shitty internet proof, with timeout above
            raise Exception("Server sent to much data")
    jsonstringforagency = str(b''.join(body))[2:][:-1] #Removes charecters that define the response body so that the next line doesnt error
    currentagencyjson = json.loads(jsonstringforagency) #Loads response as decodable JSON
    return currentagencyjson

currentincidents = getjsonobject("lafdw")
for inci in currentincidents["incidents"]["active"]:
    print(inci["FullDisplayAddress"])

1 个答案:

答案 0 :(得分:1)

请求处理获取正文数据,检查json,并自动解析json,并且由于你给出了timeout arg,我认为你不需要单独的超时处理。请求还处理构建get请求的URL,因此您可以将查询信息放入字典中,这样更好。结合这些更改并删除未使用的导入,可以实现以下目的:

import requests

params = dict(both=1,
              minimal=1,
              apikey=REDACTED)

url = REDACTED

def getjsonobject(agency):
    myParams = dict(params, agency=agency)
    return requests.get(url, verify=False, params=myParams, stream=True,
            auth=requests.auth.HTTPBasicAuth(REDACTED, REDACTED),
            timeout = 13).json()

为我提供相同的输出。