Jak wyświetlić tylko część a nie całość

Jak wyświetlić tylko część a nie całość
asdf42
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 136
0
hapertown napisał(a):

Ok, to idźmy od początku:

Odpalasz taki kod:

Kopiuj
$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri="strona";
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);

W odpowiedzi na Twoje żądanie curl otrzymujesz taki json:

Kopiuj
{"success":true,"message":"","result":[{"Name":"WWA","High":0.01001163,"Low":0.00928114,"SS":67732.95449843,"Last":0.00955998,"Volume":645.40161050,"Time":"2017-10-27T23:40:10.393","Now":0.00955998,"Now2":0.00956000,"Open":2477,"Orders":12637,"Prev":0.00939754,"Created":"2016-03-12T00:00:00"}]}

Zgadza sie.

Ten json obrabiasz funkcją json_decode co w rezultacie daje Ci coś takiego:
Obróbka:

Kopiuj
$obj = json_decode($execResult); 

Rezultat:

Kopiuj
stdClass Object
(
    [success] => 1
    [message] => 
    [result] => Array
        (
            [0] => stdClass Object
                (
                    [Name] => WWA
                    [High] => 0.01001163
                    [Low] => 0.00928114
                    [SS] => 67732.95449843
                    [Last] => 0.00955998
                    [Volume] => 645.4016105
                    [Time] => 2017-10-27T23:40:10.393
                    [Now] => 0.00955998
                    [Now2] => 0.00956
                    [Open] => 2477
                    [Orders] => 12637
                    [Prev] => 0.00939754
                    [Created] => 2016-03-12T00:00:00
                )

        )

)

Nie, cały czas otrzymuje to co wcześniej.

Jak widzisz, rezultat zwraca obiekt stdClass w którym jest tablica result zwracająca listę obiektów. Do każdego z tych rezultatów o polu Name możesz więc się dostać w następujący sposób:

Kopiuj
$obj->result[0]->Name // czyli obiekt o właściwości result, potem 1 pole z tego obiektu bo to tablica (daje nam obiekt) a następnie pole Name

Jeżeli wszystko jest tak jak opisałem i za każdym razem robisz wywołanie z curla (za każdym odświeżeniem strony np.) to nie ma siły, żebyś nie mógł dostać się do aktualnych rezultatów i ich pól w ten sposób.

Jeżeli dostajesz ostrzeżenie:

Kopiuj
Trying to get property of non-object in C:\xampp\htdocs\index.php on line 12

Dostaje to ostrzeżenie

to prawdopodobnie znaczy, że albo Twoja odpowiedź po zdekodowaniu nie jest obiektem albo że pierwszy element tablicy z result nie jest obiektem. A to możesz sam określić patrząc co zwraca Ci funkcja np. var_dump (jakie typy danych czym są)

Kopiuj

Jak mam wywołać tą funkcje bo jak wywołuje tak:

Kopiuj
echo var_dump(json_decode($execResult));

to otrzymuje

Kopiuj
int(1)

A jak wywołuje tak:

Kopiuj
$arJson = json_decode($execResult);
var_dump( $arJson[ 0 ] );

to otrzymuje:

Kopiuj
NULL

Jak ja mam to wywołać tą funkcje var_dump() żeby zobaczyć co zwraca?

HA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 335
0

Wywołaj

Kopiuj
var_dump(json_decode($execResult))

i pokaż co wyszło. Zobaczymy wtedy co wyrzuca curl

NB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 89
0
Kopiuj
echo var_dump 

???
Wystarczy samo

Kopiuj
var_dump(array/variable/cokolwiek);
asdf42
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 136
0
hapertown napisał(a):

Wywołaj

Kopiuj
var_dump(json_decode($execResult))

i pokaż co wyszło. Zobaczymy wtedy co wyrzuca curl

Po uruchomieniu tego kodu:

Kopiuj
<?php
 
$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri="strona";
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);
$obj = json_decode($execResult);
var_dump(json_decode($execResult));
 
?>

Otrzymuje:

Kopiuj
{"success":true,"message":"","result":[{"Name":"WWA","High":0.00962691,"Low":0.00942275,"SS":39385.44634675,"Last":0.00943404,"Volume":375.05724837,"Time":"2017-10-28T17:20:09.41","Now":0.00943405,"Now2":0.00946100,"Open":2490,"Orders":12889,"Prev":0.00954544,"Created":"2016-03-12T00:00:00"}]}int(1)

