-1

我正在尝试创建一个从流行的加密货币生成实时数据的小部件。我需要的是硬币中 10 个最大赢家和 10 个最大输家在 24 小时内的符号、名称、价格和百分比变化。

我正在使用 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']

它正在产生一个空白页。这是我第一次编写这样的代码,所以欢迎任何想法、反馈等!

4

2 回答 2

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 分别返回TRUEFALSENULLNULL如果无法解码 json 或编码的数据比递归限制深,则返回。

    […]

    如果解码失败,可​​以使用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. 等等。

于 2018-08-03T17:35:17.830 回答
0

我在您的代码中注意到的几件事:-

1)在最后一行“echo $dataForSingleCoin['symbol']”中,您缺少分号,即;
2) json_decode 函数返回一个 JSON 对象的 stdClass 对象,而不是一个数组,但是您正试图将它作为一个数组来访问,例如在 $result['data'] 中,它应该是 $result->data。如果您希望 json_decode 函数也为 JSON 对象返回一个 PHP 数组,那么请将 json_decode 函数中的第二个参数添加为 true,那么它也会为 JSON 对象返回一个 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'];

于 2018-08-03T17:38:33.833 回答