Diskuze: JSON vrací NULL
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 20 zpráv z 20.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
$curl_jason = var_dump(json_decode($curl_response, true));
var_dump($curl_jason); // vrátí null
Pouzivas tam 2x var_dump ... kazdopadne, proc takovou trivialnost resis pomoci cURL ? to je dle me trosku overkill
Co treba neco na tento zpusob ?
$json = json_decode(file_get_contents($service_url));
var_dump($json);
var_dump() jsem z toho zapoměl odmazat každopádně to pořád nejde a pomocí cURL je to proto že pomocí file_get_contents() to nešlo také tak jsem zkusil jinou možnost
dneska ráno jsem si všimul že to někdy vytáhne a někdy ne takže kód bude asi dobrej
Pokud to "nekdy vytahne a nekdy ne", tak ta API si zrejme jiz pamatuje vysledky, ktere ti predala a pokud nejsou zadne nove ... tak jednoduse nevrati nic vetsina API tak funguje, sice ne automaticky ale ve stylu, ze ji das nejaky timestamp a ona taha data novejsi nez ten timestamp
Bránit se proti tomu dá.
Zeptáš se API
Předá ti JSON: Ten uložíš do souboru / tak že si
výsledek přecachuje /
Nepředá ti JSON: Načteš cache a budeš s ním pracovat
napadlo mě udělat si v pythonu script ...
python -> zeptá se API -> uloží do souboru na disk -> PHP vytáhne soubor uloží si json do pole a vypíše
bude to takto fungovat?
nebo jak bych si měl načíst cache?
Ahoj, co přidal k tomu tohle?
curl_setopt($curl1, CURLOPT_FRESH_CONNECT, true);
zkusil jsem, ale nic pořád mě to vrací NULL posílám celej script
<?php
$service_url = "http://api.steampowered.com/IPlayerService/GetRecentlyPlayedGames/v0001/?key=A8206F692A738A5BC96EA33D36502F6F&steamid=76561198162222572";
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
curl_setopt($curl, CURLOPT_URL, $service_url);
curl_setopt($curl, CURLOPT_POST, false);
curl_setopt($curl1, CURLOPT_FRESH_CONNECT, true);
$curl_response = curl_exec($curl);
curl_close($curl);
$curl_jason = json_decode($curl_response);
var_dump($curl_jason);
jde o to že když si to otevřeš v browseru tak ti ukáže vše potřebné, ale v PHP vrací NULL tak to nechápu
právě jsem párkrát refrešnul stránku aniž bych dopsal cokoliv do kódu a vrací to už normálně, tak to nechápu opravdu
možná tu bude tím že jsem tady měl jedničku
curl_setopt($curl1, CURLOPT_FRESH_CONNECT, true);
curl_setopt($curl, CURLOPT_FRESH_CONNECT, true);
uvidím jak to bude fungovat teď
snažím se spojit API Faceitu(faceit.com) a Steamu dělám takový web kde si lidi můžou sbírat staty
Proč python, když to jde řešit vše pomocí PHP? Zbytečně jdeš na mouchu slonem.
asi máš pravdu stáhnu JSON vložím do DB a pokud bude vracet NULL tak vytáhnu z DB
Pokud zrovna potřebuješ JSON ukládat do databáze, tak to udělej. Já bych na to šel spíše přes soubor.
Uložím si soubor a pomocí file_get_content + json_decode bych s ním pak pracoval. Je to rychlejší než pracovat s databází. Ale to jen za předpokladu že nepotřebuješ nějaké složitější filtrování.
Když to pak budeš chtít testnout, napiš. Hraju jak csgo tak faceit
jsem tu zpět a posílám kus kodu který mě na lokálu vrátí normálně ale na webhostingu prostě nefunguje viz
public function getApiData($username){
$faceitApiUrl = 'https://api.faceit.com/api/nicknames/'. $username;
$result = file_get_contents($faceitApiUrl);
$faceitData = json_decode($result, true);
$steamApiUrl = 'https://api.steampowered.com/IPlayerService/GetRecentlyPlayedGames/v0001/?key='.self::APP_STEAM_API_KEY.'&steamid='. $faceitData['payload']['steam_id_64'] . '/r=' . mt_rand(0, 9999);
$resultSteam = file_get_contents($steamApiUrl);
$steamData = json_decode($resultSteam, true);
if($steamData['response']['games']){
foreach($steamData['response']['games'] as $var){
if($var['appid'] == '730'){ // 730 = CSGO
$temp1 = $var['playtime_forever'];
$totalHours = number_format( $temp1 / 60 );
$temp2 = $var['playtime_2weeks'];
$past2Weeks = number_format( $temp2 / 60 );
}
}
}else{
$totalHours = 'UNKNOWN';
$past2Weeks = 'UNKNOWN';
}
$array = array(
'nickname' => $faceitData['payload']['nickname'], // FACEIT USERNAME
'steamid64' => $faceitData['payload']['steam_id_64'], // STEAM ID 64
'country' => $faceitData['payload']['country'], // FACEIT COUNTRY
'steamid' => $faceitData['payload']['platforms']['steam'], // STEAM ID
'level' => $faceitData['payload']['games']['csgo']['skill_level'], // FACEIT LEVEL
'elo' => $faceitData['payload']['games']['csgo']['faceit_elo'], // FACEIT ELO
'membership' => $faceitData['payload']['membership']['type'], // FACEIT MEMBERSHIP
'avatar' => $faceitData['payload']['avatar'], // FACEIT AVATAR
'csgo_total' => $totalHours, // STEAM CSGO HOURS
'csgo_past2weeks' => $past2Weeks, // STEAM CSGO HOURS PAST 2 WEEKS
);
return $array;
}
// na lokálu mě steam API vrátí v pořádku ale na serveru mě vrátí NULL kod je uplně totožný
// na konec proměné do URL $steamApiUrl jsem přidal generovat náhodný číslo abych to nezkoušelo cachovat nebo tak něco
// vypadá to že problém bude někde hluboko v php.ini?
Zobrazeno 20 zpráv z 20.