2017-09-14 4 views
0

Ich frage mich nur, ob jemand wusste, was ich hier falsch mache?Daten von JSON erhalten

Ich versuche, Daten von einer API für Bitcoin über PHP zu bekommen. Ich bekomme jedoch keine Ergebnisse von meiner PHP-Seite.

$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"]; 

Allerdings bekomme ich nichts zeigen auf der PHP-Seite. Wenn ich den folgenden Code verwende, funktioniert es und gibt die gesamte Information aus. Aber ich würde es vorziehen, die Informationen getrennt zu erhalten, anstatt eines großen Mülls.

$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)); 

Wer hat irgendwelche Ideen, warum der erste Codeblock nicht funktioniert? Vielen Dank! Sehr neue API und Json

+0

Können Sie den var dump hier posten? – Andreas

+0

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

+0

Haben Sie versucht, die' echo "ID zu verwenden:". $ json_data [0] ["id"]; '? – ravisachaniya

Antwort

1

Mit cURL ist viel besser

Aktualisiert Code (muss Fehlerprüfung)

$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

Scheint nichts zurück zu geben. Irgendwelche Ideen warum? – timbats1993

+0

Versuchen Sie den aktualisierten Code - er scheint verschachtelte Arrays zurückzugeben – GeorgeQ

+0

Perfekt! Vielen herzlichen Dank – timbats1993

0

ich das Ergebnis gedruckt haben, wird es produzieren Ausgabe folgende

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 
     ) 

) 

so können Sie foreach-Schleife verwenden, wenn Ihr api mehrere enthalten

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

} 

vollständige Code

<?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

Scheint, keine Antwort/leere Seite zu bekommen. Irgendwelche Ideen warum? Vielen Dank! – timbats1993

+0

hoffe, Sie können Daten mit var_dump drucken, und es wird Daten anzuzeigen. Ich denke, Sie können meinen Code einmal verwenden und testen – iCoders

0

Die Einstellung, die Sie für suchen allow_url_fopen ist.

Sie haben zwei Möglichkeiten, um es zu umgehen, ohne php.ini zu ändern, eine davon ist die Verwendung von fsockopen(), und die andere ist die Verwendung von cURL.

Ich empfehle sowieso cURL über file_get_contents(), da es dafür gebaut wurde.