Я пытаюсь проверить около 1000 имен и фамилий, используя NameAPI.У меня есть строка 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
Я ожидаю, что выводбыть таким:
{'совпадает': [{'parsedPerson': {'personType': 'NATURAL', 'personRole': 'PRIMARY', 'mailingPersonRoles': ['ADDRESSEE'], 'пол': {'пол': 'ЖЕНЩИНА', 'уверенность': 0.914111763426832}, 'addressingGivenName': 'Petra', 'addressingSurname': 'Meyers', 'outputPersonName': {'Terms': [{'string':' Petra ',' termType ':' GIVENNAME '}, {' string ':' Meyers ',' termType ':' SURNAME '}]}},' parserDisputes ': [],' likeliness ': 0.9727013301843768,'trust ': 0.951388888888889}, {' parsedPerson ': {' personType ':' NATURAL ',' personRole ':' PRIMARY ',' mailingPersonRoles ': [' ADDRESSEE '],' пол ': {' пол ':' ЖЕНЩИНА ', 'доверие': 1,0}, 'обращение к ГивенуИмя ':' Petra ',' addressingSurname ':' Meyers ',' outputPersonName ': {' rules ': [{' string ':' Petra ',' termType ':' GIVENNAME '}, {' string ':' Meyers',' termType ':' SURNAME '}]}},' parserDisputes ': [],' likeliness ': 0.79056284979222,' trust ': 0.8333333333333334}]}
Это яполучение:
[{"GIVENNAME": "Petra", "SURNAME": "Meyers"}, {"GIVENNAME": "Harry", "SURNAME": "Lawson"}] {'faultCause ':' InternalServerError ',' blame ':' SERVER ',' message ':' Неожиданный поздний перевод исключения, вызванный: Невозможно создать экземпляр значения типа [простой тип, класс org.nameapi.ontology5.services.InputWithPerson] изСтроковое значение (\ '[{"GIVENNAME": "Petra", "SURNAME": "Meyers"}, {"GIVENNAME": "Harry", "SURNAME": "Lawson"}] \');нет однострокового конструктора / фабричного метода \ n в [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@6942e592;строка: 1, столбец: 1] ',' applicationErrorCode ':' 2100 ',' httpStatusCode ': 500,' httpStatusMeaning ':' Внутренняя ошибка сервера '}