dota2-api

by kronusme

kronusme /dota2-api

DotA 2 Web API PHP wrapper

447 Stars 212 Forks Last release: about 4 years ago (v2.2.1) MIT License 312 Commits 7 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

DotA2-Api

Build Status Coverage Status License Latest Stable Version Dependencies Code Climate

About

  1. What is it? This is PHP code for processing DotA 2 API-requests.

  2. 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".

  3. 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

  1. Install via Composer:

    json
    {
    "require": {
        "kronusme/dota2-api": "2.2.1"
    }
    }
    
  2. Connect to your mysql-server with any tool (phpmyadmin, heidisql etc) and execute code from the file db_latest.sql.

  3. Initialize Dota2-Api like this: ````php require_once 'vendor/autoload.php';

use Dota2Api\Api;

Api::init('YOURAPIKEY', array('localhost', 'root', 'password', 'dbname', 'tableprefix_')); ````

Requests

| Type | URL | |------------------------------|----------------------------------------------------------------------------------| | Supported | | | GetMatchHistory | https://api.steampowered.com/IDOTA2Match570/GetMatchHistory/v001/ | | GetMatchDetails | https://api.steampowered.com/IDOTA2Match570/GetMatchDetails/v001/ | | GetPlayerSummaries | https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/ | | GetLeagueListing | https://api.steampowered.com/IDOTA2Match570/GetLeagueListing/v0001/ | | GetLiveLeagueGames | https://api.steampowered.com/IDOTA2Match570/GetLiveLeagueGames/v0001/ | | GetTeamInfoByTeamID | https://api.steampowered.com/IDOTA2Match570/GetTeamInfoByTeamID/v001/ | | GetHeroes | https://api.steampowered.com/IEconDOTA2570/GetHeroes/v0001/ | | GetTournamentPrizePool | https://api.steampowered.com/IEconDOTA2570/GetTournamentPrizePool/v1/ | | GetGameItems | https://api.steampowered.com/IEconDOTA2570/GetGameItems/v0001/ | | Unsupported | | | EconomySchema | https://api.steampowered.com/IEconItems570/GetSchema/v0001/ | | GetMatchHistoryBySequenceNum | https://api.steampowered.com/IDOTA2Match570/GetMatchHistoryBySequenceNum/v0001/ |

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

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

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

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

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

addId('76561198067833250')->addId('76561198058587506')->load();
foreach($playersInfo as $playerInfo) {
    echo $playerInfo->get('realname');
    echo ''.$playerInfo->get('personaname').'';
    echo ''.$playerInfo->get('personaname').'\'s steam profile';
}
print_r($playersInfo);

Player's id you can get via Player::convertId('xxxxx') method (xxxxx - its DotA ID).

Get team info

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

load();
print_r($heroes);

$heroes - array with numeric indexes (heroes ids)

Get current items list

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

load();
$itemsMapperDb = new itemsMapperDb();
$itemsMapperDb->save($items);

Get current items list from db

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

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

load();
print_r($games);

$games - array of live_match objects

Get matches from local db

setLeagueId(29)->setMatchesRequested(1);
$matchesInfo = $matchesMapperDb->load();
print_r($matchesInfo);

Delete match(es) from local db

delete(array(151341579, 151401247));

$mm = new Dota2Api\Mappers\MatchMapperDb(); $mm->delete(151341579);

Get info about abilities, heroes, items, games mods, lobby types etc

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

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

addId('76561198020176880')->addId('76561197998200662')->load();
print_r($players_info);

or for just getting one player, you can also use

php
setSteamid('76561198020176880');
print_r($playerMapperDb->load());

Save info about players into db

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

load();
$ugcMapperWeb = new Dota2Api\Mappers\UgcMapperWeb($game->get('radiant_logo'));
$logoData = $ugcMapperWeb->load();
var_dump($logoData);
echo $logoData->url;

Thanks

  1. Valve for DotA 2 and Web API.

  2. MuppetMaster42, for http://dev.dota2.com/showthread.php?t=58317.

  3. Players, who don't hide their own statistic.

  4. dev.dota2 community.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.