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

Python 简化流式request.get和JSON响应解码,python,json,python-3.x,python-requests,getjson,Python,Json,Python 3.x,Python Requests,Getjson,我一直在编写一些代码,从一个名为PulsePoint的服务中获取紧急事件信息。它与计算机控制的调度中心内置的软件协同工作 这是一个应用程序,它授权公民英雄,这些英雄经过CPR训练,可以在第一个共鸣者到达现场之前提供帮助。我只是用它来处理其他紧急事件 我反向设计了那个应用程序,因为他们并没有关于如何提出您自己的请求的文档。正因为如此,我故意将其保留在api密钥和身份验证信息中,因为它在Android清单文件中以纯文本形式存在 我最终肯定会制作一个python模块来与这个服务接口,因为现在它太乱了

我一直在编写一些代码,从一个名为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"])

请求处理获取主体数据、检查json以及自动解析json,并且由于您提供了timeout arg,我认为您不需要单独的超时处理。Request还负责为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()

它为我提供了相同的输出。

这工作正常,与我的原始代码很接近,但是在我的农村连接上发生的情况是连接成功,但由于未知问题,它从未完成数据返回,只是被卡在那里不确定。请注意,有时会发生这种情况,但如果我在一段时间内运行它,则至少每天发生一次loopAh,在你的问题中,这将是有用的信息:在这种情况下,我建议看一下这个答案:这真的很容易,但是对我来说,这个问题的信号答案可能是一个更好的解决方案,因为它是Python中的标准答案。谢谢你派我去!