PHP [JSON API] Auslesen und Suchanfrrage eines API-Objekts

Alex-88

Newbie
Registriert
Mai 2017
Beiträge
6
Hallo,

ich habe ein API Objekt der so aussieht:

Code:
[
    {
        "id": "bitcoin", 
        "name": "Bitcoin", 
        "symbol": "BTC", 
        "rank": "1", 
        "price_usd": "2433.16", 
        "price_btc": "1.0", 
        "24h_volume_usd": "1554460000.0", 
        "market_cap_usd": "39778698747.0", 
        "available_supply": "16348575.0", 
        "total_supply": "16348575.0", 
        "percent_change_1h": "1.35", 
        "percent_change_24h": "7.94", 
        "percent_change_7d": "33.15", 
        "last_updated": "1495626860"
    }, 
    {
        "id": "ethereum", 
        "name": "Ethereum", 
        "symbol": "ETH", 
        "rank": "2", 
        "price_usd": "211.425", 
        "price_btc": "0.0892244", 
        "24h_volume_usd": "681576000.0", 
        "market_cap_usd": "19426316405.0", 
        "available_supply": "91882778.0", 
        "total_supply": "91882778.0", 
        "percent_change_1h": "4.63", 
        "percent_change_24h": "20.88", 
        "percent_change_7d": "133.92", 
        "last_updated": "1495626863"
    }, 
    {
        "id": "ripple", 
        "name": "Ripple", 
        "symbol": "XRP", 
        "rank": "3", 
        "price_usd": "0.344936", 
        "price_btc": "0.00014557", 
        "24h_volume_usd": "212675000.0", 
        "market_cap_usd": "13291259579.0", 
        "available_supply": "38532538149.0", 
        "total_supply": "99994742943.0", 
        "percent_change_1h": "-1.9", 
        "percent_change_24h": "9.59", 
        "percent_change_7d": "-8.28", 
        "last_updated": "1495626842"
    }
]

wie kann ich weitere Suchkriterien im folgendem Code einbauen, dass nur die "ID"s angezeigt werden, bei denen "percent_change_24h" über oder unter 20 ist?

PHP:
$url = 'https://api.coinmarketcap.com/v1/ticker/?limit=30'; 
$data = file_get_contents($url); 
$basics = json_decode($data, true); 

   foreach ($basics as $basic) {
	echo $basic['name'] . '<br>';
        echo $basic['percent_change_24h'] . '<br><br>';
   }

Danke im Voraus :)
 
einfach die richtigen rausfiltern.. oder was meinst du?
PHP:
$basics = json_decode($data, true);

$lower = array_filter($basics, function ($item) {
    return $item['percent_change_24h'] < 20;
});

$upper = array_filter($basics, function ($item) {
    return $item['percent_change_24h'] > 20;
});
 
ja genau. Deine Lösung funktioniert leider nicht:

Code:
Parse error: syntax error, unexpected T_VARIABLE in .../test.php on line 9

das wäre die Zeile:

$lower = array_filter($basics, function ($item) {
 
poste mal deinen gesammten quellcode.. hab gerade folgendes ausprobiert
PHP:
<?php

$basics = [
    ['percent_change_24h' => 12],
    ['percent_change_24h' => 22],
];

$lower = array_filter($basics, function ($item) {
    return $item['percent_change_24h'] < 20;
});

$upper = array_filter($basics, function ($item) {
    return $item['percent_change_24h'] > 20;
});

foreach ($lower as $item) {
    print_r($item);
}

foreach ($upper as $item) {
    print_r($item);
}
und es macht was es soll.. keine syntaxfehler.. kann mir nur vorstellen dass bei der zeile davor das semikolon am ende fehlt oder so..

benutze bitte einen editor oder eine ide.. die dir sowas zur laufzeit auch anzeigt
 
Zuletzt bearbeitet von einem Moderator:
Code:
<?php

$url = 'https://api.coinmarketcap.com/v1/ticker/?limit=30'; 
$data = file_get_contents($url);  

$basics = json_decode($data, true);
 
 
$lower = array_filter($basics, function ($item) {
    return $item['percent_change_24h'] < 20;
});
 
$upper = array_filter($basics, function ($item) {
    return $item['percent_change_24h'] > 20;
});
 
foreach ($lower as $item) {
    print_r($item);
}
 
foreach ($upper as $item) {
    print_r($item);
}


?>

das mache ich, ich benutze Visual Studio Code. Genau die gleiche Fehlermeldung bei der Zeile:
Code:
$lower = array_filter($basics, function ($item) {
 
Zuletzt bearbeitet:
Bildschirmfoto von »2017-05-24 16-34-41«.png
der quellcode ist richtig.. könnte höchstens zu einem fehler kommen in dem fall wenn du eine php version kliner als 5.3 nutzt.. da ist ein update angesagt

edit: kannst auch statt der closure einfache functions nutzen sollte dann selbst mit php4 oder so funktionieren
PHP:
<?php

$url = 'https://api.coinmarketcap.com/v1/ticker/?limit=30';
$data = file_get_contents($url);

$basics = json_decode($data, true);

function lower($item)
{
    return $item['percent_change_24h'] < 20;
}

function upper($item)
{
    return $item['percent_change_24h'] > 20;
}

$lower = array_filter($basics, 'lower');
 
$upper = array_filter($basics, 'upper');

?>

<p>lower</p>
<pre>
<?php print_r($lower) ?>
</pre>

<p>upper</p>
<pre>
<?php print_r($upper) ?>
</pre>

würde dir trotzdem empfehlen deine php version upzudaten
 
Zuletzt bearbeitet von einem Moderator:
komisch!! es liegt irgendwie an meinem Server (domainfactory). Der alte Code funktioniert auch nicht mehr!
auf dem Server Läuft die PHP-Version 5.6.28
 
könntest auch noch ganz klassisch per foreach versuchen
PHP:
$lower = [];
foreach ($basics as $item) {
    if ($item['percent_change_24h'] < 20) {
        $lower[] = $item;
    }
}

usw.
 
Ich habe die PHP-Datei jetzt auf einem anderen Webserver! und sehe die gleiche Fehlermeldung!!

Code:
Parse error: syntax error, unexpected '$url' (T_VARIABLE) in /users/compytyec/www/index.php on line 3

das wäre komischerweise diese Zeile:

$url = 'https://api.coinmarketcap.com/v1/ticker/?limit=30';
 
@alex hast du den Code von kling1 so wie erst aus dem Forum kopiert und in eine neue Datei eingefuegt?
Kann es vielleicht am UTF-8 BOM liegen? Direkt in der ersten Zeile abzuschmieren ist echt merkwuerdig...

@kling1 sehr huebscher Desktop!
 
@r15ch13: super Tipp danke, Filezilla war schuld daran.

@Kling1: danke nochmal für die schnelle Hilfe, es funktioniert super :)
 
Zurück
Oben