glebsky / dota2-api
DotA 2 Web API PHP 包装器
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 auto-updated.
Last update: 2024-09-20 14:37:29 UTC
README
DotA2-Api
关于
-
这是什么? 这是一个用于处理 DotA 2 API 请求的 PHP 代码。
-
它能做什么? 它可以获取满足某些条件的比赛列表,获取单个比赛的信息,获取用户的 Steam 个人资料信息。并且可以将所有这些数据保存到 MySQL 数据库中。更多详细信息请参阅 "如何使用它"。
-
使用它需要什么? 首先,您需要一个带有 PHP 5.3+(需要启用 PDO 和 cURL)的 Web 服务器和 MySQL 5。然后查看安装部分。
安装
- 通过 Composer 安装
{ "require": { "glebsky/dota2-api": "2.2.2" } }
或者
composer require glebsky/dota2-api
-
使用任何工具(phpmyadmin,heidisql 等)连接到您的 mysql 服务器,并执行文件 db_latest.sql 中的代码。
-
像这样初始化 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 更新