Как исправить неверный исходный аргумент при использовании JSON из API - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь получить финансовые данные из API polygon.io, чтобы организовать их, а затем внедрить в базу данных Azure. Для этого я использовал пакет python "petl", но у меня возникают проблемы, начинающиеся с таблицы примеров, из-за неверного аргумента источника, который, как я считаю, вызван тем, как я получаю и записываю результат JSON.

import petl as etl
import websocket
import json
import requests

r =requests.get("https://api.polygon.io/v1/historic/forex/AUD/USD/2018-2-2?limit=1&apiKey=*********") 
#gets data includes plenty of responses that arnt text
data = json.loads(r.text)

table1 = etl.fromjson(data, header=['day','map','msLatency','pair','status','ticks','type'])
print(table1)

Я ожидал, что таблица с заголовками столбцов будет перечислена с их значениями внизу, но вместо этого получил это сообщение об ошибке: "AssertionError: invalid source argument, expected None or a string or an object implementing open()"

При печати данных из API это выглядит так:

{'day': '2018-2-2', 'map': {'a': 'ask', 'b': 'bid', 't': 'timestamp'}, 'msLatency': 1, 'pair': 'AUD/USD', 'status': 'success', 'ticks': [{'b': 0.80392, 'a': 0.80392, 'x': 0, 't': 1517529600225}], 'type': 'forex'}

Я пытался преобразовать данные или использовать строку вызова API в качестве аргумента данных, но безуспешно

1 Ответ

0 голосов
/ 18 июня 2019

Вызов petl.fromjson ожидает строку (путь к локальному файлу) или None (stdin). Вы извлекли JSON (текст) из URL и преобразовали его в словарь Python. Поэтому вы должны думать о словарях, а не о формате JSON источника. Я вижу несколько возможных решений:

  • Не запускайте json.load, просто напишите ответ во временный файл, затем вызовите petl.fromjson для файла.
  • Не используйте petl.fromjson , поскольку ваши данные больше не являются JSON, используйте petl.fromdicts , который можно загружать из словарей. (На самом деле внутри кода petl.fromjson, по сути, вызывает json.load, а затем вызывает petl.fromdicts .
  • Если вы работаете с лотом данных, то вы можете заключить запрос в io Helper , чтобы он извлекал данные из URL при чтении и передаче другим функциям PETL .
...