从JSON获取数据

时间:2017-09-14 03:30:54

标签: php json api

只是想知道是否有人知道我在做错了什么?

我试图通过php从比特币的API获取数据。但是,我的php页面没有得到任何结果。

$url = "https://api.coinmarketcap.com/v1/ticker/bitcoin/?convert=EUR";
    $json = file_get_contents($url);
    $json_data = json_decode($json, true);
    echo "ID: ". $json_data["id"];

但是我在php页面上什么都没显示。如果我使用下面的代码,它会工作并转储整个信息。但是,我更愿意单独获取信息,而不是一个大转储。

$url = "https://api.coinmarketcap.com/v1/ticker/bitcoin/?convert=EUR";

$ch = curl_init();
// Disable SSL verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// Will return the response, if false it print the response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Set the url
curl_setopt($ch, CURLOPT_URL,$url);
// Execute
$result=curl_exec($ch);
// Closing
curl_close($ch);

var_dump(json_decode($result, true));

任何人都有任何想法为什么第一个代码块不起作用?谢谢! API和Json的新手

3 个答案:

答案 0 :(得分:1)

使用cURL要好得多

更新的代码(需要错误检查)

$url = "https://api.coinmarketcap.com/v1/ticker/bitcoin/?convert=EUR";

$ch = curl_init();
// Disable SSL verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// Will return the response, if false it print the response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Set the url
curl_setopt($ch, CURLOPT_URL,$url);
// Execute
$result=curl_exec($ch);
// Closing
curl_close($ch);

$json_data = json_decode($result, true);

foreach ($json_data as $item)
    echo "ID: ". $item["id"];

答案 1 :(得分:0)

我已经打印了它将在输出后产生的结果

echo "<pre>";
print_r(json_decode($result, true));


Array
(
    [0] => Array
        (
            [id] => bitcoin
            [name] => Bitcoin
            [symbol] => BTC
            [rank] => 1
            [price_usd] => 3821.37
            [price_btc] => 1.0
            [24h_volume_usd] => 2089880000.0
            [market_cap_usd] => 63298556016.0
            [available_supply] => 16564362.0
            [total_supply] => 16564362.0
            [percent_change_1h] => -1.72
            [percent_change_24h] => -4.57
            [percent_change_7d] => -15.76
            [last_updated] => 1505359771
            [price_eur] => 3214.536444
            [24h_volume_eur] => 1758007056.0
            [market_cap_eur] => 53246745321.0
        )

)

所以你可以使用foreach循环,如果你的api包含多个

$data=json_decode($result, true);
foreach($data as $key=>$val){
echo $val->id;

}

完整代码

    <?php
    $url = "https://api.coinmarketcap.com/v1/ticker/bitcoin/?convert=EUR";

    $ch = curl_init();
    // Disable SSL verification
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    // Will return the response, if false it print the response
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // Set the url
    curl_setopt($ch, CURLOPT_URL,$url);
    // Execute
    $result=curl_exec($ch);
    // Closing
    curl_close($ch);
    $data=json_decode($result, true));

foreach($data as $key=>$val){
echo $val->id;

}

答案 2 :(得分:0)

您正在寻找的设置是allow_url_fopen。

你有两种方法可以绕过它而不用改变php.ini,其中一种是使用fsockopen(),另一种是使用cURL。

我建议使用cURL而不是file_get_contents(),因为它是为此而构建的。