Autor | Zpráva | ||
---|---|---|---|
jenad Profil |
#1 · Zasláno: 12. 2. 2014, 09:17:38
Hezký den,
přes googlování se mi nedaří zjistit, jak v php "dekódovat" informace, jež získám přes rozhraní a api z jiné stránky. <?php $pokus = file_get_contents( "http://api.worldoftanks.eu/2.0/account/info/?application_id=d0a293dc77667c9328783d489c8cef73&account_id=506772143"); echo $pokus; ?> Do proměnné $pokus si naleju informace z uvedené stránky, ale potřeboval bych ji rozkouskovat dle jednotlivých polí a proměnných a to se mně nedaří. Můžete mně prosím pomoci a uvést vzor s kódy, kdy z uvedených dat vytvořím na svých www stránkách tabulku a jak třeba z uvedených dat vyselectuji hodnotu "nickname"? |
||
Medvídek Profil |
#2 · Zasláno: 12. 2. 2014, 09:27:13
jenad:
Data jsou v JSONu, zkus json_decode |
||
jenad Profil |
#3 · Zasláno: 12. 2. 2014, 11:23:39
Díky za tak rychlou reakci, ale budu asi potřebovat silněji nakopnout. Uvedenou stránku jsem už několikrát navštívil, a teď po Tvém upozornění jsem došel k přesnější definici mého problému.
Ze stránky se mně vrátí následující dat: {"status":"ok","count":1,"data":{"506772143":{"clan":{"role_i18n":"Deputy Commander","clan_id":500022349,"role":"vice_leader","since":1384793865},"achievements":{"tank_expert_uk":1,"medal_dumitru":2,"invader":53,"medal_lehvaslaiho":1,"warrior":217,"medal_halonen":8,"medal_pascucci":17,"medal_orlik":0,"medal_brothers_in_arms":15,"mousebane":1,"tank_expert_france":1,"mechanic_engineer_ussr":0,"medal_bruno_pietro":0,"medal_delanglade":1,"lucky_devil":9,"defender":19,"armor_piercer":1,"medal_kay":1,"supporter":176,"mechanic_engineer":0,"steelwall":143,"max_sniper_series":84,"medal_knispel":1,"medal_boelter":0,"medal_ekins":1,"medal_heroes_of_rassenay":0,"medal_tamada_yoshio":0,"tank_expert_usa":1,"mechanic_engineer_germany":0,"max_piercing_series":40,"tank_expert":0,"iron_man":52,"medal_radley_walters":6,"kamikaze":13,"tank_expert_germany":1,"beasthunter":8,"sniper":243,"medal_tarczay":0,"medal_lavrinenko":2,"mechanic_engineer_france":0,"medal_oskin":0,"medal_burda":0,"medal_billotte":0,"huntsman":1,"hand_of_death":1,"medal_fadin":2,"medal_lafayette_pool":0,"max_killing_series":9,"tank_expert_china":1,"mechanic_engineer_usa":0,"medal_kolobanov":0,"patton_valley":0,"bombardier":2,"medal_abrams":2,"max_invincible_series":5,"medal_poppel":1,"medal_crucial_contribution":1,"raider":2,"max_diehard_series":6,"mechanic_engineer_uk":0,"invincible":1,"lumberjack":0,"sturdy":66,"title_sniper":1,"sinai":9,"diehard":0,"medal_carius":1,"medal_le_clerc":1,"tank_expert_ussr":1,"evileye":93,"mechanic_engineer_china":0,"medal_nikolas":0,"scout":99},"statistics":{"clan":{"spotted":234,"hits":393,"battle_avg_xp":291,"draws":4,"wins":29,"losses":76,"capture_points":92,"battles":109,"damage_dealt":155960,"hits_percents":61,"damage_received":136171,"shots":642,"xp":31707,"frags":57,"survived_battles":30,"dropped_capture_points":81},"all":{"spotted":38552,"hits":96488,"battle_avg_xp":446,"draws":200,"wins":9674,"losses":8943,"capture_points":31382,"battles":18817,"damage_dealt":16137046,"hits_percents":58,"damage_received":15113298,"shots":165197,"xp":8391562,"frags":17819,"survived_battles":3295,"dropped_capture_points":8600},"company":{"spotted":104,"hits":180,"battle_avg_xp":359,"draws":0,"wins":35,"losses":43,"capture_points":116,"battles":78,"damage_dealt":59001,"hits_percents":55,"damage_received":54631,"shots":328,"xp":28011,"frags":45,"survived_battles":20,"dropped_capture_points":39},"max_xp":2553},"account_id":506772143,"created_at":1354447472,"updated_at":1392149898,"private":null,"nickname":"jenad2"}}} kódem: <?php $pokus = file_get_contents( "http://api.worldoftanks.eu/2.0/account/info/?application_id=d0a293dc77667c9328783d489c8cef73&account_id=506772143");// put your code here echo $pokus; $json = $pokus; $obj = json_decode($json); print $obj->{'count'}; //(nebo status) ?> si mohu šáhnout na tučně vybarvená data, ale zatím jsem nedošel k tomu jakou syntaxi příkazu mám použít "na vnořená data" typu např. "nickname". Nějak se mi to z daného odkazu nedaří spatlat, aby mně například u toho nickname vrátil hodnotu: jenad2. |
||
Medvídek Profil |
jenad:
Záleží, jak se ti bude lépe pracovat s výsledky. Jestli jako s objektem, nebo vícerozměrnym polem. Pokud chceš strukturu převést na pole, použij druhý parametr funkce json_decode($json, true); $obj = json_decode($json, true); echo $obj["data"][506772143]["nickname"]; // vysledek jenad2 |
||
juriad Profil |
#5 · Zasláno: 12. 2. 2014, 11:49:23
print $obj->data->{'506772143'}->nickname; Mimochodem následující je shodné: $obj->data # obvykle se používá toto $obj->{'data'} # pokud název obsahuje něco nepatřičného |
||
Časová prodleva: 5 měsíců
|
|||
jenad Profil |
#6 · Zasláno: 11. 7. 2014, 08:41:03
Ahoj, ještě bych potřeboval poradit s tímto, vrací se mi hodnoty ve tvaru:
{"status":"ok","count":1,"data":{"506772143":[{"statistics":{"wins":2603,"battles":4344},"mark_of_mastery":4,"tank_id":6913},{"statistics":{"wins":1330,"battles":2821},"mark_of_mastery":4,"tank_id":49},{"statistics":{"wins":1022,"battles":1866},"mark_of_mastery":4,"tank_id":54785},{"statistics":,{"statistics":{"wins":31,"battles":65},"mark_of_mastery":2,"tank_id":7681},{"statistics":{"wins":27,"battles":52},"mark_of_mastery":3,"tank_id":5121},{"statistics":{"wins":16,"battles":49},"mark_of_mastery":4,"tank_id":2881},{"statistics":{"wins":24,"battles":44},"mark_of_mastery":3,"tank_id":5169},{"statistics":{"wins":15,"battles":41},"mark_of_mastery":3,"tank_id":6673},{"statistics":{"wins":8,"battles":25},"mark_of_mastery":1,"tank_id":1553},{"statistics":{"statistics":{"wins":0,"battles":1},"mark_of_mastery":0,"tank_id":54801}]}} Poradíte mi prosím kod, jež jednak vypíše hodnoty wins, battles mark_of_mastery dle zadané hodnoty tank_id a kod, jež mi naopak vypíše vše v tabulce? Nějak googlováním na to nemohu přijít. Děkuji |
||
Alphard Profil |
|||
jenad Profil |
#8 · Zasláno: 12. 7. 2014, 20:15:17
Alphard:
Díky za reakci, myslím si to taky, ale jaksi se mi nedaří dát dohromady odkaz. Skusil jsem několik variant a pořád to háže chybu. Mohl bys poradit co mám v kodu špatně? <?php $pokus = file_get_contents( "http://api.worldoftanks.eu/2.0/account/tanks/?application_id=d0a293dc77667c9328783d489c8cef73&account_id=506772143"); $json = $pokus; $obj = json_decode($json); $obj = json_decode($json, true); echo $obj["data"][506772143]["statistics"]["tank_id"][6913]["mark_of_mastery"]; ?> Jinak máš pravdu ten předchozí výpis jsem sesekal, je dlouhý. Proto pokud budeš moci viz odkaz výše. Předem dík za nápovědu. |
||
Alphard Profil |
$arr = json_decode($json, true); var_dump($arr); $tankId = false; // vsechny vysledky $tankId = 49; // konkretni foreach ($arr['data'][506772143] as $item) { if (!$tankId || $item['tank_id'] == $tankId) { echo $item['statistics']['wins'], $item['statistics']['battles'], $item['mark_of_mastery']; } } |
||
Časová prodleva: 5 dní
|
|||
jenad Profil |
#10 · Zasláno: 17. 7. 2014, 13:09:12
Alphard:
Díky moc. Hlavně za přidaný způsob řešení s podmínkou. Hodně mně to pomohlo a posunulo o dost dál v chápaní php a API. |
||
Časová prodleva: 10 let
|
0