【问题标题】:How can I properly call this API with authentication? [Python/JSON]如何通过身份验证正确调用此 API? [Python/JSON]
【发布时间】:2018-01-01 14:47:16
【问题描述】:

我的 python 没问题,但在理解 API 方面我很糟糕,而且我真的坚持理解如何验证我对这个特定库的调用。我知道在收到 JSON 数据时如何处理它,但我什至无法正确访问 JSON,因为我无法验证对这个库的调用,并且除了实际文档之外没有任何内容在线编写。

我尝试使用 HTTPDigestAuth 和 OAuth1 和 2 无济于事。 这是文档: https://coinigy.docs.apiary.io/#reference/market-data/market-data

在文档的顶部,它说 REST URI 是 https://api.coinigy.com/api/v1/ 而且我一直在输入我的 api 密钥和密钥,但 json 返回失败的身份验证尝试,我知道这意味着我没有正确进行身份验证。我的尝试是:

import requests

url = 'https://api.coinigy.com/api/v1/'
payload = {'X-API-KEY': '', 'X-API-SECRET': ''}


r = requests.get(url, params=payload)
print(r.json())

这实际上需要什么类型的身份验证,以及如何使用 URL、密钥和密钥正确地对其进行身份验证?

【问题讨论】:

    标签: javascript python json


    【解决方案1】:

    我没有使用您的 API 的经验,但我确实注意到https://github.com/coinigy/api 有一个带有 python 示例的 github 存储库。 python_ws_example.py 最近更新了,看起来您可以轻松插入密钥。

    如果是我(并且您不在 Windows 上或将其设置为在 Windows 上使用 curl),我会首先尝试验证我的帐户凭据是否有效。最简单的方法是尝试https://github.com/coinigy/api/blob/master/curl_examples.sh 中显示的 curl 示例之一,因为执行 curl 命令非常简单。您不必费心整个 shell 脚本,只需提取一行,例如:

    curl -H "X-API-KEY:yourapikeyhere" -H "X-API-SECRET:yoursecrethere" -X POST "https://api.coinigy.com/api/v1/exchanges"
    

    编辑以获取更多信息:

    使用数据端点的示例 API 调用。您必须使用自己的有效密钥执行,因为我没有注册一个,但是即使没有有效密钥,请求响应也是 200 OK 和关于无效密钥的标准错误消息,所以它应该适合您。

    import requests
    api_url = 'https://api.coinigy.com/api/v1/data'
    headers = {
      'Content-Type': 'application/json',
      'X-API-KEY': '202a087985b7f55eed4cd8b79ae0b',
      'X-API-SECRET': '105e1c8f5eb63670920b90f2aee73'
    }
    params=  {
        "exchange_code": "GDAX",
        "exchange_market": "BTC/USD",
        "type": "history"
      }
    r = requests.get(url=api_url, headers=headers)
    print r.content
    

    此 sn-p 是使用 https://coinigy.docs.apiary.io/#reference/market-data/market-data/data-{type:history} 处的示例参数等信息作为参考组合而成的。它演示了 API 请求所需的 3 件事:(1) 标头中传递的身份验证信息,(2) 一个 restful 端点(上面的 api_url 值),它标识您可以在哪里找到您正在寻找的信息类型( 3) 一些参数可以准确地传达您想要从该端点获取的数据。

    听起来端点是一个有助于为您澄清的概念。通常,在这种情况下,restful api 将具有一个基本 url,例如 https://api.coinigy.com/api/v1。通过 API 公开的每种信息都有自己的端点,本质上您可以在其中输入参数以请求该信息。您可以在 API 文档的 REFERENCE 标题下的左侧菜单中浏览通过 Coinigy API 公开的所有类型的信息。例如“账户功能”和“市场数据”。

    当您点击市场数据或该 API 文档菜单上的任何其他主要类别时,您将看到受支持的特定 API 调用。在 Market Data 下,有一个 data{type:history} 条目,当您单击它时,您可以看到此类信息的端点 https://api.coinigy.com/api/v1/data 。事实上,这里的文档真的很棒,向您展示了如何使用参数等很多信息。 (那里确实有非常可怕的 API,幸运的是,这不是其中之一。)

    【讨论】:

    • 效果很好,卷曲。在这一点上,我只是想我可能只是将它卷曲到我桌面上的 JSON 文件并使用它。至于他们提供的示例,我现在尝试使用标头身份验证:import requests url = "https://api.coinigy.com/api/v1/data" headers = {'X-API-KEY': '202a087985b7f55eed4cd8b79ae0b', 'X-API-SECRET': '105e1c8f5eb63670920b90f2aee73'} r = requests.get(url, headers=headers) print(r.json()) 并收到错误:{'err_num': '1057-14-01', 'err_msg': 'Missing or empty parameters: '} 我将如何在 python 中做到这一点?
    • 忽略上面的评论:您的示例运行完美的原因似乎是因为它引用了“api.coinigy.com/api/v1/exchanges”而不是“api.coinigy.com/api/v1/data”。我想知道的是你怎么知道把它和数据放在一起,我怎么知道要访问哪些工作? API 说 /data 是有效的,但显然不是这样。
    • 您好,添加了有关 API 请求的不同组件的更多信息,并解释了 /exchanges 与 /data 之间的区别,因为它们是用于从服务请求不同信息的不同端点。我没有密钥,所以我无法测试我自己添加的 sn-p,但请告诉我它是如何进行的。
    • 非常感谢 M Doe,你是最棒的!完美运行。
    猜你喜欢
    • 1970-01-01
    • 2018-12-28
    • 2020-07-07
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2015-05-03
    • 2013-02-09
    • 2020-08-27
    相关资源
    最近更新 更多