我正在尝试创建一个小部件,该部件可以从流行的加密货币中生成实时数据。我需要的是24小时内的符号,名称,价格和百分比变化,其中10个是最大的获胜者,而10个最大的是输钱者。
我正在使用coinmarketcap的API文档。
到目前为止,我的代码是
$API_KEY = "https://api.coinmarketcap.com/v2/ticker/?start=0&limit=100&sort=rank";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $API_KEY);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);
$result = json_decode($server_output);
$dataForAllDays = $result['data'];
$dataForSingleCoin = $dataForAllDays['1'];
echo $dataForSingleCoin['symbol']
,它会产生一个空白页。这是我第一次编码这样的东西,因此欢迎任何想法,反馈等!
答案 0 :(得分:0)
您根本不执行任何错误检查,并假设没有任何错误。出问题了。
您基本上需要查找PHP手册(如果不是内置的,则为产品文档)中使用的每个函数,并确定需要执行哪些操作来检测错误-或是否根本需要进行错误检查。
例如:
成功返回cURL句柄,错误返回
FALSE
。
$ch = curl_init();
if (!$ch) {
// Error: abort and report
}
成功返回
TRUE
,失败返回FALSE
。
if (!curl_setopt($ch, CURLOPT_URL, $API_KEY)) {
// Error: abort and report
}
成功返回
TRUE
,失败返回FALSE
。但是,如果设置了CURLOPT_RETURNTRANSFER
选项,则成功返回结果,失败则返回FALSE
。
$server_output = curl_exec ($ch);
if (!$server_output) {
// Error: abort and report
}
以适当的PHP类型返回json编码的值。值true,false和null分别返回为
TRUE
,FALSE
和NULL
。如果无法解码json或编码数据的深度超过递归限制,则返回NULL
。[…]
在解码失败的情况下,json_last_error()可用于确定错误的确切性质。
$result = json_decode($server_output);
if (is_null($result)) {
// Error: abort and report, possibly calling json_last_error() or json_last_error_msg()
}
等等。
答案 1 :(得分:0)
我在您的代码中注意到的几件事:-
1)在最后一行“ echo $ dataForSingleCoin ['symbol']”中,您缺少分号,即;
2)json_decode函数为JSON对象而不是数组返回stdClass对象,但是您尝试将其作为数组访问,例如在$ result ['data']中,应为$ result-> data。如果您想让json_decode函数也为JSON对象返回一个PHP数组,那么请在json_decode函数中添加第二个参数为true,然后它也将为JSON Object返回一个与PHP相关的数组。供参考请查看http://php.net/manual/en/function.json-decode.php
3)下面的代码将为您提供一些输出,然后您可以从那里获取它:-
$API_KEY = "https://api.coinmarketcap.com/v2/ticker/?start=0&limit=100&sort=rank";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $API_KEY);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);
$result = json_decode($server_output, true);
$dataForAllDays = $result['data'];
$dataForSingleCoin = $dataForAllDays['1'];
echo $dataForSingleCoin['symbol'];