kronusme / dota2-api Goto Github PK
View Code? Open in Web Editor NEWDotA 2 Web API PHP wrapper
License: MIT License
DotA 2 Web API PHP wrapper
License: MIT License
{
"abilities": [
{
"name": "centaur_khan_war_stomp",
"id": "5295"
},
{
"name": "necronomicon_warrior_last_will",
"id": "5200"
},
{
"name": "enigma_demonic_conversion",
"id": "5147"
},
{
"name": "beastmaster_boar_poison",
"id": "5171"
},
{
"name": "juggernaut_blade_fury",
"id": "5028"
},
{
"name": "witch_doctor_voodoo_restoration",
"id": "5139"
},
{
"name": "bloodseeker_blood_bath",
"id": "5016"
},
{
"name": "backdoor_protection_in_base",
"id": "5351"
},
{
"name": "broodmother_spawn_spiderite",
"id": "5283"
},
{
"name": "spirit_breaker_charge_of_darkness",
"id": "5353"
},
{
"name": "chaos_knight_reality_rift",
"id": "5427"
},
{
"name": "lina_laguna_blade",
"id": "5043"
},
{
"name": "riki_backstab",
"id": "5144"
},
{
"name": "forest_troll_high_priest_heal",
"id": "5318"
},
{
"name": "warlock_upheaval",
"id": "5164"
},
{
"name": "ogre_magi_frost_armor",
"id": "5304"
},
{
"name": "stats",
"id": "5002"
},
{
"name": "dazzle_poison_touch",
"id": "5233"
},
{
"name": "templar_assassin_self_trap",
"id": "5199"
},
{
"name": "silencer_glaives_of_wisdom",
"id": "5378"
},
{
"name": "warlock_rain_of_chaos",
"id": "5165"
},
{
"name": "sven_warcry",
"id": "5096"
},
{
"name": "templar_assassin_meld",
"id": "5195"
},
{
"name": "enchantress_impetus",
"id": "5270"
},
{
"name": "earthshaker_enchant_totem",
"id": "5024"
},
{
"name": "lone_druid_synergy",
"id": "5414"
},
{
"name": "invoker_forge_spirit",
"id": "5387"
},
{
"name": "chaos_knight_phantasm",
"id": "5429"
},
{
"name": "satyr_hellcaller_unholy_aura",
"id": "5317"
},
{
"name": "shadow_shaman_shackles",
"id": "5080"
},
{
"name": "ogre_magi_bloodlust",
"id": "5440"
},
{
"name": "shadow_demon_shadow_poison_release",
"id": "5424"
},
{
"name": "blue_dragonspawn_sorcerer_evasion",
"id": "5325"
},
{
"name": "antimage_mana_break",
"id": "5003"
},
{
"name": "spirit_breaker_empowering_haste",
"id": "5354"
},
{
"name": "satyr_hellcaller_shockwave",
"id": "5316"
},
{
"name": "morphling_morph_agi",
"id": "5055"
},
{
"name": "chen_test_of_faith_teleport",
"id": "5522"
},
{
"name": "bounty_hunter_track",
"id": "5288"
},
{
"name": "bloodseeker_bloodrage",
"id": "5015"
},
{
"name": "obsidian_destroyer_astral_imprisonment",
"id": "5392"
},
{
"name": "lich_dark_ritual",
"id": "5136"
},
{
"name": "antimage_spell_shield",
"id": "5005"
},
{
"name": "enchantress_natures_attendants",
"id": "5269"
},
{
"name": "broodmother_incapacitating_bite",
"id": "5281"
},
{
"name": "undying_flesh_golem",
"id": "5447"
},
{
"name": "lone_druid_rabid",
"id": "5413"
},
{
"name": "slardar_sprint",
"id": "5114"
},
{
"name": "sandking_caustic_finale",
"id": "5104"
},
{
"name": "nevermore_dark_lord",
"id": "5063"
},
{
"name": "lycan_summon_wolves_invisibility",
"id": "5500"
},
{
"name": "life_stealer_infest",
"id": "5252"
},
{
"name": "lycan_feral_impulse",
"id": "5397"
},
{
"name": "ursa_overpower",
"id": "5358"
},
{
"name": "enraged_wildkin_toughness_aura",
"id": "5313"
},
{
"name": "pudge_flesh_heap",
"id": "5074"
},
{
"name": "witch_doctor_maledict",
"id": "5140"
},
{
"name": "vengefulspirit_nether_swap",
"id": "5125"
},
{
"name": "weaver_shukuchi",
"id": "5290"
},
{
"name": "weaver_the_swarm",
"id": "5289"
},
{
"name": "alchemist_acid_spray",
"id": "5365"
},
{
"name": "phantom_assassin_stifling_dagger",
"id": "5190"
},
{
"name": "sandking_epicenter",
"id": "5105"
},
{
"name": "tornado_tempest",
"id": "5310"
},
{
"name": "jakiro_liquid_fire",
"id": "5299"
},
{
"name": "chen_hand_of_god",
"id": "5331"
},
{
"name": "batrider_flaming_lasso",
"id": "5323"
},
{
"name": "lone_druid_true_form",
"id": "5416"
},
{
"name": "spirit_breaker_nether_strike",
"id": "5356"
},
{
"name": "spectre_haunt",
"id": "5337"
},
{
"name": "alchemist_chemical_rage",
"id": "5369"
},
{
"name": "silencer_last_word",
"id": "5379"
},
{
"name": "tinker_rearm",
"id": "5153"
},
{
"name": "rattletrap_rocket_flare",
"id": "5239"
},
{
"name": "omniknight_guardian_angel",
"id": "5266"
},
{
"name": "leshrac_diabolic_edict",
"id": "5242"
},
{
"name": "tiny_toss",
"id": "5107"
},
{
"name": "razor_static_link",
"id": "5083"
},
{
"name": "invoker_ice_wall",
"id": "5389"
},
{
"name": "brewmaster_drunken_haze",
"id": "5401"
},
{
"name": "batrider_flamebreak",
"id": "5321"
},
{
"name": "dark_seer_ion_shell",
"id": "5256"
},
{
"name": "queenofpain_scream_of_pain",
"id": "5175"
},
{
"name": "phantom_assassin_blur",
"id": "5192"
},
{
"name": "phantom_lancer_juxtapose",
"id": "5067"
},
{
"name": "tidehunter_anchor_smash",
"id": "5120"
},
{
"name": "axe_battle_hunger",
"id": "5008"
},
{
"name": "pugna_life_drain",
"id": "5189"
},
{
"name": "batrider_firefly",
"id": "5322"
},
{
"name": "beastmaster_primal_roar",
"id": "5177"
},
{
"name": "shadow_shaman_mass_serpent_ward",
"id": "5081"
},
{
"name": "treant_leech_seed",
"id": "5435"
},
{
"name": "chen_holy_persuasion",
"id": "5330"
},
{
"name": "courier_burst",
"id": "5210"
},
{
"name": "luna_lucent_beam",
"id": "5222"
},
{
"name": "morphling_morph_replicate",
"id": "5058"
},
{
"name": "venomancer_poison_sting",
"id": "5179"
},
{
"name": "roshan_bash",
"id": "5214"
},
{
"name": "tinker_march_of_the_machines",
"id": "5152"
},
{
"name": "lone_druid_spirit_bear_demolish",
"id": "5420"
},
{
"name": "mirana_leap",
"id": "5050"
},
{
"name": "brewmaster_storm_wind_walk",
"id": "5410"
},
{
"name": "skeleton_king_reincarnation",
"id": "5089"
},
{
"name": "beastmaster_call_of_the_wild",
"id": "5169"
},
{
"name": "riki_permanent_invisibility",
"id": "5145"
},
{
"name": "courier_shield",
"id": "5209"
},
{
"name": "clinkz_searing_arrows",
"id": "5260"
},
{
"name": "puck_illusory_orb",
"id": "5069"
},
{
"name": "forged_spirit_melting_strike",
"id": "5388"
},
{
"name": "viper_viper_strike",
"id": "5221"
},
{
"name": "furion_wrath_of_nature",
"id": "5248"
},
{
"name": "silencer_curse_of_the_silent",
"id": "5377"
},
{
"name": "lich_frost_nova",
"id": "5134"
},
{
"name": "doom_bringer_doom",
"id": "5342"
},
{
"name": "warlock_golem_flaming_fists",
"id": "5166"
},
{
"name": "invoker_quas",
"id": "5370"
},
{
"name": "invoker_invoke",
"id": "5375"
},
{
"name": "dazzle_weave",
"id": "5236"
},
{
"name": "courier_go_to_secretshop",
"id": "5492"
},
{
"name": "meepo_geostrike",
"id": "5432"
},
{
"name": "ogre_magi_multicast",
"id": "5441"
},
{
"name": "crystal_maiden_frostbite",
"id": "5127"
},
{
"name": "invoker_deafening_blast",
"id": "5390"
},
{
"name": "crystal_maiden_freezing_field",
"id": "5129"
},
{
"name": "lina_light_strike_array",
"id": "5041"
},
{
"name": "dragon_knight_breathe_fire",
"id": "5226"
},
{
"name": "earthshaker_fissure",
"id": "5023"
},
{
"name": "witch_doctor_paralyzing_cask",
"id": "5138"
},
{
"name": "centaur_khan_endurance_aura",
"id": "5294"
},
{
"name": "gyrocopter_homing_missile",
"id": "5362"
},
{
"name": "death_prophet_silence",
"id": "5091"
},
{
"name": "beastmaster_wild_axes",
"id": "5168"
},
{
"name": "doom_bringer_lvl_death",
"id": "5341"
},
{
"name": "queenofpain_shadow_strike",
"id": "5173"
},
{
"name": "tiny_avalanche",
"id": "5106"
},
{
"name": "invoker_exort",
"id": "5372"
},
{
"name": "lone_druid_true_form_battle_cry",
"id": "5417"
},
{
"name": "tiny_craggy_exterior",
"id": "5108"
},
{
"name": "antimage_mana_void",
"id": "5006"
},
{
"name": "riki_smoke_screen",
"id": "5142"
},
{
"name": "roshan_spell_block",
"id": "5213"
},
{
"name": "juggernaut_healing_ward",
"id": "5029"
},
{
"name": "ancient_apparition_ice_blast_release",
"id": "5349"
},
{
"name": "obsidian_destroyer_arcane_orb",
"id": "5391"
},
{
"name": "earthshaker_aftershock",
"id": "5025"
},
{
"name": "satyr_trickster_purge",
"id": "5314"
},
{
"name": "slardar_amplify_damage",
"id": "5117"
},
{
"name": "dazzle_shallow_grave",
"id": "5234"
},
{
"name": "tiny_grow",
"id": "5109"
},
{
"name": "shadow_demon_demonic_purge",
"id": "5425"
},
{
"name": "enigma_midnight_pulse",
"id": "5148"
},
{
"name": "treant_living_armor",
"id": "5436"
},
{
"name": "spectre_desolate",
"id": "5335"
},
{
"name": "weaver_time_lapse",
"id": "5292"
},
{
"name": "ancient_apparition_chilling_touch",
"id": "5347"
},
{
"name": "brewmaster_storm_cyclone",
"id": "5409"
},
{
"name": "vengefulspirit_command_aura",
"id": "5123"
},
{
"name": "broodmother_spawn_spiderlings",
"id": "5279"
},
{
"name": "bane_fiends_grip",
"id": "5013"
},
{
"name": "gyrocopter_flak_cannon",
"id": "5363"
},
{
"name": "sniper_take_aim",
"id": "5156"
},
{
"name": "sven_great_cleave",
"id": "5095"
},
{
"name": "death_prophet_exorcism",
"id": "5093"
},
{
"name": "mirana_arrow",
"id": "5048"
},
{
"name": "bounty_hunter_jinada",
"id": "5286"
},
{
"name": "pudge_rot",
"id": "5076"
},
{
"name": "chen_test_of_faith",
"id": "5329"
},
{
"name": "jakiro_ice_path",
"id": "5298"
},
{
"name": "enraged_wildkin_tornado",
"id": "5312"
},
{
"name": "pugna_decrepify",
"id": "5187"
},
{
"name": "dark_troll_warlord_raise_dead",
"id": "5306"
},
{
"name": "drow_ranger_trueshot",
"id": "5021"
},
{
"name": "vengefulspirit_wave_of_terror",
"id": "5124"
},
{
"name": "bounty_hunter_wind_walk",
"id": "5287"
},
{
"name": "nevermore_requiem",
"id": "5064"
},
{
"name": "courier_transfer_items",
"id": "5206"
},
{
"name": "viper_poison_attack",
"id": "5218"
},
{
"name": "brewmaster_fire_permanent_immolation",
"id": "5411"
},
{
"name": "alchemist_unstable_concoction",
"id": "5366"
},
{
"name": "undying_soul_rip",
"id": "5443"
},
{
"name": "roshan_devotion",
"id": "5217"
},
{
"name": "zuus_thundergods_wrath",
"id": "5113"
},
{
"name": "broodmother_spin_web",
"id": "5280"
},
{
"name": "jakiro_dual_breath",
"id": "5297"
},
{
"name": "luna_moon_glaive",
"id": "5223"
},
{
"name": "roshan_slam",
"id": "5215"
},
{
"name": "queenofpain_sonic_wave",
"id": "5176"
},
{
"name": "sniper_assassinate",
"id": "5157"
},
{
"name": "invoker_tornado",
"id": "5382"
},
{
"name": "dark_troll_warlord_ensnare",
"id": "5305"
},
{
"name": "courier_return_stash_items",
"id": "5207"
},
{
"name": "batrider_sticky_napalm",
"id": "5320"
},
{
"name": "ancient_apparition_ice_vortex",
"id": "5346"
},
{
"name": "windrunner_shackleshot",
"id": "5130"
},
{
"name": "lion_voodoo",
"id": "5045"
},
{
"name": "undying_decay",
"id": "5442"
},
{
"name": "tinker_heat_seeking_missile",
"id": "5151"
},
{
"name": "lion_mana_drain",
"id": "5046"
},
{
"name": "lone_druid_spirit_bear",
"id": "5412"
},
{
"name": "shadow_shaman_voodoo",
"id": "5079"
},
{
"name": "brewmaster_thunder_clap",
"id": "5400"
},
{
"name": "meepo_divided_we_stand",
"id": "5433"
},
{
"name": "big_thunder_lizard_frenzy",
"id": "5333"
},
{
"name": "luna_eclipse",
"id": "5225"
},
{
"name": "sandking_sand_storm",
"id": "5103"
},
{
"name": "giant_wolf_critical_strike",
"id": "5307"
},
{
"name": "brewmaster_storm_dispel_magic",
"id": "5408"
},
{
"name": "big_thunder_lizard_slam",
"id": "5332"
},
{
"name": "forest_troll_high_priest_mana_aura",
"id": "5491"
},
{
"name": "invoker_wex",
"id": "5371"
},
{
"name": "clinkz_wind_walk",
"id": "5261"
},
{
"name": "lone_druid_true_form",
"id": "5415"
},
{
"name": "undying_tombstone_zombie_deathstrike",
"id": "5446"
},
{
"name": "queenofpain_blink",
"id": "5174"
},
{
"name": "roshan_illusion_protection",
"id": "5216"
},
{
"name": "necronomicon_archer_aoe",
"id": "5204"
},
{
"name": "witch_doctor_death_ward",
"id": "5141"
},
{
"name": "enchantress_untouchable",
"id": "5267"
},
{
"name": "night_stalker_void",
"id": "5275"
},
{
"name": "faceless_void_time_lock",
"id": "5184"
},
{
"name": "faceless_void_backtrack",
"id": "5183"
},
{
"name": "polar_furbolg_ursa_warrior_thunder_clap",
"id": "5302"
},
{
"name": "slardar_bash",
"id": "5116"
},
{
"name": "omniknight_repel",
"id": "5264"
},
{
"name": "huskar_life_break",
"id": "5274"
},
{
"name": "spirit_breaker_greater_bash",
"id": "5355"
},
{
"name": "invoker_ghost_walk",
"id": "5381"
},
{
"name": "tidehunter_gush",
"id": "5118"
},
{
"name": "tidehunter_ravage",
"id": "5121"
},
{
"name": "lycan_summon_wolves",
"id": "5395"
},
{
"name": "drow_ranger_frost_arrows",
"id": "5019"
},
{
"name": "rattletrap_power_cogs",
"id": "5238"
},
{
"name": "chen_penitence",
"id": "5328"
},
{
"name": "skeleton_king_critical_strike",
"id": "5088"
},
{
"name": "dazzle_shadow_wave",
"id": "5235"
},
{
"name": "sniper_headshot",
"id": "5155"
},
{
"name": "life_stealer_consume",
"id": "5253"
},
{
"name": "kunkka_x_marks_the_spot",
"id": "5033"
},
{
"name": "furion_teleportation",
"id": "5246"
},
{
"name": "brewmaster_drunken_brawler",
"id": "5402"
},
{
"name": "morphling_waveform",
"id": "5052"
},
{
"name": "morphling_replicate",
"id": "5057"
},
{
"name": "storm_spirit_static_remnant",
"id": "5098"
},
{
"name": "drow_ranger_marksmanship",
"id": "5022"
},
{
"name": "night_stalker_darkness",
"id": "5278"
},
{
"name": "windrunner_powershot",
"id": "5131"
},
{
"name": "venomancer_plague_ward",
"id": "5180"
},
{
"name": "invoker_sun_strike",
"id": "5386"
},
{
"name": "riki_blink_strike",
"id": "5143"
},
{
"name": "zuus_static_field",
"id": "5112"
},
{
"name": "pudge_meat_hook",
"id": "5075"
},
{
"name": "pugna_nether_ward",
"id": "5188"
},
{
"name": "treant_overgrowth",
"id": "5437"
},
{
"name": "zuus_lightning_bolt",
"id": "5111"
},
{
"name": "luna_lunar_blessing",
"id": "5224"
},
{
"name": "brewmaster_primal_split",
"id": "5403"
},
{
"name": "invoker_chaos_meteor",
"id": "5385"
},
{
"name": "ogre_magi_fireblast",
"id": "5438"
},
{
"name": "tidehunter_kraken_shell",
"id": "5119"
},
{
"name": "ursa_enrage",
"id": "5360"
},
{
"name": "lich_chain_frost",
"id": "5137"
},
{
"name": "razor_eye_of_the_storm",
"id": "5085"
},
{
"name": "ursa_fury_swipes",
"id": "5359"
},
{
"name": "juggernaut_omni_slash",
"id": "5030"
},
{
"name": "obsidian_destroyer_essence_aura",
"id": "5393"
},
{
"name": "warlock_shadow_word",
"id": "5163"
},
{
"name": "axe_berserkers_call",
"id": "5007"
},
{
"name": "dark_seer_wall_of_replica",
"id": "5258"
},
{
"name": "razor_unstable_current",
"id": "5084"
},
{
"name": "necrolyte_death_pulse",
"id": "5158"
},
{
"name": "necrolyte_reapers_scythe",
"id": "5161"
},
{
"name": "broodmother_insatiable_hunger",
"id": "5282"
},
{
"name": "templar_assassin_psi_blades",
"id": "5196"
},
{
"name": "pugna_nether_blast",
"id": "5186"
},
{
"name": "leshrac_pulse_nova",
"id": "5244"
},
{
"name": "doom_bringer_scorched_earth",
"id": "5340"
},
{
"name": "warlock_golem_permanent_immolation",
"id": "5167"
},
{
"name": "bloodseeker_thirst",
"id": "5017"
},
{
"name": "mirana_starfall",
"id": "5051"
},
{
"name": "viper_corrosive_skin",
"id": "5220"
},
{
"name": "kunkka_ghostship",
"id": "5035"
},
{
"name": "dark_seer_surge",
"id": "5257"
},
{
"name": "lone_druid_spirit_bear_return",
"id": "5418"
},
{
"name": "meepo_poof",
"id": "5431"
},
{
"name": "black_dragon_splash_attack",
"id": "5324"
},
{
"name": "rattletrap_battery_assault",
"id": "5237"
},
{
"name": "drow_ranger_wave_of_silence",
"id": "5632"
},
{
"name": "nevermore_necromastery",
"id": "5062"
},
{
"name": "jakiro_macropyre",
"id": "5300"
},
{
"name": "lone_druid_spirit_bear_entangle",
"id": "5419"
},
{
"name": "treant_natures_guise",
"id": "5434"
},
{
"name": "beastmaster_greater_boar_poison",
"id": "5352"
},
{
"name": "tinker_laser",
"id": "5150"
},
{
"name": "clinkz_death_pact",
"id": "5262"
},
{
"name": "morphling_morph",
"id": "5054"
},
{
"name": "morphling_adaptive_strike",
"id": "5053"
},
{
"name": "mirana_invis",
"id": "5049"
},
{
"name": "enigma_malefice",
"id": "5146"
},
{
"name": "skeleton_king_hellfire_blast",
"id": "5086"
},
{
"name": "silencer_global_silence",
"id": "5380"
},
{
"name": "phantom_assassin_phantom_strike",
"id": "5191"
},
{
"name": "lycan_shapeshift",
"id": "5398"
},
{
"name": "templar_assassin_refraction",
"id": "5194"
},
{
"name": "warlock_fatal_bonds",
"id": "5162"
},
{
"name": "death_prophet_carrion_swarm",
"id": "5090"
},
{
"name": "lion_finger_of_death",
"id": "5047"
},
{
"name": "ursa_earthshock",
"id": "5357"
},
{
"name": "life_stealer_open_wounds",
"id": "5251"
},
{
"name": "blue_dragonspawn_overseer_evasion",
"id": "5326"
},
{
"name": "slardar_slithereen_crush",
"id": "5115"
},
{
"name": "razor_plasma_field",
"id": "5082"
},
{
"name": "storm_spirit_electric_vortex",
"id": "5099"
},
{
"name": "spectre_dispersion",
"id": "5336"
},
{
"name": "courier_return_to_base",
"id": "5205"
},
{
"name": "sven_gods_strength",
"id": "5097"
},
{
"name": "leshrac_lightning_storm",
"id": "5243"
},
{
"name": "life_stealer_rage",
"id": "5249"
},
{
"name": "spectre_reality",
"id": "5338"
},
{
"name": "antimage_blink",
"id": "5004"
},
{
"name": "sniper_shrapnel",
"id": "5154"
},
{
"name": "rattletrap_hookshot",
"id": "5240"
},
{
"name": "invoker_cold_snap",
"id": "5376"
},
{
"name": "crystal_maiden_crystal_nova",
"id": "5126"
},
{
"name": "bloodseeker_rupture",
"id": "5018"
},
{
"name": "kunkka_tidebringer",
"id": "5032"
},
{
"name": "invoker_alacrity",
"id": "5384"
},
{
"name": "huskar_inner_vitality",
"id": "5271"
},
{
"name": "axe_counter_helix",
"id": "5009"
},
{
"name": "spectre_spectral_dagger",
"id": "5334"
},
{
"name": "furion_force_of_nature",
"id": "5247"
},
{
"name": "brewmaster_earth_hurl_boulder",
"id": "5404"
},
{
"name": "alchemist_goblins_greed",
"id": "5368"
},
{
"name": "windrunner_windrun",
"id": "5132"
},
{
"name": "kunkka_return",
"id": "5034"
},
{
"name": "backdoor_protection",
"id": "5350"
},
{
"name": "dragon_knight_dragon_blood",
"id": "5228"
},
{
"name": "vengefulspirit_magic_missile",
"id": "5122"
},
{
"name": "phantom_lancer_spirit_lance",
"id": "5065"
},
{
"name": "nevermore_shadowraze1",
"id": "5059"
},
{
"name": "courier_take_stash_items",
"id": "5208"
},
{
"name": "nevermore_shadowraze2",
"id": "5060"
},
{
"name": "nevermore_shadowraze3",
"id": "5061"
},
{
"name": "weaver_geminate_attack",
"id": "5291"
},
{
"name": "alpha_wolf_command_aura",
"id": "5309"
},
{
"name": "ancient_apparition_ice_blast",
"id": "5348"
},
{
"name": "ogre_magi_ignite",
"id": "5439"
},
{
"name": "harpy_storm_chain_lightning",
"id": "5319"
},
{
"name": "omniknight_degen_aura",
"id": "5265"
},
{
"name": "enchantress_enchant",
"id": "5268"
},
{
"name": "leshrac_split_earth",
"id": "5241"
},
{
"name": "death_prophet_witchcraft",
"id": "5092"
},
{
"name": "viper_nethertoxin",
"id": "5219"
},
{
"name": "necrolyte_sadist",
"id": "5160"
},
{
"name": "phantom_assassin_coup_de_grace",
"id": "5193"
},
{
"name": "ancient_apparition_cold_feet",
"id": "5345"
},
{
"name": "puck_dream_coil",
"id": "5073"
},
{
"name": "venomancer_poison_nova",
"id": "5181"
},
{
"name": "chaos_knight_chaos_bolt",
"id": "5426"
},
{
"name": "doom_bringer_devour",
"id": "5339"
},
{
"name": "bounty_hunter_shuriken_toss",
"id": "5285"
},
{
"name": "blue_dragonspawn_overseer_devotion_aura",
"id": "5327"
},
{
"name": "earthshaker_echo_slam",
"id": "5026"
},
{
"name": "necronomicon_warrior_sight",
"id": "5201"
},
{
"name": "huskar_berserkers_blood",
"id": "5273"
},
{
"name": "templar_assassin_psionic_trap",
"id": "5197"
},
{
"name": "night_stalker_crippling_fear",
"id": "5276"
},
{
"name": "storm_spirit_overload",
"id": "5100"
},
{
"name": "alchemist_unstable_concoction_throw",
"id": "5367"
},
{
"name": "morphling_morph_str",
"id": "5056"
},
{
"name": "doom_bringer_empty",
"id": "5343"
},
{
"name": "doom_bringer_empty",
"id": "5344"
},
{
"name": "lycan_howl",
"id": "5396"
},
{
"name": "beastmaster_hawk_invisibility",
"id": "5170"
},
{
"name": "storm_spirit_ball_lightning",
"id": "5101"
},
{
"name": "omniknight_purification",
"id": "5263"
},
{
"name": "shadow_demon_shadow_poison",
"id": "5423"
},
{
"name": "dragon_knight_elder_dragon_form",
"id": "5229"
},
{
"name": "juggernaut_blade_dance",
"id": "5027"
},
{
"name": "shadow_demon_disruption",
"id": "5421"
},
{
"name": "venomancer_venomous_gale",
"id": "5178"
},
{
"name": "gnoll_assassin_envenomed_weapon",
"id": "5296"
},
{
"name": "alpha_wolf_critical_strike",
"id": "5308"
},
{
"name": "shadow_shaman_ether_shock",
"id": "5078"
},
{
"name": "night_stalker_hunter_in_the_night",
"id": "5277"
},
{
"name": "dragon_knight_dragon_tail",
"id": "5227"
},
{
"name": "gyrocopter_call_down",
"id": "5364"
},
{
"name": "beastmaster_inner_beast",
"id": "5172"
},
{
"name": "pudge_dismember",
"id": "5077"
},
{
"name": "windrunner_focusfire",
"id": "5133"
},
{
"name": "ghost_frost_attack",
"id": "5301"
},
{
"name": "bane_brain_sap",
"id": "5011"
},
{
"name": "necrolyte_heartstopper_aura",
"id": "5159"
},
{
"name": "chaos_knight_chaos_strike",
"id": "5428"
},
{
"name": "skeleton_king_vampiric_aura",
"id": "5087"
},
{
"name": "clinkz_strafe",
"id": "5259"
},
{
"name": "life_stealer_feast",
"id": "5250"
},
{
"name": "faceless_void_chronosphere",
"id": "5185"
},
{
"name": "lion_impale",
"id": "5044"
},
{
"name": "necronomicon_archer_mana_burn",
"id": "5203"
},
{
"name": "axe_culling_blade",
"id": "5010"
},
{
"name": "huskar_burning_spear",
"id": "5272"
},
{
"name": "brewmaster_earth_pulverize",
"id": "5406"
},
{
"name": "kobold_taskmaster_speed_aura",
"id": "5293"
},
{
"name": "brewmaster_earth_spell_immunity",
"id": "5405"
},
{
"name": "necronomicon_warrior_mana_burn",
"id": "5202"
},
{
"name": "furion_sprout",
"id": "5245"
},
{
"name": "invoker_empty2",
"id": "5374"
},
{
"name": "puck_ethereal_jaunt",
"id": "5070"
},
{
"name": "invoker_empty1",
"id": "5373"
},
{
"name": "kunkka_torrent",
"id": "5031"
},
{
"name": "phantom_lancer_doppelwalk",
"id": "5066"
},
{
"name": "undying_tombstone",
"id": "5444"
},
{
"name": "bane_nightmare",
"id": "5014"
},
{
"name": "zuus_arc_lightning",
"id": "5110"
},
{
"name": "undying_tombstone_zombie_aura",
"id": "5445"
},
{
"name": "crystal_maiden_brilliance_aura",
"id": "5128"
},
{
"name": "bane_enfeeble",
"id": "5012"
},
{
"name": "satyr_soulstealer_mana_burn",
"id": "5315"
},
{
"name": "gyrocopter_rocket_barrage",
"id": "5361"
},
{
"name": "dragon_knight_frost_breath",
"id": "5232"
},
{
"name": "invoker_emp",
"id": "5383"
},
{
"name": "shadow_demon_soul_catcher",
"id": "5422"
},
{
"name": "lina_fiery_soul",
"id": "5042"
},
{
"name": "lina_dragon_slave",
"id": "5040"
},
{
"name": "sven_storm_bolt",
"id": "5094"
},
{
"name": "broodmother_poison_sting",
"id": "5284"
},
{
"name": "meepo_earthbind",
"id": "5430"
},
{
"name": "phantom_lancer_phantom_edge",
"id": "5068"
},
{
"name": "puck_phase_shift",
"id": "5072"
},
{
"name": "faceless_void_time_walk",
"id": "5182"
},
{
"name": "puck_waning_rift",
"id": "5071"
},
{
"name": "lich_frost_armor",
"id": "5135"
},
{
"name": "sandking_burrowstrike",
"id": "5102"
},
{
"name": "dark_seer_vacuum",
"id": "5255"
},
{
"name": "obsidian_destroyer_sanity_eclipse",
"id": "5394"
},
{
"name": "enigma_black_hole",
"id": "5149"
},
{
"name": "lycan_summon_wolves_critical_strike",
"id": "5399"
},
{
"name": "default_attack",
"id": "5001"
},
{
"name": "templar_assassin_trap",
"id": "5198"
},
{
"name": "neutral_spell_immunity",
"id": "5303"
},
{
"name": "nyx_assassin_impale",
"id": "5462"
},
{
"name": "nyx_assassin_mana_burn",
"id": "5463"
},
{
"name": "nyx_assassin_spiked_carapace",
"id": "5464"
},
{
"name": "nyx_assassin_vendetta",
"id": "5465"
},
{
"name": "slark_dark_pact",
"id": "5494"
},
{
"name": "slark_pounce",
"id": "5495"
},
{
"name": "slark_essence_shift",
"id": "5496"
},
{
"name": "slark_shadow_dance",
"id": "5497"
},
{
"name": "medusa_split_shot",
"id": "5504"
},
{
"name": "medusa_mystic_snake",
"id": "5505"
},
{
"name": "medusa_mana_shield",
"id": "5506"
},
{
"name": "medusa_stone_gaze",
"id": "5507"
},
{
"name": "troll_warlord_berserkers_rage",
"id": "5508"
},
{
"name": "troll_warlord_whirling_axes_ranged",
"id": "5509"
},
{
"name": "troll_warlord_whirling_axes_melee",
"id": "5510"
},
{
"name": "troll_warlord_fervor",
"id": "5511"
},
{
"name": "troll_warlord_battle_trance",
"id": "5512"
},
{
"name": "centaur_hoof_stomp",
"id": "5514"
},
{
"name": "centaur_double_edge",
"id": "5515"
},
{
"name": "centaur_return",
"id": "5516"
},
{
"name": "centaur_stampede",
"id": "5517"
},
{
"name": "magnataur_shockwave",
"id": "5518"
},
{
"name": "magnataur_empower",
"id": "5519"
},
{
"name": "magnataur_skewer",
"id": "5520"
},
{
"name": "magnataur_reverse_polarity",
"id": "5521"
},
{
"name": "shredder_whirling_death",
"id": "5524"
},
{
"name": "shredder_timber_chain",
"id": "5525"
},
{
"name": "shredder_reactive_armor",
"id": "5526"
},
{
"name": "shredder_chakram",
"id": "5527"
},
{
"name": "shredder_return_chakram",
"id": "5528"
},
{
"name": "keeper_of_the_light_illuminate",
"id": "5471"
},
{
"name": "keeper_of_the_light_mana_leak",
"id": "5472"
},
{
"name": "keeper_of_the_light_chakra_magic",
"id": "5473"
},
{
"name": "keeper_of_the_light_spirit_form",
"id": "5474"
},
{
"name": "keeper_of_the_light_recall",
"id": "5475"
},
{
"name": "keeper_of_the_light_blinding_light",
"id": "5476"
},
{
"name": "keeper_of_the_light_illuminate_end",
"id": "5477"
},
{
"name": "keeper_of_the_light_spirit_form_illuminate",
"id": "5479"
},
{
"name": "rubick_telekinesis",
"id": "5448"
},
{
"name": "rubick_fade_bolt",
"id": "5450"
},
{
"name": "rubick_null_field",
"id": "5451"
},
{
"name": "rubick_spell_steal",
"id": "5452"
},
{
"name": "disruptor_thunder_strike",
"id": "5458"
},
{
"name": "disruptor_glimpse",
"id": "5459"
},
{
"name": "disruptor_kinetic_field",
"id": "5460"
},
{
"name": "disruptor_static_storm",
"id": "5461"
},
{
"name": "naga_siren_mirror_image",
"id": "5467"
},
{
"name": "naga_siren_ensnare",
"id": "5468"
},
{
"name": "naga_siren_rip_tide",
"id": "5469"
},
{
"name": "naga_siren_song_of_the_siren",
"id": "5470"
},
{
"name": "visage_grave_chill",
"id": "5480"
},
{
"name": "visage_soul_assumption",
"id": "5481"
},
{
"name": "visage_gravekeepers_cloak",
"id": "5482"
},
{
"name": "visage_summon_familiars",
"id": "5483"
},
{
"name": "wisp_tether",
"id": "5485"
},
{
"name": "wisp_spirits",
"id": "5486"
},
{
"name": "wisp_overcharge",
"id": "5487"
},
{
"name": "wisp_relocate",
"id": "5488"
},
{
"name": "wisp_tether_break",
"id": "5489"
},
{
"name": "wisp_spirits_in",
"id": "wisp_spirits_out"
},
{
"name": "bristleback_viscous_nasal_goo",
"id": "5548"
},
{
"name": "bristleback_quill_spray",
"id": "5549"
},
{
"name": "bristleback_bristleback",
"id": "5550"
},
{
"name": "bristleback_warpath",
"id": "5551"
},
{
"name": "tusk_ice_shards",
"id": "5565"
},
{
"name": "tusk_snowball",
"id": "5566"
},
{
"name": "tusk_frozen_sigil",
"id": "5567"
},
{
"name": "tusk_walrus_punch",
"id": "5568"
},
{
"name": "skywrath_mage_arcane_bolt",
"id": "5581"
},
{
"name": "skywrath_mage_concussive_shot",
"id": "5582"
},
{
"name": "skywrath_mage_ancient_seal",
"id": "5583"
},
{
"name": "skywrath_mage_mystic_flare",
"id": "5584"
},
{
"name": "abaddon_death_coil",
"id": "5585"
},
{
"name": "abaddon_aphotic_shield",
"id": "5586"
},
{
"name": "abaddon_frostmourne",
"id": "5587"
},
{
"name": "abaddon_borrowed_time",
"id": "5588"
},
{
"name": "elder_titan_echo_stomp",
"id": "5589"
},
{
"name": "elder_titan_ancestral_spirit",
"id": "5591"
},
{
"name": "elder_titan_natural_order",
"id": "5593"
},
{
"name": "elder_titan_earth_splitter",
"id": "5594"
},
{
"name": "legion_commander_overwhelming_odds",
"id": "5595"
},
{
"name": "legion_commander_press_the_attack",
"id": "5596"
},
{
"name": "legion_commander_moment_of_courage",
"id": "5597"
},
{
"name": "legion_commander_duel",
"id": "5598"
},
{
"name": "ember_spirit_searing_chains",
"id": "5603"
},
{
"name": "ember_spirit_sleight_of_fist",
"id": "5604"
},
{
"name": "ember_spirit_flame_guard",
"id": "5605"
},
{
"name": "ember_spirit_fire_remnant",
"id": "5606"
},
{
"name": "ember_spirit_activate_fire_remnant",
"id": "5607"
},
{
"name": "earth_spirit_boulder_smash",
"id": "5608"
},
{
"name": "earth_spirit_rolling_boulder",
"id": "5609"
},
{
"name": "earth_spirit_geomagnetic_grip",
"id": "5610"
},
{
"name": "earth_spirit_stone_caller",
"id": "5611"
},
{
"name": "earth_spirit_magnetize",
"id": "5612"
},
{
"name": "abyssal_underlord_firestorm",
"id": "5613"
},
{
"name": "abyssal_underlord_pit_of_malice",
"id": "5614"
},
{
"name": "abyssal_underlord_atrophy_aura",
"id": "5615"
},
{
"name": "abyssal_underlord_dark_rift",
"id": "5616"
},
{
"name": "terrorblade_reflection",
"id": "5619"
},
{
"name": "terrorblade_conjure_image",
"id": "5620"
},
{
"name": "terrorblade_metamorphosis",
"id": "5621"
},
{
"name": "terrorblade_sunder",
"id": "5622"
},
{
"name": "phoenix_icarus_dive",
"id": "5623"
},
{
"name": "phoenix_fire_spirits",
"id": "5625"
},
{
"name": "phoenix_sun_ray",
"id": "5626"
},
{
"name": "phoenix_supernova",
"id": "5630"
}
]
}
When doing match data calls for a league id or just checking live League matches, there are many protected fields, like first blood time, league id, bans, picks etc.
Is there a way to grab the details for those fields ?
Even the team names and player names shows protected
Example call:
$matches_mapper_db = new matches_mapper_web();
$matches_mapper_db->set_league_id(232);
$matches_info = $matches_mapper_db->load();
Hi there, your code is awesome. I'm just having a little problem displaying our clan matches. I'm looking for something like http://dotabuff.com/teams/869370. I've tried every single way to get this to work. Would it be possible for your to upload a demo of this? I was able to figure our how to pull match details according to your first demo, so I'm hoping that by being able to see a demo of team details I might be able to figure it out.
Hello,
First of all i want to thank you for this great API! There's a lot of work in it i guess.
I played around with everything a bit, but my biggest problem is, that it really takes a huge time to load for example the last 25 matches of a user. Is the dota api working properly on your webservers, or is this a known problem? (I also tried the plain dota web api, at it is really really slow...)
Best regards
I would like to load all the details from the database (for example) on all the matches that the player X has played with the hero Y... so I tried this:
$accountid=XXX; // Here we must use the SteamID?
$heroid=21; // (for example windrunner)
$test = new matches_mapper_db();
$test->set_hero_id($heroid)->set_account_id($accountid);
$matches_info = $test->load();
print_r($matches_info);
the result is blank screen :(
Convert property name.
I would like to suggest adding a class which takes a UGC ID, such as a teams Logo ID, and retrieves the data for getting the URL.
Here is a sample request
$request = new request(
'http://api.steampowered.com/ISteamRemoteStorage/GetUGCFileDetails/v1/',
array('appid' => 570, 'ugcid' => $game->get('radiant_logo'))
);
$logo_data = $request->send();
if (!is_null($logo_data)) {
$filename = $logo_data->filename; //Just the filename on the server, not used otherwise, not even in the url
$image_url = $logo_data->url; //The url to call in your <img> tag to display it
$image_size = $logo_data->size; //Size in bytes
}
Edit: getting these errors when trying to save to db
[30-May-2013 22:35:33 America/Denver] PHP Warning: It is not yet possible to assign complex types to attributes in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_web.php on line 62
[30-May-2013 22:35:33 America/Denver] PHP Warning: array_keys() expects parameter 1 to be array, object given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 134
[30-May-2013 22:35:33 America/Denver] PHP Warning: array_values() expects parameter 1 to be array, object given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 135
[30-May-2013 22:35:33 America/Denver] PHP Warning: array_unshift() expects parameter 1 to be array, null given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 136
[30-May-2013 22:35:33 America/Denver] PHP Warning: array_keys() expects parameter 1 to be array, object given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 134
[30-May-2013 22:35:33 America/Denver] PHP Warning: array_values() expects parameter 1 to be array, object given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 135
[30-May-2013 22:35:33 America/Denver] PHP Warning: array_unshift() expects parameter 1 to be array, null given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 136
[30-May-2013 22:35:33 America/Denver] PHP Warning: array_keys() expects parameter 1 to be array, object given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 134
[30-May-2013 22:35:33 America/Denver] PHP Warning: array_values() expects parameter 1 to be array, object given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 135
[30-May-2013 22:35:33 America/Denver] PHP Warning: array_unshift() expects parameter 1 to be array, null given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 136
[30-May-2013 22:35:33 America/Denver] PHP Catchable fatal error: Argument 2 passed to db::insert_many_pdo() must be of the type array, null given, called in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 141 and defined in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/utils/class.db.php on line 284
[30-May-2013 22:36:11 America/Denver] PHP Warning: It is not yet possible to assign complex types to attributes in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_web.php on line 62
{
"regions" : [
{
"id" : 133,
"name" : "Melmak"
}
]
}
etc
as I was looking through the matches_mapper_db.php file I noticed why when I use set_account_id() and other functions that it wouldn't return anything. It is because it using trying to do a sql WHERE account_id on the matches table when that column doesn't exist in the matches table. instead it should query slots table to get all the match ids and then query the rest of the info from matches table.
hope this helps
Check out current league list:
{
"name": "#DOTA_Item_AtoD_3",
"leagueid": 37,
"description": "#DOTA_Item_Desc_AtoD3",
"tournament_url": ""
},
Notice that tournament_url is an empty string.
My test code:
$leagues_mapper_web = new leagues_mapper();
$leagues = $leagues_mapper_web->load();
var_dump($leagues);
Outputs:
array(4) {
["name"]=>
string(17) "#DOTA_Item_AtoD_3"
["leagueid"]=>
string(2) "37"
["description"]=>
string(21) "#DOTA_Item_Desc_AtoD3"
["tournament_url"]=>
object(SimpleXMLElement)#8 (0) {
}
}
Notice how tournament_url is a SimpleXMLElement instead of a empty string. It is supposed to look like this:
array(4) {
["name"]=>
string(17) "#DOTA_Item_AtoD_3"
["leagueid"]=>
string(2) "37"
["description"]=>
string(21) "#DOTA_Item_Desc_AtoD3"
["tournament_url"]=>
string(0) ""
}
I'm new to github, not sure how to offer a branch with a fixed version.
Hey!
Not sure if this was a design choice, but I noticed that you limit the GetMatchHistory
matches_requested
to 25, when the limit now is 100.
Line 201 in class.matches_mapper.php:
if ($matches_requested > 0 && $matches_requested <= 25) {
I'm new to SQL and all this, I followed the 3 steps for install, but it didn't work. Should I put config.php into my server? What about the 3 folders "data", "images", and "include"? Thanks.
Is it possible to get suggested hero guides and items via the API ? or those submitted by other users and available aside default guide ?
For match_mapper_db add method delete that takes match_id or match object and remove match data like picks/bans, slots, match info, additional units, abilities upgrade.
Fix towers and barracks statuses parsing.
Was: TOP, MID, BOT.
Now: BOT, MID, TOP.
Hi!
Very good work! Thanks a lot!
It seems that Valve still didn't add the option to parse results of Lobby games (team duels and so on). Am I right?
Hello,
Is it possible to filter the match history by game-mode? i.e. by passing an extra parameter to the request url.?
Best regards
You should add the language parameter to the request class and config so that GetLeagueListing requests will return the localized league name and description instead of the localization key (eg. "The International" instead of "#DOTA_Leagues_TheInternational")
In includes/utils/class.request.php
99: $this->_params['key'] = API_KEY;
+: $this->_params['language'] = LANGUAGE;
100: foreach ($this->_params as $key=>$value) {
In config.php
6:define ('ACCOUNT_ID', 1234);
+://The language to retrieve results in (see http://en.wikipedia.org/wiki/ISO_639-1 for the language codes (first two characters) and http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes for the country codes (last two characters))
+:define ('LANGUAGE', 'en_us');
7:
8:error_reporting(0);
Bug with saving and getting matches from leagues with id > 65000.
Change in table "matches" leagueid field type from tinyint to smallint.
Как получить account_id зная только steamid?
Дело в том, чтобы отобразить с помощью функции GetMatchHistory 25 последних матчей игрока, нужен account_id. Откуда вообще взять этот account_id?
У Вас это делается через класс matches_mapper_web, сначала устанавливается account_id с помощью set_account_id, затем данные загружаются через функцию load.
Я повторюсь ещё раз - откуда взять этот account_id?
Есть вариант найти его через матч, но меня он не устраивает.
The script creates the dire_team_id as a tinyint(11) but it should be int(11).
Any match data loaded with the tinyint will have a 255 value instead of the actual value.
Tnx for your work man!
But realy i don't understand how to use... i follow all instruction, but my DB is always empty and I can get no result :(
$heroes_mapper = new heroes_mapper();
$heroes = $heroes_mapper->load();
print_r($heroes);
echo $heroes;
this works only once o.0 lol help
I have noticed when looping through to get last 25 matches for a person that it sometimes will error out and die. I get the following error:
[09-Jun-2013 16:06:45 America/Denver] PHP Warning: It is not yet possible to assign complex types to attributes in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_web.php on line 62
[09-Jun-2013 16:06:54 America/Denver] PHP Warning: array_keys() expects parameter 1 to be array, object given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 135
[09-Jun-2013 16:06:54 America/Denver] PHP Warning: array_values() expects parameter 1 to be array, object given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 136
[09-Jun-2013 16:06:54 America/Denver] PHP Warning: array_unshift() expects parameter 1 to be array, null given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 137
[09-Jun-2013 16:06:54 America/Denver] PHP Warning: array_keys() expects parameter 1 to be array, object given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 135
[09-Jun-2013 16:06:54 America/Denver] PHP Warning: array_values() expects parameter 1 to be array, object given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 136
[09-Jun-2013 16:06:54 America/Denver] PHP Warning: array_unshift() expects parameter 1 to be array, null given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 137
[09-Jun-2013 16:06:54 America/Denver] PHP Warning: array_keys() expects parameter 1 to be array, object given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 135
[09-Jun-2013 16:06:54 America/Denver] PHP Warning: array_values() expects parameter 1 to be array, object given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 136
[09-Jun-2013 16:06:54 America/Denver] PHP Warning: array_unshift() expects parameter 1 to be array, null given in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 137
[09-Jun-2013 16:06:54 America/Denver] PHP Catchable fatal error: Argument 2 passed to db::insert_many_pdo() must be of the type array, null given, called in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/mappers/class.match_mapper_db.php on line 142 and defined in /home3/compuuq1/public_html/dev.computerfr33k.com/dota2/includes/utils/class.db.php on line 284
right before the script dies i get this as the ability variable
SimpleXMLElement Object ( ) SimpleXMLElement Object ( ) SimpleXMLElement Object ( )
so for some reason it is getting an object instead of an array for the array_keys function therefore causing it to die since its not getting an array, since the $ability is not an array then the rest of the array functions also fail for the loop.
error starts at line 133 in class.match_mapper_db.php
Hope this helps
Replace leagueid to league_id.
Matches_mapper_db should support parsing additional units data and save it into db.
There should be a variable to retrieve the number of matches that exist in total from a match history query. Here is the changes that should be made
includes/mappers/class.matches_mapper.php
45: protected $_start_at_match_id;
+: /**
+: * The total number of matches available for retrieval
+: * @var int
+: */
+: protected $_total_results;
46: /**
205: }
+: /**
+: * @return int
+: */
+: public function get_total_matches() {
+: return $this->_total_results;
+: }
206:
207: /**
includes/mappers/class.matches_mapper_web.php
49: $matches = array();
+: $this->_total_results = $xml->total_results;
50: if (isset($xml->matches)) {
How to save game in a database and then use this data?
Create simple way for users to get a map with barracks and towers.
Class that takes match object and returns image data with map.
using matches mapper db doesn't seem to be working for me, but when I use it for the matches_mapper_web it works. Not sure why.
$matches_mapper_db = new matches_mapper_db();
$matches_mapper_db->set_account_id($_GET['id'])->set_matches_requested(5);
$matches = $matches_mapper_db->load();
This just returns an empty array for me. but if I remove the set_matches option, it will return all the matches just fine.
Parse all data, provided by API-call. Now parse only few fields.
I've got this, but once it hits the last page it for some reason doesn't reach one for matches remaining
<?php
require_once('config.php');
if(empty($_GET['id']) || !isset($_GET['id']))
die('');
//get players full match history
// (loop through using date_min & date_max
$account_id = (int)$_GET['id'];
$last_match = 0;
$matches_mapper_web = new matches_mapper_web();
$matches_mapper_web->set_account_id($account_id);
$matches_short_info = $matches_mapper_web->load();
$i=0;
foreach($matches_short_info AS $key=>$match_short_info) {
$match_mapper = new match_mapper_web($key);
$match = $match_mapper->load();
var_dump($match->get('start_time'));
$saver = new match_mapper_db();
$saver->save($match);
echo '<br />' . $i . '<p>';
$i++;
$last_date = $match->get('start_time');
}
$matches_mapper_web = new matches_mapper_web();
$matches_mapper_web->set_account_id($account_id)->set_date_max(strtotime($last_date));
$matches_short_info = $matches_mapper_web->load();
$results_remaining = $matches_mapper_web->get_total_matches();
while($results_remaining > 1) {
$matches_mapper_web = new matches_mapper_web();
$matches_mapper_web->set_account_id($account_id)->set_date_max(strtotime($last_date));
$matches_short_info = $matches_mapper_web->load();
$results_remaining = $matches_mapper_web->get_total_matches();
foreach($matches_short_info as $key=>$match_short_info) {
$match_mapper = new match_mapper_web($key);
$match = $match_mapper->load();
var_dump($match->get('start_time'));
$saver = new match_mapper_db();
$saver->save($match);
echo '<br />' . $i . '<p>';
$i++;
$last_date = $match->get('start_time');
}
file_put_contents('results.log', $last_date . '\n' . $results_remaining);
}
?>
everytime I go and use the match_mapper_db class it doesnt work, unless im using it to save a match. So when I go to use it to load a match it gives me an error:
Notice: Undefined offset: 11 in /usr/share/nginx/www/dota2/includes/mappers/class.match_mapper_db.php on line 75
Catchable fatal error: Argument 1 passed to slot::set_additional_unit_items() must be of the type array, null given, called in /usr/share/nginx/www/dota2/includes/mappers/class.match_mapper_db.php on line 75 and defined in /usr/share/nginx/www/dota2/includes/models/class.slot.php on line 173
But if I use the match mapper web it works just fine.
Please add ranked lobby type id.
I would suggest adding this piece of code to match_mapper_db.php at line 46 (just after the db query).
//return false if match not found in db
if(!$match_info) {
return false;
}
{
"id": 16,
"name": "Captains Draft"
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.