uproargg / destiny-php
游戏《命运》的PHP API
Requires
- php: >=5.4.0
- guzzlehttp/guzzle: ^6.1|^6.2
- illuminate/support: ^5.1|^5.2|^5.3|^5.4
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- phpunit/phpunit: ~4.0
- vlucas/phpdotenv: ^2.0
README
这是一个由Bungie提供的《命运》API的简单易用的PHP包装器。它包括角色的装备、进度以及其他各种信息。
基本用法
使用composer require uproargg/destiny-php
安装最新稳定版本
<?php // Include the autoloader require 'vendor/autoload.php'; // Create a new instance of the client $destiny = new \Destiny\Destiny('YOUR_API_KEY'); // Find a player $player = $destiny->fetchXboxPlayer('aFreshMelon'); // Get the first character $firstCharacter = $player->characters->first(); // Output the characters level echo $firstCharacter->characterLevel;
文档
玩家
您可以在Xbox或PlayStation上找到任何《命运》玩家。这不会披露玩家是Xbox One、Xbox 360/PS4还是PS3,他们被平等对待。
要获取一个玩家,您需要创建API的基本类\Destiny\Destiny
的新实例。此类具有用于处理玩家的多个函数。
要找到任何Xbox游戏机上的玩家,只需使用fetchXboxPlayer
方法。如果您想找到来自任何PlayStation游戏机的玩家,该方法称为fetchPsnPlayer
。
$xboxPlayer = $destiny->fetchXboxPlayer('Player Name'); // Destiny\Game\Player $psnPlayer = $destiny->fetchPsnPlayer('Player_Name'); // Destiny\Game\Player
如果您想有一个用户选择搜索系统,有一个允许您动态指定要搜索的系统的方法。此方法称为fetchPlayer
,它的工作方式与前面相同,唯一的区别是它接受一个额外的参数作为系统数值。
平台使用数值标识。Xbox的数字为1,PlayStation的数字为2。整个系统中都是这样。
$anyPlayer = $destiny->fetchPlayer('PlayerName', 2); // Destiny\Game\Player
如果这些操作中有任何失败,将会抛出异常:\Destiny\Support\Exceptions\PlayerNotFoundException
。
如果您不是想要实际获取一个玩家,而是想查看一个玩家是否存在,您可以使用返回布尔值的playerExists
方法。此方法也需要玩家的平台。
$playerExists = $destiny->playerExists('PlayerName', 1); // boolean
获取玩家后,您将有一个新的\Destiny\Game\Player
实例,该实例也有许多函数并提供有关玩家的大量信息。
它有几个直接来自Bungie的属性,您可以将其作为常规公共属性访问,它们都是相当直观的。这些属性是iconPath
、membershipType
、membershipId
和displayName
。
echo $player->iconPath; // string echo $player->membershipType; // integer echo $player->membershipId; // integer echo $player->displayName; //string
玩家类还有一个名为characters
的属性。一旦初始化,玩家类将自动从Bungie获取与其关联的所有角色,并将它们存储在characters
属性中,作为\Destiny\Support\Collections\CharacterCollection
。此功能的解释将在下一节中说明。
炼金术师数据
您可以使用角色上的grimoireScore
属性轻松访问玩家的炼金术师评分,但有时您可能需要更多有关玩家炼金术数据的详细信息。
有一个方法可以轻松地让您检索一个玩家的炼金术分解数组,包括卡片描述和关于卡片的全部数据,包括到bungie.net的图形路径。
炼金术数据非常庞大且相当具体,因此默认情况下不会请求它,而是您可以自己使用fetchGrimoireData
方法请求它,这将返回一个包含大量卡片和信息的巨大数组。
$grimoireData = $player->fetchGrimoireData(); // array
角色
玩家的角色可以通过角色集合(\Destiny\Support\Collections\CharacterCollection
)访问,该集合会自动填充并在任何获取的玩家类中作为characters
属性提供。
集合类似于超级数组,它具有多种功能,可以轻松处理许多字符,包括获取类等功能。
CharacterCollection可以包含任意数量的\Destiny\Game\Character
实例,如果未对其进行修改,它将包含已获取玩家的角色数量。为了与特定角色一起工作,您需要从集合中获取它。
从CharacterCollection中获取角色的方法有很多。例如,要获取玩家上次玩过的角色,您将使用first
方法。您还可以使用firstWarlock
、firstTitan
或firstHunter
方法,这些方法都将返回一个明显类别的单个Character对象。如果您有不同类型的守护者,这特别有用。
$characters = $player->characters; // Destiny\Support\Collections\CharacterCollection $lastPlayedCharacter = $characters->first(); // Destiny\Game\Character $lastPlayedWarlock = $characters->firstWarlock(); // Destiny\Game\Character
当然,您可以用完全相同的方式一次性检索所有巫师、泰坦或猎人,甚至集合中的所有角色。这些方法非常简单,分别是getWarlocks
、getTitans
和getWarlocks
。这些方法都将返回只包含特定类别角色的数组。如果您想获取集合中的所有角色,请使用all
方法,它将返回一个包含集合中所有角色的数组。
$allWarlocks = $characters->getWarlocks(); // array $allCharacters = $characters->all(); // array
您还可以使用last
方法获取集合中的最后一个角色,或使用get
方法通过其在集合中的索引获取任何角色。此外,您可以使用count
方法计算玩家拥有的角色数量。
$lastCharacters = $characters->last(); // Destiny\Game\Character $allCharacters = $characters->get(2); // Destiny\Game\Character $numberOfCharacters = $characters->count(); // integer
一旦从集合中检索到角色,您将使用类型为\Destiny\Game\Character
的对象进行工作,该对象实际上并没有任何主要方法。
然而,角色类允许访问所有角色的重要数据。它将在未来扩展,但目前包括所有一般数据以及Inventory。
角色类有太多东西,所以我只会列出其中一些重要的。您始终可以var_dump一个角色类实例,看看它还准备了什么。
一些重要的角色属性包括characterLevel
、dateLastPlayed
、characterId
、classHash
和minutesPlayedThisSession
。这些只是它拥有的许多属性中的一部分,所以,再次,去探索吧。
echo $character->characterLevel; // integer echo $character->classHash; // integer
现在,您可能在上面的示例中遇到了classHash
。实际上,这是一个无法读取的整数,表示角色的类别。您不能单独使用它,但幸运的是,这个包附带了一个可以将这些和更多散列转换为单词的HashTranslator。
简单地创建一个新的\Destiny\Support\Translators\HashTranslator
实例,并对散列使用translate
方法。您可能会找到更多散列,这个翻译器只适用于少数几个。许多Destiny的散列都是动态的,并且具有非常长的数组值。
$translator = new \Destiny\Support\Translators\HashTranslator; echo $translator->translate($character->classHash); // string echo $translator->reverse($character->classHash); // integer
角色类包含了大量信息,也许最重要的信息来自另一个可以通过Character类中的inventory
属性访问的类。
进度/商人
与每个角色一起,也会获取进度数据。它包含各种有用的信息,其中最有用的可能是包含其中的供应商级别和进度。每种进度类型都存储为对象,并且它们都包含独特的信息。以下进度是可用的
您可以为上述任何密钥检索进度。
$progression = $character->progression; // Destiny\Support\Collections\ProgressionCollection $crucibleProgression = $progression->get('crucible'); // Destiny\Game\Progression $erisProgression = $progression->get('eris'); // Destiny\Game\Progression
Destiny\Game\Progression
返回的对象包含大量数据。它们的数据作为属性提供,因此您可以通过请求以下内容简单地将其作为Destiny\Game\Progression
对象的属性。
要获取这些属性之一,您只需像获取任何其他属性一样从 Destiny\Game\Progression
对象中检索它们。
$fwcProgression = $progression->get('fwc'); // Destiny\Game\Progression $fwcLevel = $fwcProgression->level; // integer $fwcProgressToNextLevel = $fwcProgression->progressToNextLevel; // integer
进度数据非常强大且丰富,它包含连公共接口(尚未?)都没有的内容,比如封禁进度和DLC派系。
活动数据
提供了一个用于检索活动数据的接口。由于每个角色都有大量的活动数据,因此这些数据不会自动获取。相反,有一个函数可以轻松检索各种活动数据。
活动数据类型繁多,因此这里列出了一个列表,供您在Character类的fetchActivityData
方法中选择。
然后,您可以使用此方法直接从Bungie检索响应数组,并对其进行任何处理。这可以让您确定副本完成情况、故事完成情况、黄昏完成情况和所有 sorts of PvP数据。如果您想收集一些统计数据,这非常实用。这些方法接受第二个参数,允许您接收每个活动返回的定义(名称、类型、各种信息)。默认设置为true,建议保持为true。
$raidData = $character->fetchActivityData(4); // array $controlData = $character->fetchActivityData(10); // array $controlDataWithoutExtraInfo = $character->fetchActivityData(10, false); // array
游戏后混乱报告
您可以使用辅助方法接收 crucible 匹配和所有其他活动的游戏后破坏报告。您需要从上述fetchActivityData
方法中获取活动ID。然后您可以在它上调用fetchPostGameCarnageReport
来接收关于总击杀、死亡和其他统计数据的信息。这也有一个定义的开关,建议保持打开。
$rumbleData = $character->fetchActivityData(13); // array $rumbleMatchId = $rumbleData['Response']['data']['activities'][0]['activityDetails']['instanceId']; // string $pgcr = $character->fetchPostGameCarnageReport($rumbleMatchId); // array $pgcrWithoutExtraInfo = $character->fetchPostGameCarnageReport($rumbleMatchId, false); // array
请注意,报告包括活动中每个玩家的关闭信息,因此您可以使用此报告获取与您一起玩过的任何人的信息。
库存
库存是《命运》角色最重要的方面之一。它可以从Character类的inventory
属性中获取,并且是\Destiny\Game\Inventory
类型的对象。它包含关于武器、盔甲以及您可能在某人的公共库存中找到的所有其他重要信息。
库存的所有方法都返回\Destiny\Game\Item
实例,它们只是信息的“持有者”。您可以使用Inventory类的方 法访问项目。有许多名称清晰的方 法可以获取您请求的任何项目。命名非常简单,我将只列出几个,您可以根据需要自行解决或查看代码。
$inventory = $character->inventory; // Destiny\Game\Inventory $primaryWeapon = $inventory->primary(); // Destiny\Game\Item $subclass = $inventory->subclass(); // Destiny\Game\Item $classItem = $inventory->classItem(); // Destiny\Game\Item
我将重申,如果您找不到您要找的内容,您总是可以查看代码。
Inventory类还有3个不同的函数。它们返回角色的Glimmer和传说徽章的整数值。令人惊讶的是,它们的名称是glimmer
和legendaryMarks
。
$legendaryMarks = $inventory->legendaryMarks(); // integer
然后检索的\Destiny\Game\Item
实例具有描述项目的属性。同样,这些属性太多,无法一一列出,我将只列出一些重要的属性,您可以根据需要自行解决。其中一些是itemHash
、itemName
、itemDescription
、icon
和itemTypeName
。当然,还有项目特定的属性等等,我强烈建议进一步查看所有这些类。
echo $item->itemName; // string echo $item->itemTypeName; // string
版权和许可证
版权所有2015年Sebastian Barfurth。许可协议为MIT许可。