【问题标题】:API download with curl command for date ranges使用 curl 命令下载日期范围的 API
【发布时间】:2021-06-18 14:47:47
【问题描述】:

我正在尝试从 FINRA 下载空头股票,我只能下载特定日期,如下所示。 curl -L -d "{ "compareFilters": [ { "compareType": "EQUAL", "fieldName": "结算日期", **"fieldValue": " 2018-06-15"** } ] ,"limit" :5 } " -H "Content-Type: application/json" -H "Accept: application/json" -X POST https://api.finra.org/data/group/otcMarket/name/EquityShortInterest

但我正在尝试下载特定日期范围的数据,例如开始:2018-06-15,结束:2018-06-14。所以,我在字段值中尝试了以下代码。

卷曲 -L -d "{ "compareFilters": [ { "compareType": "EQUAL", "fieldName": "结算日期", "fieldValue": ">2018-06-01 00:00:00&&https://api.finra.org/data/group/otcMarket/name/EquityShortInterest

然后,我将其转换为 json 格式以在 python 中运行。 当我运行具有如下日期范围的 json 格式时;

jsonout = response.json() json输出

我收到了这个错误:

{'statusCode': 400, 'statusDescription': '错误请求', 'requestId': 'ab7af2fe-9189-4619-b0ca-ee368fb6e91d', 'message': '无法解析请求正文。'}

如果有人可以帮助我,我将不胜感激,因为我对 curl 或 json 不太熟悉,而且编码不是我的职业生涯,因为我来自会计。

这是我转换后的 json 格式。
导入请求

标题 = { '内容类型':'应用程序/json', '接受': '应用程序/json', }

数据 = { '{“compareFilters”:[{“compareType”:“EQUAL”,“fieldName”:“结算日期”,“fieldValue”:>2018-06-01 00:00:00':'', '

response = requests.post('https://api.finra.org/data/group/otcMarket/name/EquityShortInterest', headers=headers, data=data)

谢谢

【问题讨论】:

  • 这是我转换的 json 格式。导入请求标头 = { 'Content-Type': 'application/json', 'Accept': 'application/json', } data = { '{ "compareFilters": [ { "compareType": "EQUAL", "fieldName" :“结算日期”,“fieldValue”:“>2018-06-01 00:00:00':'','

标签: python json api curl


【解决方案1】:

你可以试试:

curl -L -d '{ "compareFilters": [ { "compareType": "EQUAL", "fieldName": " settlementDate", "fieldValue": "2018-09-14 00:00:00" } ] } ' -H "Content-Type: application/json" -H "Accept: application/json" -X POST https://api.finra.org/data/group/otcMarket/name/EquityShortInterest

如果您使用curl,建议您手动处理开始时间和结束时间。

【讨论】:

  • 谢谢。你能告诉我如何在 curl 中手动处理开始时间和结束时间吗?我只知道python,并且一直在网上对curl进行一些研究,但我的代码仍然没有改进。
【解决方案2】:

您需要正确格式化正文,数据必须是字典。这应该有效:

import requests
import json

headers = { 
        'Content-Type': 'application/json', 
       'Accept': 'application/json', 
       }

data = { "compareFilters": [ { "compareType": "EQUAL", "fieldName": " settlementDate", 
"fieldValue": "2018-09-14 00:00:00" } ] }

response = 
requests.post('https://api.finra.org/data/group/otcMarket/name/EquityShortInterest',
                     headers=headers,
                     data=json.dumps(data))
print(response.content)

【讨论】:

  • 非常感谢@Giovanni,但它仍然只适用于特定的一天。如果您能指导我如何在日期范围内执行此操作,将不胜感激(开始:2018-09-14 00:00:00 结束:2019-09-14 00:00:00)?
  • 根据doc,您应该将 dateRangeFilters 添加到消息的有效负载中,在其中插入日期和 fieldName(必须是日期类型,您可以通过转到这个api.finra.org/metadata/group/otcMarket/name/EquityShortInterest(注意元数据而不是数据));例如,您可以尝试使用“settlementDate”。
猜你喜欢
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2014-01-07
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 2021-12-29
相关资源
最近更新 更多