Как мне создать CSV-файл, который имитирует формат необходимой строки JSON, чтобы сделать запрос API POST? - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь проверить около 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 ':' Внутренняя ошибка сервера '}

...