从API解码数据时,PHP代码产生空白

时间:2018-08-03 17:18:29

标签: php json curl cryptocurrency

我正在尝试创建一个小部件,该部件可以从流行的加密货币中生成实时数据。我需要的是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']

,它会产生一个空白页。这是我第一次编码这样的东西,因此欢迎任何想法,反馈等!

2 个答案:

答案 0 :(得分:0)

您根本不执行任何错误检查,并假设没有任何错误。出问题了。

您基本上需要查找PHP手册(如果不是内置的,则为产品文档)中使用的每个函数,并确定需要执行哪些操作来检测错误-或是否根本需要进行错误检查。

例如:

  1. curl_init()

      

    成功返回cURL句柄,错误返回 FALSE

    $ch = curl_init();
    if (!$ch) {
        // Error: abort and report
    }
    
  2. curl_setopt()

      

    成功返回TRUE,失败返回 FALSE

    if (!curl_setopt($ch, CURLOPT_URL, $API_KEY)) {
        // Error: abort and report
    }
    
  3. curl_exec()

      

    成功返回TRUE,失败返回FALSE。但是,如果设置了CURLOPT_RETURNTRANSFER选项,则成功返回结果,失败则返回 FALSE

    $server_output = curl_exec ($ch);
    if (!$server_output) {
        // Error: abort and report
    }
    
  4. json_decode()

      

    以适当的PHP类型返回json编码的值。值true,false和null分别返回为TRUEFALSENULL。如果无法解码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()
    }
    
  5. 等等。

答案 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'];