czyli na końcu doszło tylko init(1)

NB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 89
0

Według mnie to jest ciągle problem z json_decode. To co dostajesz do nie jest wynik json_decode (array) tylko json.

HA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 335
0

Ale to coś bez sensu - jak robisz var_dump(json_decode($execResult)) to powinieneś w odpowiedzi dostać całą strukturę z opisem tego jakie typy są zwracane a nie po prostu jsona.. coś tu jest bez sensu...

ajgoron
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
  • Postów: 91
0

Polecam sobie poczytać o debugowaniu, przykładowy artykuł, który nieco rozświetli sprawę. Widać, że raczej nie programujesz w php skoro nie wiesz jak używać var_dump'a.
Debugowanie w PHP

asdf42
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 136
0
hapertown napisał(a):

Ale to coś bez sensu - jak robisz var_dump(json_decode($execResult)) to powinieneś w odpowiedzi dostać całą strukturę z opisem tego jakie typy są zwracane a nie po prostu jsona.. coś tu jest bez sensu...

tylko co tu jest bez sensu? może o czymś zapomniałem? mam dodać jakieś biblioteki ? czy może coś w pliku ustawić ?

asdf42
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 136
0
n_bie napisał(a):

Według mnie to jest ciągle problem z json_decode. To co dostajesz do nie jest wynik json_decode (array) tylko json.

Tylko jak ten problem naprawić?

ajgoron
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
  • Postów: 91
0

Sprawa jest prostsza niż Ci się wydaje. Polecam jednak przeczytać artykuł z mojego postu lub jakiś inny o debugowaniu w php, a później przeanalizować kod, który masz u siebie (czegoś nam nie dajesz w przykładach, które wklejasz albo API, z którego ciągniesz daje błędne wyniki). Nie polegaj wyłącznie na kolegach z forum. Rusz głową - najwięcej z tego wyciągniesz. Koledzy już Cię naprowadzili czego szukać. Pozostało działać. ;)

asdf42
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 136
0

W takim razie dodaje cały kod wraz z api.
To api nie jest moje tylko jakieś z internetu, oczywiście jest już nie ważne i nie można się dostać do danych prywatnych na koncie, ale można do danych które są dostępne publicznie na stronie.

Kopiuj
$apikey='2923c158d5754c29a088c4adea5c6f34';
$apisecret='3f29b39ab1be46afb0834fe56c8e4fea';

$nonce=time();
$uri="https://bittrex.com/api/v1.1/public/getmarketsummary?market=btc-grs";   
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);
$obj = json_decode($execResult);

Spróbujcie wyświetlić jakiś pojedynczy obiekt w result. Jak wam się uda sposobem jaki był już sugerowany to ja mam coś skopane....

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
1
Kopiuj
<?php
        $apikey = '2923c158d5754c29a088c4adea5c6f34';
        $apisecret = '3f29b39ab1be46afb0834fe56c8e4fea';
        $nonce = time();
        $uri = "https://bittrex.com/api/v1.1/public/getmarketsummary?market=btc-grs";
        $sign = hash_hmac('sha512', $uri, $apisecret);
        $ch = curl_init($uri);
        //curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:' . $sign));
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
        $execResult = curl_exec($ch);
        $errmsg  = curl_error( $ch );
        //var_dump($errmsg);
        //var_dump($execResult);
        $obj = json_decode($execResult);
        //var_dump($obj);
        print_r($obj->result[0]->High);
        ?>

Przynajmniej u mnie kod który podałeś nigdy nie zwrócił Jsona w $execResult. Zawsze było Null bo nie było żadnej treści, ale oczywiście twierdziłeś, że dostajesz odpowiedź.
Dodałem Ci możliwość odkomentowania konkretnych danych takich jak błędy przy wykonaniu CURL, jak powinna wyglądać odpowiedź z CURLa, jak powinien wyglądać utworzony obiekt po zdekodowaniu jsona. Obejrzyj, wyciągnij wnioski. Na przyszłość pisz jasno co gdzie i jak otrzymujesz a nie wymyślasz :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.