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'];
为了帮助调试这些情况,当你在 html 中print_r()
一个数组时
最好先回显<pre>
标签:
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 加密货币交易者:php 到 Java 的转换