Coder Social home page Coder Social logo

dota2-api's Introduction

#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:
{
    "require": {
        "kronusme/dota2-api": "2.2.1"
    }
}
  1. Connect to your mysql-server with any tool (phpmyadmin, heidisql etc) and execute code from the file db_latest.sql.

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

Type URL
Supported
GetMatchHistory https://api.steampowered.com/IDOTA2Match_570/GetMatchHistory/v001/
GetMatchDetails https://api.steampowered.com/IDOTA2Match_570/GetMatchDetails/v001/
GetPlayerSummaries https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/
GetLeagueListing https://api.steampowered.com/IDOTA2Match_570/GetLeagueListing/v0001/
GetLiveLeagueGames https://api.steampowered.com/IDOTA2Match_570/GetLiveLeagueGames/v0001/
GetTeamInfoByTeamID https://api.steampowered.com/IDOTA2Match_570/GetTeamInfoByTeamID/v001/
GetHeroes https://api.steampowered.com/IEconDOTA2_570/GetHeroes/v0001/
GetTournamentPrizePool https://api.steampowered.com/IEconDOTA2_570/GetTournamentPrizePool/v1/
GetGameItems https://api.steampowered.com/IEconDOTA2_570/GetGameItems/v0001/
Unsupported
EconomySchema https://api.steampowered.com/IEconItems_570/GetSchema/v0001/
GetMatchHistoryBySequenceNum https://api.steampowered.com/IDOTA2Match_570/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

<?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

  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.

dota2-api's People

Contributors

akrz avatar aldidoanta avatar boombatower avatar brian-mcg avatar cbighea avatar derain avatar kronusme avatar mburst avatar melkor217 avatar radonthetyrant avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.