我正在尝试使用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'}
目前没有回答
相关问题 更多 >
编程相关推荐