kronusme / dota2-api
DotA 2 Web API PHP wrapper
Installs: 2 702
Dependents: 0
Suggesters: 0
Security: 0
Stars: 474
Watchers: 66
Forks: 253
Open Issues: 20
Requires
- php: >5.2
Requires (Dev)
- phpunit/dbunit: >=1.2
- phpunit/phpunit: 4.4.*
- satooshi/php-coveralls: ~1.0
- sebastianbergmann/phpcov: 1.1.0
- squizlabs/php_codesniffer: 2.*
This package is not auto-updated.
Last update: 2024-12-21 15:24:11 UTC
README
#DotA2-Api
About
-
What is it? This is PHP code for processing DotA 2 API-requests.
-
What can it do? It can get match-list for some criteria, get match-info for single match, get steam-profile info for users. AND save all this data in MySQL database. For more information see - "How to use it".
-
What I need to work with it? First of all you need web-server with PHP 5.3+ ( PDO and cURL should be enabled) and MySQL 5. Then look at install section.
Install
- Install via Composer:
{ "require": { "kronusme/dota2-api": "2.2.1" } }
-
Connect to your mysql-server with any tool (phpmyadmin, heidisql etc) and execute code from the file db_latest.sql.
-
Initialize Dota2-Api like this:
require_once 'vendor/autoload.php'; use Dota2Api\Api; Api::init('YOUR_API_KEY', array('localhost', 'root', 'password', 'db_name', 'table_prefix_'));
Requests
How to use it
IMPORTANT!
Before parsing and saving leagues matches to your DB, make sure that you've saved leagues to the DB (using leaguesMapperWeb
!
If you try to save some "public" matches, you should REMOVE foreign key
for field leagueid
in the table matches
!
Load some match-info
<?php $mm = new Dota2Api\Mappers\MatchMapperWeb(121995119); $match = $mm->load();
$match - it's an object with all match data including slots info, ability-upgrades (if provided) and pick, bans (if cm-mode).
Save match-info in the database
<?php $mm = new Dota2Api\Mappers\MatchMapperWeb(121995119); $match = $mm->load(); $saver = new Dota2Api\Mappers\MatchMapperDb(); $saver->save($match);
matchMapperDb will check if match with $match->get('match_id') exists in the db and select method for save (insert or update).
Work with match-object
<?php $mm = new Dota2Api\Mappers\MatchMapperWeb(121995119); $match = $mm->load(); echo $match->get('match_id'); echo $match->get('start_time'); echo $match->get('game_mode'); $slots = $match->getAllSlots(); foreach($slots as $slot) { echo $slot->get('last_hits'); } print_r($match->getDataArray()); print_r($match->getSlot(0)->getDataArray());
I want get last 25 matches with some player
<?php $matchesMapperWeb = new Dota2Api\Mappers\MatchesMapperWeb(); $matchesMapperWeb->setAccountId(93712171); $matchesShortInfo = $matchesMapperWeb->load(); foreach ($matchesShortInfo as $key=>$matchShortInfo) { $matchMapper = new Dota2Api\Mappers\MatchMapperWeb($key); $match = $matchMapper->load(); if ($match) { $mm = new Dota2Api\Mappers\MatchMapperDb(); $mm->save($match); } }
Get player info
<?php $playersMapperWeb = new Dota2Api\Mappers\PlayersMapperWeb(); $playersInfo = $playersMapperWeb->addId('76561198067833250')->addId('76561198058587506')->load(); foreach($playersInfo as $playerInfo) { echo $playerInfo->get('realname'); echo '<img src="'.$playerInfo->get('avatarfull').'" alt="'.$playerInfo->get('personaname').'" />'; echo '<a href="'.$playerInfo->get('profileurl').'">'.$playerInfo->get('personaname').'\'s steam profile</a>'; } print_r($playersInfo);
Player's id you can get via Player::convertId('xxxxx') method (xxxxx - its DotA ID).
Get team info
<?php $teamsMapperWeb = new Dota2Api\Mappers\TeamsMapperWeb(); $teams = $teamsMapperWeb->setTeamId(2)->setTeamsRequested(2)->load(); foreach($teams as $team) { echo $team->get('name'); echo $team->get('rating'); echo $team->get('country_code'); print_r($team->getAllLeaguesIds()); }
Get current heroes list
<?php $heroesMapper = new Dota2Api\Mappers\HeroesMapper(); $heroes = $heroesMapper->load(); print_r($heroes);
$heroes - array with numeric indexes (heroes ids)
Get current items list
<?php $itemsMapperWeb = new Dota2Api\Mappers\ItemsMapperWeb(); $itemsInfo = $itemsMapperWeb->load(); print_r($itemsInfo); foreach($itemsInfo as $item) { echo $item->get('id'); echo $item->get('name'); echo $item->get('cost'); echo $item->get('secret_shop'); echo $item->get('side_shop'); echo $item->get('recipe'); echo $item->get('localized_name'); }
Save received from web items list to db
<?php $itemsMapperWeb = new Dota2Api\Mappers\ItemsMapperWeb(); $items = $itemsMapperWeb->load(); $itemsMapperDb = new itemsMapperDb(); $itemsMapperDb->save($items);
Get current items list from db
<?php $itemsMapperDb = new Dota2Api\Mappers\ItemsMapperDb(); $itemsInfo = $itemsMapperDb->load(); print_r($itemsInfo); foreach($itemsInfo as $item) { echo $item->get('id'); echo $item->get('name'); echo $item->get('cost'); echo $item->get('secret_shop'); echo $item->get('side_shop'); echo $item->get('recipe'); echo $item->get('localized_name'); }
Get leagues list
<?php $leaguesMapperWeb = new Dota2Api\Mappers\LeaguesMapperWeb(); $leagues = $leaguesMapperWeb->load(); foreach($leagues as $league) { echo $league->get('description'); if ($league->get('tournament_url')) { echo $league->get('tournament_url'); } }
$leagues - array with numeric indexes (leagues ids)
Get leagues prize pool
$leaguePrizePoolMapperWeb = new Dota2Api\Mappers\LeaguePrizePoolMapperWeb(); $leaguePrizePoolMapperWeb->setLeagueId(600); $prizePoolInfo = $leaguePrizePoolMapperWeb->load(); print_r($prizePoolInfo); echo $prizePoolInfo['prize_pool']; echo $prizePoolInfo['league_id']; echo $prizePoolInfo['status']; // may be undefined
$prizePoolMapperDb = new Dota2Api\Mappers\LeaguePrizePoolMapperDb(); $pp = $prizePoolMapperDb->setLeagueId(600)->load(); foreach($pp as $date=>$prize_pool) { echo $date.' - $ '.number_format($prize_pool, 2); }
Get live leagues matches
<?php $leagueMapper = new Dota2Api\Mappers\LeagueMapper(22); // set league id (can be get via leagues_mapper) $games = $leagueMapper->load(); print_r($games);
$games - array of live_match objects
Get matches from local db
<?php $matchesMapperDb = new Dota2Api\Mappers\MatchesMapperDb(); $matchesMapperDb->setLeagueId(29)->setMatchesRequested(1); $matchesInfo = $matchesMapperDb->load(); print_r($matchesInfo);
Delete match(es) from local db
<?php $matchesMapperDb = new Dota2Api\Mappers\MatchesMapperDb(); $matchesMapperDb->delete(array(151341579, 151401247)); $mm = new Dota2Api\Mappers\MatchMapperDb(); $mm->delete(151341579);
Get info about abilities, heroes, items, games mods, lobby types etc
<?php $abilities = new Dota2Api\Data\Abilities(); $abilities->parse(); $abilities->getDataById(5172); // return array for ability with id 5172 (BeastMaster Inner Beast) // same, because there are no thumbs for abilities $abilities->getImgUrlById(5172, false); $abilities->getImgUrlById(5172); $heroes = new Dota2Api\Data\Heroes(); $heroes->parse(); $heroes->getDataById(97); // get info about Magnus $heroes->getImgUrlById(97, false); // large image $heroes->getImgUrlById(97); // thumb $items = new Dota2Api\Data\Items(); $items->parse(); $items->getDataById(149); // get info about Crystalis $items->getImgUrlById(149, false); // large image $items->getImgUrlById(149); // thumb $mods = new Dota2Api\Data\Mods(); $mods->parse(); $mods->getFieldById(1, 'name'); // returns 'All Pick' $lobbies = new Dota2Api\Data\Lobbies(); $lobbies->parse(); $lobbies->getFieldById(2, 'name'); // returns 'Tournament' $regions = new Dota2Api\Data\Regions(); $regions->parse(); $regions->getFieldById(132, 'name'); // returns 'Europe West'
Get map with barracks and towers
<?php $matchMapperWeb = new Dota2Api\Mappers\MatchMapperWeb(123456789); $match = $matchMapperWeb->load(); $map = new Dota2Api\Utils\Map($match->get('tower_status_radiant'), $match->get('tower_status_dire'), $match->get('barracks_status_radiant'), $match->get('barracks_status_dire')); $canvas = $map->getImage(); header('Content-Type: image/jpg'); imagejpeg($canvas); imagedestroy($canvas);
Get info about players from db
<?php $playersMapperDb = new Dota2Api\Mappers\PlayersMapperDb(); $players_info = $playersMapperDb->addId('76561198020176880')->addId('76561197998200662')->load(); print_r($players_info);
or for just getting one player, you can also use
<?php $playerMapperDb = new Dota2Api\Mappers\PlayerMapperDb(); $playerMapperDb->setSteamid('76561198020176880'); print_r($playerMapperDb->load());
Save info about players into db
<?php //fetch players from API $playersMapperWeb = new Dota2Api\Mappers\PlayersMapperWeb(); $players = $playersMapperWeb->addId('76561198020176880')->addId('76561197998200662')->load(); //save players into db $playerMapperDb = new Dota2Api\Mappers\PlayerMapperDb(); foreach($players as $p) { $playerMapperDb->save($p); }
Work with UGC Objects
<?php $matchMapperWeb = new Dota2Api\Mappers\MatchMapperWeb(37633163); $game = $matchMapperWeb->load(); $ugcMapperWeb = new Dota2Api\Mappers\UgcMapperWeb($game->get('radiant_logo')); $logoData = $ugcMapperWeb->load(); var_dump($logoData); echo $logoData->url;
Thanks
-
Valve for DotA 2 and Web API.
-
MuppetMaster42, for http://dev.dota2.com/showthread.php?t=58317.
-
Players, who don't hide their own statistic.
-
dev.dota2 community.