Bittrex 公共 API 混乱

Posted

技术标签:

【中文标题】Bittrex 公共 API 混乱【英文标题】:Bittrex Public API Confusion 【发布时间】:2018-01-23 10:18:52 【问题描述】:

我是这里的新手,如果我问了一个愚蠢的问题,我深表歉意。我正在尝试从 Bittrex 的公共 API 中提取数据,特别是“https://bittrex.com/api/v1.1/public/getmarkets”。

我已经成功地通过这样做从其他 API 获取数据,打印出前 20 个硬币:

$coinMarket = "https://api.coinmarketcap.com/v1/ticker/?limit=20";
$marketData = json_decode(file_get_contents($coinMarket), true);

for($i=0;$i<20;$i++)
    $coins = $marketData[$i]["symbol"];
    print_r($coins);
 

当我用上面列出的 Bittrex API 尝试同样的事情时,我只得到以下重复 20 次(偏移量每次增加 1):

注意:未定义的偏移量:0 in D:\XAMPP\htdocs\BittrexBot.php on line 37

我查看了两个 API 调用实际返回的内容,虽然非常相似,但 Bittrex 数据包含额外的初始信息,这可能是罪魁祸首(这只是检索到的第一枚硬币):

Bittrex:

Array ( 
    [success] => 1 [message] => [result] => Array 
        ( 
            [0] => Array ( [MarketName] => BITCNY-BTC [High] => 30998.99999966 [Low] => 27727.54234112 [Volume] => 4.32110365 [Last] => 28007.61852638 [BaseVolume] => 127223.448106 [TimeStamp] => 2017-08-15T12:03:57.393 [Bid] => 27450.26691772 [Ask] => 28290.52376401 [OpenBuyOrders] => 186 [OpenSellOrders] => 47 [PrevDay] => 28853.26999991 [Created] => 2015-12-11T06:31:40.653
        )

CoinMarketCap:

Array 
        ( 
            [0] => Array ( [id] => bitcoin [name] => Bitcoin [symbol] => BTC [rank] => 1 [price_usd] => 4129.24 [price_btc] => 1.0 [24h_volume_usd] => 2984050000.0 [market_cap_usd] => 68165233778.0 [available_supply] => 16507937.0 [total_supply] => 16507937.0 [percent_change_1h] => 0.32 [percent_change_24h] => -1.73 [percent_change_7d] => 20.58 [last_updated] => 1502800149 
        )

在从 Bittrex 返回的数据的开头额外的 Array ( [success] => 1 [message] => [result] => 是我的问题吗?还是与返回的数据,以及我如何处理它?

作为参考,我在访问 Bittrex API 时尝试使用的代码如下:

$coinMarket = "https://bittrex.com/api/v1.1/public/getmarketsummaries";
$marketData = json_decode(file_get_contents($coinMarket), true);

for($i=0;$i<20;$i++)
    $coins = $marketData[$i]["MarketName"];
    print_r($coins);

任何帮助或正确方向的观点将不胜感激!

谢谢。

【问题讨论】:

bittrex返回的数据不同,需要使用不同的key才能正确访问。 CoinmarketCaps 返回有关硬币的信息,而 BitTrex getmarketsummaries 返回有关交易对的信息。两者之间的差异可能很大,具体取决于您对数据的处理方式 【参考方案1】:

并不是返回数据的开头有什么,数组的 不要那样工作;但实际上它们是非常不同的,必须是 以不同的方式访问。

CoinMarketCap 中,数据是在你的第一个维度中给出的 大批。在 Bittrex 中,数据在 result 数组中给出,所以你 必须相应地访问它:

$coins = $marketData['result'][$i]['MarketName'];

为了帮助调试这些情况,当你在 htmlprint_r() 一个数组时 最好先回显&lt;pre&gt; 标签:

echo '<pre>';

# or

<pre>
<?php # php code

这将保留空白并使格式更具可读性。 那或var_dump() 将帮助您更好地可视化数组。例子 使用您的数据:

Array
(
    [success] => 1
    [message] => 
    [result] => Array
        (
            [0] => Array
                (
                    [MarketName] => BITCNY-BTC
                    [High] => 30998.99999966
                    [Low] => 27450.26691772
                    [Volume] => 4.11387066
                    [Last] => 28290.52376401
                    [BaseVolume] => 121183.63341716
                    [TimeStamp] => 2017-08-15T13:28:16.543
                    [Bid] => 27450.267
                    [Ask] => 28290.52376325
                    [OpenBuyOrders] => 186
                    [OpenSellOrders] => 47
                    [PrevDay] => 29041.02993787
                    [Created] => 2015-12-11T06:31:40.653
                )

            [1] => Array
                (
                    [MarketName] => BTC-1ST
                    [High] => 0.00019299
                    [Low] => 0.00015028
                    [Volume] => 680348.58729147
               ....................................
                )
        )
)

【讨论】:

这很有意义。但是,它似乎仍然无法正常工作,并且与以前的问题完全相同。另一个回复建议了一种确实有效的方法(我想我明白为什么),但我很想了解为什么您建议的方法不起作用。它只是不喜欢 $coins = $marketData[$i]['result']['MarketName'] @Mattaus 很抱歉,我犯了一个错误,写错了数组访问。我颠倒了迭代变量和result 数组的位置,这应该是第一位的。请检查更新的答案。关于您对另一个答案的评论,这种想法是正确的。【参考方案2】:

要访问响应中的数据,您可以查看如下内容:

$url='https://bittrex.com/api/v1.1/public/getmarkets';
$data=file_get_contents( $url );
$json=json_decode( $data );

$result=$json->result;
foreach( $result as $i => $obj )
    echo $obj->MarketName,'<br />';

【讨论】:

谢谢。我不确定为什么其他建议的方法不起作用,但这似乎确实有效。你能确认我对代码的理解是正确的吗? $json 是整个提取的数据。然后 $result 是从 $json 数据中提取的“结果”子数组(基本上剥离了外部数组)。在循环中,我们在这个“子数组”中逐步获取最低级别的数组并将其分配给 $obj。最后,我们呼应了该数据的“市场名称”部分。在我的例子中,我只是将市场名称分配给一个变量供以后使用。 简而言之-是的。

以上是关于Bittrex 公共 API 混乱的主要内容,如果未能解决你的问题,请参考以下文章

Bittrex API不返回所有值

Bittrex API 加密货币交易者:php 到 Java 的转换

在 VB.NET 中实现 bittrex API

Bittrex Api:条件填充、Fill-Or-Kill 等。

永远不要去B网(Bittrex.com)

BitTrex行情查看与技术指标系统