2017-09-14 172 views
0

想知道是否有人知道我在這裏做錯了什麼?從JSON獲取數據

我想通過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

+0

你可以在這裏發佈var轉儲嗎? – Andreas

+0

array(1){[0] => array(17){[「id」] => string(7)「bitcoin」[「name」] => string(7)「Bitcoin」[「symbol」] = > string(3)「BTC」[「rank」] => string(1)「1」[「price_usd」] => string(7)「3827.53」[「price_btc」] => string(3) [「24h_volume_usd」] => string(12)「2068260000.0」[「market_cap_usd」] => string(13)「63400783862.0」[「available_supply」] => string(10)「16564412.0」[「total_supply」] => string (10)「16564412.0」[「percent_change_1h」] => string(5)「-1.23」[「percent_change_24h」] => string(5)「-4.26」[「percent_change_7d」] => string(6)「-15.62 「[」last_updated「] => string(10)」1505360670「[」price_eur「] => – timbats1993

+0

您是否嘗試過使用'echo」ID:「。 $ json_data [0] [ 「身份證」];'? – ravisachaniya

回答

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"]; 
+0

似乎還沒有返回。任何想法爲什麼? – timbats1993

+0

嘗試更新代碼 - 它似乎返回嵌套數組 – GeorgeQ

+0

完美!非常感謝你 – timbats1993

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; 

} 
+0

似乎沒有迴應/空白頁面。任何想法爲什麼?謝謝! – timbats1993

+0

希望你能夠使用var_dump打印數據,它會顯示data.i認爲你可以使用我的代碼一次並測試它 – iCoders

0

設置你所追求的是allow_url_fopen選項。

你有兩種方法可以避免改變php.ini,其中一個是使用fsockopen(),另一個是使用cURL。

無論如何,我推薦使用cURL over file_get_contents(),因爲它是爲此而構建的。