/api/stats
?fields=["clkCnt","impCnt"]
&ids=nkw0001,nkw0002,nkw0003,nkw0004
&timeRange={"since":"2019-05-25","until":"2019-06-17"}
我目前正在使用一个名为naver_searchad_api的API link to github of the api If you want to check it out. but i don't think you need to
最终网址应为baseurl + /api/stats
并在字段和ID和timeRange
上,URL应该像这样
我写的请求如下所示
r = requests.get(BASE_URL + uri, params={'ids': ['nkw0001','nkw0002','nkw0003','nkw0004'], 'timeRange': {"since": "2019-05-25", "until": "2019-06-17"}}, headers=get_header(method,uri,API_KEY,SECRET_KEY,CUSTOMER_ID))
final_result = r.json()
print(final_result)
就像我在下面所做的那样
print(r.url)
它返回如下
https://api.naver.com/stats?ids=nkw0001&ids=nkw0002&ids=nkw0002&ids=nkw0002&fields=clkCnt&fields=impCnt&timeRange=since&timeRange=until
“ id”重复出现,没有我输入的日期。
我如何使我的代码适合正确的网址?
答案 0 :(得分:1)
查询字符串是键值对。所有键和所有值都是字符串。不能轻易转换为字符串的任何内容都取决于约定。换句话说,对于这些东西没有标准,因此取决于API的期望。
例如,API可以将值列表定义为以逗号分隔的字符串形式给出,或者可以说任何复杂的事物都应使用JSON编码。
实际上,这正是API文档所说的:
fields string Fields to be retrieved (JSON format string). For example, ["impCnt","clkCnt","salesAmt","crto"]
timeRange
也是如此。其他值可以保留。因此,我们仅对这两个值进行JSON编码。
我们可以通过dict理解内联地完成该操作。
import json
import requests
params = {
'fields': ["clkCnt", "impCnt"],
'ids': 'nkw0001,nkw0002,nkw0003,nkw0004',
'timeRange': {"since":"2019-05-25","until":"2019-06-17"},
}
resp = requests.get('https://api.naver.com/api/stats', {
key: json.dumps(value) if key in ['fields', 'timeRange'] else value for key, value in params.items()
})
除了要符合API的期望之外,查询字符串中的所有键和值都需要进行URL编码。幸运的是,requests
模块负责这一部分,因此我们要做的就是将字典传递给requests.get
。