为了发出API POST请求,如何构建一个模仿所需JSON字符串格式的csv文件?

2024-06-16 17:31:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用NameAPI验证大约1000个名字和姓氏。我有需要传递的JSON字符串,以便POST请求工作。我正在尝试构建一个csv,作为每个POST请求的输入

我已经尝试将整个csv转储到json中,但我相信格式可能已关闭,因为API返回了一个错误

这就是我尝试过的:

import csv
import json
import requests

url = (
    "http://rc50-api.nameapi.org/rest/v5.0/parser/personnameparser?"
    "apiKey=<api-key>"
)

f = open( 'file.csv', 'r' )  
reader = csv.DictReader( f, fieldnames = ( "GIVENNAME","SURNAME"))  
payload = json.dumps( [ row for row in reader ] )  

headers = {'Content-type': 'application/json'}

try:

    resp = requests.post(url, json=payload, headers=headers)
    resp_dict = resp.json()
    print(resp_dict)
except requests.exceptions.HTTPError as e:
    print("Bad HTTP status code:", e)
except requests.exceptions.RequestException as e:
    print("Network error:", e)

如果有效载荷是这样的,那么这就是工作原理:

payload = {
    "inputPerson": {
        "type": "NaturalInputPerson",
        "personName": {
            "nameFields": [
                {
                    "string": "Petra",
                    "fieldType": "GIVENNAME"
                }, {
                    "string": "Meyers",
                    "fieldType": "SURNAME"
                }
            ]
        },
        "gender": "UNKNOWN"
    }
}

这是csv的格式:

Petra   Meyers
Harry   Lawson

我希望输出如下:

{'matches': [{'parsedPerson': {'personType': 'NATURAL', 'personRole': 'PRIMARY', 'mailingPersonRoles': ['ADDRESSEE'], 'gender': {'gender': 'FEMALE', 'confidence': 0.914111763426832}, 'addressingGivenName': 'Petra', 'addressingSurname': 'Meyers', 'outputPersonName': {'terms': [{'string': 'Petra', 'termType': 'GIVENNAME'}, {'string': 'Meyers', 'termType': 'SURNAME'}]}}, 'parserDisputes': [], 'likeliness': 0.9727013301843768, 'confidence': 0.951388888888889}, {'parsedPerson': {'personType': 'NATURAL', 'personRole': 'PRIMARY', 'mailingPersonRoles': ['ADDRESSEE'], 'gender': {'gender': 'FEMALE', 'confidence': 1.0}, 'addressingGivenName': 'Petra', 'addressingSurname': 'Meyers', 'outputPersonName': {'terms': [{'string': 'Petra', 'termType': 'GIVENNAME'}, {'string': 'Meyers', 'termType': 'SURNAME'}]}}, 'parserDisputes': [], 'likeliness': 0.79056284979222, 'confidence': 0.8333333333333334}]}

这就是我得到的:

[{"GIVENNAME": "Petra", "SURNAME": "Meyers"}, {"GIVENNAME": "Harry", "SURNAME": "Lawson"}] {'faultCause': 'InternalServerError', 'blame': 'SERVER', 'message': 'Unexpected late exception translation, caused by: Can not instantiate value of type [simple type, class org.nameapi.ontology5.services.InputWithPerson] from String value (\'[{"GIVENNAME": "Petra", "SURNAME": "Meyers"}, {"GIVENNAME": "Harry", "SURNAME": "Lawson"}]\'); no single-String constructor/factory method\n at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@6942e592; line: 1, column: 1]', 'applicationErrorCode': '2100', 'httpStatusCode': 500, 'httpStatusMeaning': 'Internal Server Error'}


Tags: csvorgimportjsonstringtypesurnamegender