在下面定义的用于检索最后24小时数据的API调用中,正常的请求网址为:
https://api.foobar.com/data
这就是为什么我将next_page
参数默认设置为NULL的原因。
但是,有时API会在json的末尾返回一个唯一的URL(例如https://api.foobar.com/data?page%237hfaj39),这表明存在另一个页面,并且需要进行另一个get_data
请求来检索剩余的页面
在这种情况下,{next_page}
参数将设置为返回的唯一网址。
我的问题是添加了{next_page}
参数后,默认的get_data
网址以某种方式获得了4个不需要的字符-附加了%7B%7D
使得请求看起来像
https://api.foobar.com/data%7B%7D,并且API当然不会响应。
在UTF-8编码%7B%7D中,有两个括号{}
为什么会发生这种情况?在格式化方面我在做什么错?使用None
代替{}
也不起作用。
代码:
def make_request(url, params={}, headers={}):
r = requests.get(url, params=params, headers=headers)
print r.url
if(not r.status_code is 200):
print "Error access API" + r.text
exit()
return r.json()
def get_data(access_token, next_page={}):
end_time = int(round(time.time() * 1000))
start_time = end_time - (seconds_in_day * 1000)
headers = {'Authorization': 'Bearer ' + access_token, 'start_time': str(start_time), 'end_time': str(end_time)}
url = 'https://api.foobar.com/data{next_page}'.format(next_page=next_page)
return make_request(url, headers=headers)
注意:删除next_page
参数后,API调用才起作用
答案 0 :(得分:1)
使用next_page={}
,您将获得意外的格式化结果。如果您尝试以下操作:
>>> '{}'.format({})
'{}'
如您所见,您得到的是带有两个方括号的字符串,而不是所需的''
。这是因为:
>>> str({})
'{}'
None
也发生了类似的事情:
>>> '{}'.format(None)
'None'
>>> str(None)
'None'
要解决此问题,请尝试使用next_page={}
而不是next_page=''
,因为.format()
会这样做:
>>> '{}'.format('')
''