将 JSON 数据从 API 读取到 Python

问题描述

我正在尝试从有关组件设置的 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)