问题描述
我正在尝试从有关组件设置的 API 数据中读取数据。基本上与 API 的通信有效。但是,我注意到并非我期望的所有值都已加载。
列表中应该有 52 个组件 (https://lignumdata.ch/?page=bauteil&bauteilgruppe=decke),但我只得到 13 个。
API = https://lignumdata.ch/api/
我做错了什么?我不知所措....谁能进一步帮助我? :)
import json
import urllib.request
import urllib.parse
import urllib
def main():
URL = 'https://lignumdata.ch/api/v1.cfc?method=getBauteil&compatMode=true&condition={"type":"decke","bauteiltyp":["Rippen","Balken"]}'
request_url = URL.replace(" ","")
print('url',request_url)
response = urllib.request.urlopen(request_url)
data = json.loads(response.read())
#print('url',data[0])
for output_loads in data:
print(output_loads['laufnummer'])
return
if __name__ == '__main__':
main()
谢谢!
解决方法
结果是分页的。您需要选择具有 page={pagenum} 的特定页面。但是,您提供的 API 提到了这一点:If authenticated,the getBauteilIndex route now accepts page=all to turn off pagination
。
我不知道是否可以为您使用的方法关闭分页,但即使可以,您也需要进行身份验证。
编辑:
根据评论,以下是发送经过身份验证的请求的方法:
import request
import base64
url = "http://example.com"
username = "user"
password = "password"
authstr = username + ':' + password
asciistr = authstr.encode('ascii')
b64str = base64.b64encode(asciistr).decode()
headers = {
'Authorization': "Basic " + b64str
}
querystring = {"param1": "value","param2": "value"}
response = requests.request("GET",url,headers=headers,params=querystring)
print(response.text)