glebsky/dota2-api

DotA 2 Web API PHP 包装器

2.2.2 2020-12-28 10:04 UTC

This package is auto-updated.

Last update: 2024-09-20 14:37:29 UTC


README

DotA2-Api

Latest Stable Version Total Downloads Latest Unstable Version License Coverage Status

关于

  1. 这是什么? 这是一个用于处理 DotA 2 API 请求的 PHP 代码。

  2. 它能做什么? 它可以获取满足某些条件的比赛列表,获取单个比赛的信息,获取用户的 Steam 个人资料信息。并且可以将所有这些数据保存到 MySQL 数据库中。更多详细信息请参阅 "如何使用它"。

  3. 使用它需要什么? 首先,您需要一个带有 PHP 5.3+(需要启用 PDOcURL)的 Web 服务器和 MySQL 5。然后查看安装部分。

安装

  1. 通过 Composer 安装
{
    "require": {
        "glebsky/dota2-api": "2.2.2"
    }
}

或者

composer require glebsky/dota2-api

  1. 使用任何工具(phpmyadmin,heidisql 等)连接到您的 mysql 服务器,并执行文件 db_latest.sql 中的代码。

  2. 像这样初始化 Dota2-Api

require_once 'vendor/autoload.php';

use Dota2Api\Api;

Api::init('YOUR_API_KEY', array('localhost', 'root', 'password', 'db_name', 'table_prefix_'));

请求

如何使用它

重要!

在解析和保存联赛比赛到您的数据库之前,请确保您已将联赛保存到数据库中(使用 leaguesMapperWeb!如果您尝试保存某些 "公开" 比赛,您应该在 matches 表中删除 foreign key 字段的 leagueid

加载一些比赛信息

<?php
$mm = new Dota2Api\Mappers\MatchMapperWeb(121995119);
$match = $mm->load();

$match - 它是一个对象,包含所有比赛数据,包括槽位信息、能力升级(如果提供)和选择、禁用(如果 cm 模式)。

将比赛信息保存到数据库

<?php
$mm = new Dota2Api\Mappers\MatchMapperWeb(121995119);
$match = $mm->load();
$saver = new Dota2Api\Mappers\MatchMapperDb();
$saver->save($match);

matchMapperDb 将检查具有 $match->get('match_id') 的比赛是否在数据库中存在,并选择保存方法(插入或更新)。

处理比赛对象

<?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());

我想获取某个玩家的最后 25 场比赛

<?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);
    }
}

获取玩家信息

<?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::convertId('xxxxx') 方法获取玩家的 id(xxxxx - 它是 DotA ID)。

获取团队信息

<?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());
}

获取当前英雄列表

<?php
$heroesMapper = new Dota2Api\Mappers\HeroesMapper();
$heroes = $heroesMapper->load();
print_r($heroes);

$heroes - 数组,具有数字索引(英雄 id)

获取当前物品列表

<?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');
}

将接收到的来自网络的物品列表保存到数据库

<?php
$itemsMapperWeb = new Dota2Api\Mappers\ItemsMapperWeb();
$items = $itemsMapperWeb->load();
$itemsMapperDb = new itemsMapperDb();
$itemsMapperDb->save($items);

从数据库获取当前物品列表

<?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');
}

获取联赛列表

<?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 - 数组,具有数字索引(联赛 id)

获取联赛奖金池

$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);
}

获取实时联赛比赛

<?php
$leagueMapper = new Dota2Api\Mappers\LeagueMapper(22); // set league id (can be get via leagues_mapper)
$games = $leagueMapper->load();
print_r($games);

$games - live_match 对象的数组

从本地数据库获取比赛

<?php
$matchesMapperDb = new Dota2Api\Mappers\MatchesMapperDb();
$matchesMapperDb->setLeagueId(29)->setMatchesRequested(1);
$matchesInfo = $matchesMapperDb->load();
print_r($matchesInfo);

从本地数据库删除比赛

<?php
$matchesMapperDb = new Dota2Api\Mappers\MatchesMapperDb();
$matchesMapperDb->delete(array(151341579, 151401247));

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

获取关于能力、英雄、物品、游戏模组、大厅类型等信息

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

获取有兵营和塔楼的地图

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

从数据库获取有关玩家的信息

<?php
$playersMapperDb = new Dota2Api\Mappers\PlayersMapperDb();
$players_info = $playersMapperDb->addId('76561198020176880')->addId('76561197998200662')->load();
print_r($players_info);

或只需获取一个玩家,您也可以使用

<?php
$playerMapperDb = new Dota2Api\Mappers\PlayerMapperDb();
$playerMapperDb->setSteamid('76561198020176880');
print_r($playerMapperDb->load());

将有关玩家的信息保存到数据库

<?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);
}

处理 UGC 对象

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

感谢

由 Glebsky 更新