Repository: syntaxerrors/Steam Branch: master Commit: c4524c68b946 Files: 76 Total size: 5.2 MB Directory structure: gitextract_x0i0506c/ ├── .github/ │ └── workflows/ │ └── php.yml ├── .gitignore ├── LICENSE ├── README.md ├── composer.json ├── docker/ │ └── php/ │ └── 8.1/ │ └── Dockerfile ├── docker-compose.yml ├── examples/ │ ├── app/ │ │ ├── GetAppList.txt │ │ └── appDetails.txt │ ├── global/ │ │ └── convertId.txt │ ├── group/ │ │ └── GetGroupSummary.txt │ ├── item/ │ │ └── GetPlayerItems.txt │ ├── news/ │ │ └── GetNewsForApp.txt │ ├── package/ │ │ └── packageDetails.txt │ ├── player/ │ │ ├── GetBadges.txt │ │ ├── GetCommunityBadgeProgress.txt │ │ ├── GetOwnedGames.txt │ │ ├── GetPlayerLevelDetails.txt │ │ ├── GetRecentlyPlayedGames.txt │ │ ├── GetSteamLevel.txt │ │ └── IsPlayingSharedGame.txt │ └── user/ │ ├── GetFriendList.txt │ ├── GetPlayerBans.txt │ ├── GetPlayerSummaries.txt │ ├── ResolveVanityURL.txt │ └── stats/ │ ├── GetGlobalAchievementPercentageForApp.txt │ ├── GetPlayerAchievements.txt │ ├── GetSchemaForGame.txt │ ├── GetUserStatsForGame.txt │ └── GetUserStatsForGameAll.txt ├── phpunit.xml ├── rector.php ├── src/ │ ├── Syntax/ │ │ └── SteamApi/ │ │ ├── Client.php │ │ ├── Containers/ │ │ │ ├── Achievement.php │ │ │ ├── App.php │ │ │ ├── BaseContainer.php │ │ │ ├── Game.php │ │ │ ├── GameDetails.php │ │ │ ├── Group/ │ │ │ │ ├── Details.php │ │ │ │ └── MemberDetails.php │ │ │ ├── Group.php │ │ │ ├── Id.php │ │ │ ├── Item.php │ │ │ ├── Package.php │ │ │ ├── Player/ │ │ │ │ └── Level.php │ │ │ └── Player.php │ │ ├── Exceptions/ │ │ │ ├── ApiArgumentRequired.php │ │ │ ├── ApiCallFailedException.php │ │ │ ├── ClassNotFoundException.php │ │ │ ├── InvalidApiKeyException.php │ │ │ └── UnrecognizedId.php │ │ ├── Facades/ │ │ │ └── SteamApi.php │ │ ├── Inventory.php │ │ ├── Resources/ │ │ │ └── countries.json │ │ ├── Steam/ │ │ │ ├── App.php │ │ │ ├── Group.php │ │ │ ├── Item.php │ │ │ ├── News.php │ │ │ ├── Package.php │ │ │ ├── Player.php │ │ │ ├── User/ │ │ │ │ └── Stats.php │ │ │ └── User.php │ │ ├── SteamApiServiceProvider.php │ │ └── SteamId.php │ └── config/ │ ├── .gitkeep │ └── config.php └── tests/ ├── AppTest.php ├── BaseTester.php ├── GroupTest.php ├── IdTest.php ├── ItemTest.php ├── NewsTest.php ├── PackageTest.php ├── PlayerTest.php ├── UserStatsTest.php └── UserTest.php ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/php.yml ================================================ name: Unit Tests on: push: workflow_dispatch: schedule: - cron: "0 0 1 * *" jobs: test: runs-on: ubuntu-latest strategy: matrix: php: [ '8.1', '8.2', '8.3' ] continue-on-error: true steps: - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} extensions: bcmath, simplexml, libxml, curl, json, sodium coverage: pcov - name: Mitigate Composer lock issues run: composer update - name: PHP ${{ matrix.php }} - Validate composer.json and composer.lock run: composer validate - name: PHP ${{ matrix.php }} - Cache Composer packages id: composer-cache uses: actions/cache@v4 with: path: vendor key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-php- - name: PHP ${{ matrix.php }} - Install dependencies if: steps.composer-cache.outputs.cache-hit != 'true' run: composer install - name: PHP ${{ matrix.php }} - Run coverage test suite env: apiKey: ${{ secrets.STEAM_API_KEY }} run: composer run-script test - name: Publish Test Coverage uses: paambaati/codeclimate-action@v6 if: ${{ matrix.php }} == '8.1' && ${{ github.ref }} == 'master' env: apiKey: ${{ secrets.STEAM_API_KEY }} CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }} XDEBUG_MODE: coverage with: coverageCommand: composer run-script coverage coverageLocations: ${{github.workspace}}/coverage.clover:clover debug: true - uses: sarisia/actions-status-discord@v1 if: ${{ failure() }} with: status: ${{ job.status }} webhook: ${{ secrets.DISCORD_WEBHOOK }} title: "${{ matrix.php }}: Tests failed." color: 'red' ================================================ FILE: .gitignore ================================================ /.idea /vendor /coverage composer.phar .DS_Store ocular.phar uploadTests.sh .env .phpunit.* *.clover ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) 2015 Travis Blasingame Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # Steam API [![Join the chat at https://gitter.im/syntaxerrors/Steam](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/syntaxerrors/Steam?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) ![Unit Tests](https://github.com/syntaxerrors/Steam/workflows/Unit%20Tests/badge.svg) [![Maintainability](https://api.codeclimate.com/v1/badges/eb99d8de80e750fd4c27/maintainability)](https://codeclimate.com/github/syntaxerrors/Steam/maintainability) [![Latest Stable Version](https://poser.pugx.org/syntax/steam-api/v/stable.svg)](https://packagist.org/packages/syntax/steam-api) [![Total Downloads](https://poser.pugx.org/syntax/steam-api/downloads.svg)](https://packagist.org/packages/syntax/steam-api) [![License](https://poser.pugx.org/syntax/steam-api/license.svg)](https://packagist.org/packages/syntax/steam-api) **Version Support** `Laravel >= 10.0` `PHP >= 8.1` - [Installation](#installation) - [Usage](#usage) - [Contributors](#contributors) This package provides an easy way to get details from the Steam API service. The services it can access are: - `ISteamNews` - `IPlayerService` - `ISteamUser` - `ISteamUserStats` - `ISteamApp` ## Installation Begin by installing this package with composer. "require": { "syntax/steam-api": "3.*" } Next, update composer from the terminal. composer update syntax/steam-api > Alternately, you can run "composer require syntax/steam-api:dev-master" from the command line. Lastly, publish the config file. You can get your API key from [Steam](http://steamcommunity.com/dev/apikey). php artisan vendor:publish --provider="Syntax\SteamApi\SteamApiServiceProvider" ## Usage ```php use Syntax\SteamApi\Facades\SteamApi; /** Get Portal 2 */ $apps = SteamApi::app()->appDetails(620); echo $app->first()->name; ``` Each service from the Steam API has its own methods you can use. - [Global](#global) - [News](#news) - [Player](#player) - [User](#user) - [User Stats](#user-stats) - [App](#app) - [Package](#package) - [Item](#item) - [Group](#group) ### Global These are methods that are available to each service. #### convertId This will convert the given steam ID to each type of steam ID (64 bit, 32 bit and steam ID3). ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- id| string | The id you want to convert | Yes format | string | The format you want back. | No | null > Possible formats are ID64, id64, 64, ID32, id32, 32, ID3, id3 and 3. ##### Example usage ```php SteamApi::convertId($id, $format); ``` > Example Output: [convertId](./examples/global/convertId.txt) ### News The [Steam News](https://developer.valvesoftware.com/wiki/Steam_Web_API#GetNewsForApp_.28v0002.29) web api is used to get articles for games. ```php SteamApi::news() ``` #### GetNewsForApp This method will get the news articles for a given app ID. It has three parameters. ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- appId| int | The id for the app you want news on | Yes count | int | The number of news items to return | No | 5 maxlength | int | The maximum number of characters to return | No | null ##### Example usage ```php GetNewsForApp($appId, 5, 500)->newsitems; ?> ``` > Example Output: [GetNewsForApp](./examples/news/GetNewsForApp.txt) ### Player The [Player Service](https://developer.valvesoftware.com/wiki/Steam_Web_API#GetOwnedGames_.28v0001.29) is used to get details on players. When instantiating the player class, you are required to pass a steamId or Steam community ID. ```php SteamApi::player($steamId) ``` #### GetSteamLevel This method will return the level of the Steam user given. It simply returns the integer of their current level. > Example Output: [GetSteamLevel](./examples/player/GetSteamLevel.txt) #### GetPlayerLevelDetails This will return a Syntax\Containers\Player_Level object with full details for the players level. > Example Output: [GetPlayerLevelDetails](./examples/player/GetPlayerLevelDetails.txt) #### GetBadges This call will give you a list of the badges that the player currently has. There is currently no schema for badges, so all you will get is the ID and details. > Example Output: [GetBadges](./examples/player/GetBadges.txt) #### GetOwnedGames GetOwnedGames returns a list of games a player owns along with some playtime information, if the profile is publicly visible. Private, friends-only, and other privacy settings are not supported unless you are asking for your own personal details (i.e. the WebAPI key you are using is linked to the steamID you are requesting). ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- includeAppInfo| boolean | Whether or not to include game details | No | true includePlayedFreeGames | boolean | Whether or not to include free games | No | false appIdsFilter | array | An array of appIds. These will be the only ones returned if the user has them | No | array() > Example Output: [GetOwnedGames](./examples/player/GetOwnedGames.txt) #### GetRecentlyPlayedGames GetRecentlyPlayedGames returns a list of games a player has played in the last two weeks, if the profile is publicly visible. Private, friends-only, and other privacy settings are not supported unless you are asking for your own personal details (i.e. the WebAPI key you are using is linked to the steamID you are requesting). ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- count| int | The number of games to return | No | null > Example Output: [GetRecentlyPlayedGames](./examples/player/GetRecentlyPlayedGames.txt) #### IsPlayingSharedGame IsPlayingSharedGame returns the original owner's SteamID if a borrowing account is currently playing this game. If the game is not borrowed or the borrower currently doesn't play this game, the result is always 0. ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- appId| int | The game to check for | Yes | > Example Output: [IsPlayingSharedGame](./examples/player/IsPlayingSharedGame.txt) ### User The [User](https://developer.valvesoftware.com/wiki/Steam_Web_API#GetFriendList_.28v0001.29) WebAPI call is used to get details about the user specifically. When instantiating the user class, you are required to pass at least one steamId or steam community ID. ```php SteamApi::user($steamId) ``` #### ResolveVanityURL This will return details on the user from their display name. ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- displayName| string | The display name to get the steam ID for. In `http://steamcommunity.com/id/gabelogannewell` it would be `gabelogannewell`. | Yes | NULL ```php $player = SteamApi::user($steamId)->ResolveVanityURL('gabelogannewell'); ``` > Example Output: [ResolveVanityURL](./examples/user/ResolveVanityURL.txt) #### GetPlayerSummaries This will return details on one or more users. ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- steamId| int[] | An array of (or singular) steam ID(s) to get details for | No | Steam ID passed to user() ```php // One user $steamId = 76561197960287930; $player = SteamApi::user($steamId)->GetPlayerSummaries()[0]; // Several users $steamIds = [76561197960287930, 76561197968575517] $players = SteamApi::user($steamIds)->GetPlayerSummaries(); ``` > Example Output: [GetPlayerSummaries](./examples/user/GetPlayerSummaries.txt) #### GetFriendList Returns the friend list of any Steam user, provided his Steam Community profile visibility is set to "Public". ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- relationship| string (all or friend) | The type of friends to get | No | all summaries| bool (true or false) | To return the friend player summaries, or only steamIds | No | true Once the list of friends is gathered, if `summaries` is not set to `false`; it is passed through [GetPlayerSummaries](#GetPlayerSummaries). This allows you to get back a collection of Player objects. > Example Output: [GetFriendList](./examples/user/GetFriendList.txt) #### GetPlayerBans Returns the possible bans placed on the provided steam ID(s). ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- steamId| int[] | An array of (or singular) steam id(s) to get details for | No | Steam id passed to user() > Example Output: [GetPlayerBans](./examples/user/GetPlayerBans.txt) ### User Stats The [User Stats](https://developer.valvesoftware.com/wiki/Steam_Web_API#GetPlayerAchievements_.28v0001.29) WebAPI call is used to get details about a user's gaming. When instantiating the user stats class, you are required to pass a steamID or Steam community ID. ```php SteamApi::userStats($steamId) ``` #### GetPlayerAchievements Returns a list of achievements for this user by app ID. ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- appId| int | The id of the game you want the user's achievements in | Yes | > Example Output: [GetPlayerAchievements](./examples/user/stats/GetPlayerAchievements.txt) #### GetGlobalAchievementPercentagesForApp This method will return a list of all achievements for the specified game and the percentage of all users that have unlocked each achievement. ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- appId| int | The ID of the game you want the user's achievements in | Yes | > Example Output: [GetGlobalAchievementPercentagesForApp](./examples/user/stats/GetGlobalAchievementPercentageForApp.txt) #### GetUserStatsForGame Returns a list of achievements for this user by app ID. ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- appId| int | The ID of the game you want the user's achievements in | Yes | all| boolean | If you want all stats and not just the achievements set to true.| No | FALSE > Example Output: [GetUserStatsForGame](./examples/user/stats/GetUserStatsForGame.txt) | [GetUserStatsForGame (all)](./examples/user/stats/GetUserStatsForGameAll.txt) #### GetSchemaForGame Returns a list of game details, including achievements and stats. ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- appId| int | The ID of the game you want the details for. | Yes | > Example Output: [GetSchemaForGame](./examples/user/stats/GetSchemaForGame.txt) ### App This area will get details for games. ```php SteamApi::app() ``` #### appDetails This gets all the details for a game. This is most of the information from the store page of a game. ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- appIds| int[] | The ids of the games you want details for | Yes | cc | string | The cc is the country code, you can get appropriate currency values according to [ISO 3166-1](https://wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) | No | l | string | The l is the language parameter, you can get the appropriate language according to [ISO 639-1](https://wikipedia.org/wiki/List_of_ISO_639-1_codes) | No | > Example Output: [appDetails](./examples/app/appDetails.txt) #### GetAppList This method will return an array of app objects directly from Steam. It includes the appID and the app name. > Example Output: [GetAppList](./examples/app/GetAppList.txt) ### Package This method will get details for packages. ```php SteamApi::package() ``` #### packageDetails This gets all the details for a package. This is most of the information from the store page of a package. ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- packIds| int[] | The ids of the packages you want details for | Yes | cc | string | The cc is the country code, you can get appropriate currency values according to [ISO 3166-1](https://wikipedia.org/wiki/ISO_3166-1) | No | l | string | The l is the language parameter, you can get the appropriate language according to [ISO 639-1](https://wikipedia.org/wiki/ISO_639-1) (If there is one) | No | > Example Output: [packageDetails](./examples/package/packageDetails.txt) ### Item This method will get user inventory for item. ```php SteamApi::item() ``` #### GetPlayerItems This gets all the item for a user inventory. ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- appId| int | The appid of the game you want for | Yes | steamid | int | The steamid of the Steam user you want for | Yes | ⚠️ **Now known to supports**:`440`, `570`, `620`, `730`, `205790`, `221540`, `238460` > Example Output: [GetPlayerItems](./examples/item/GetPlayerItems.txt) ### Group This service is used to get details on a Steam group. ```php SteamApi::group() ``` #### GetGroupSummary This method will get the details for a group. ##### Arguments Name | Type | Description | Required | Default -----|------|-------------|----------|--------- group| string or int | The ID or the name of the group. | Yes ##### Example usage ```php GetGroupSummary('Valve'); ?> ``` > Example Output: [GetGroupSummary](./examples/group/GetGroupSummary.txt) ## Testing the Steam Package A Steam API key must be provided or most tests will fail. **Run Tests** ``` # Build container docker-compose build # Install dependancies docker-compose run --rm php composer install # Run tests (assumes apiKey is set in .env file) docker-compose run --rm php composer test # Or with the apiKey inline docker-compose run --rm -e api=YOUR_STEAM_API_KEY php composer test # With coverage docker-compose run --rm php composer coverage # Play around docker-compose run --rm php bash ``` ## Contributors - [Stygiansabyss](https://github.com/stygiansabyss) - [nicekiwi](https://github.com/nicekiwi) - [rannmann](https://github.com/rannmann) - [Amegatron](https://github.com/Amegatron) - [mjmarianetti](https://github.com/mjmarianetti) - [MaartenStaa](https://github.com/MaartenStaa) - [JRizzle88](https://github.com/JRizzle88) - [jastend](https://github.com/jastend) - [Teakowa](https://github.com/Teakowa) - [Ben Sherred](https://github.com/bensherred) ================================================ FILE: composer.json ================================================ { "name": "syntax/steam-api", "description": "A steam-api client for Laravel 10+", "version": "3.0.0", "license": "MIT", "authors": [ { "name": "Stygian", "email": "stygian.warlock.v2@gmail.com" } ], "require": { "php": "^8.1", "laravel/framework": "^10.0|^11.0", "guzzlehttp/guzzle": "^7.8", "ext-bcmath": "*", "ext-simplexml": "*", "ext-libxml": "*", "ext-curl": "*", "ext-json": "*" }, "require-dev": { "phpunit/phpunit": "^10.5|^11.0", "orchestra/testbench": "^8.0", "vlucas/phpdotenv": "^5.6", "rector/rector": "^1.0" }, "autoload": { "psr-4": { "Syntax\\SteamApi\\": "src/Syntax/SteamApi" } }, "extra": { "laravel": { "providers": [ "Syntax\\SteamApi\\SteamApiServiceProvider" ] } }, "minimum-stability": "stable", "scripts": { "test": "XDEBUG_MODE=off vendor/bin/phpunit -d memory_limit=512M", "coverage": "XDEBUG_MODE=coverage vendor/bin/phpunit -d memory_limit=512M --coverage-clover=coverage.clover", "coverage:html": "XDEBUG_MODE=coverage vendor/bin/phpunit -d memory_limit=512M --coverage-html ./coverage" } } ================================================ FILE: docker/php/8.1/Dockerfile ================================================ FROM php:8.1-alpine # Install deps RUN apk --update add linux-headers bash autoconf build-base wget curl git zip unzip zlib-dev shadow libpq binutils-dev # Install PHP extensions RUN docker-php-ext-install exif pcntl bcmath RUN pecl install xdebug \ && docker-php-ext-enable xdebug # Get latest Composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # Set Working Dir WORKDIR /srv/app ================================================ FILE: docker-compose.yml ================================================ services: php: build: ./docker/php/${PHP_VERSION:-8.1} volumes: - $PWD:/srv/app:delegated ================================================ FILE: examples/app/GetAppList.txt ================================================ Array ( [0] => stdClass Object ( [appid] => 5 [name] => Dedicated Server ) [1] => stdClass Object ( [appid] => 7 [name] => Steam Client ) [2] => stdClass Object ( [appid] => 8 [name] => winui2 ) [3] => stdClass Object ( [appid] => 10 [name] => Counter-Strike ) [4] => stdClass Object ( [appid] => 20 [name] => Team Fortress Classic ) [5] => stdClass Object ( [appid] => 30 [name] => Day of Defeat ) ) ================================================ FILE: examples/app/appDetails.txt ================================================ Array ( [0] => Syntax\SteamApi\Containers\App Object ( [id] => 620 [type] => game [name] => Portal 2 [controllerSupport] => full [description] => Portal 2 draws from the award-winning formula of innovative gameplay, story, and music that earned the original Portal over 70 industry accolades and created a cult following.

The single-player portion of Portal 2 introduces a cast of dynamic new characters, a host of fresh puzzle elements, and a much larger set of devious test chambers. Players will explore never-before-seen areas of the Aperture Science Labs and be reunited with GLaDOS, the occasionally murderous computer companion who guided them through the original game.

The game’s two-player cooperative mode features its own entirely separate campaign with a unique story, test chambers, and two new player characters. This new mode forces players to reconsider everything they thought they knew about portals. Success will require them to not just act cooperatively, but to think cooperatively.

Product Features
[about] => Portal 2 draws from the award-winning formula of innovative gameplay, story, and music that earned the original Portal over 70 industry accolades and created a cult following.

The single-player portion of Portal 2 introduces a cast of dynamic new characters, a host of fresh puzzle elements, and a much larger set of devious test chambers. Players will explore never-before-seen areas of the Aperture Science Labs and be reunited with GLaDOS, the occasionally murderous computer companion who guided them through the original game.

The game’s two-player cooperative mode features its own entirely separate campaign with a unique story, test chambers, and two new player characters. This new mode forces players to reconsider everything they thought they knew about portals. Success will require them to not just act cooperatively, but to think cooperatively.

Product Features
[fullgame] => stdClass Object ( [appid] => [name] => No parent game found ) [header] => https://steamcdn-a.akamaihd.net/steam/apps/620/header.jpg?t=1512411524 [website] => http://www.thinkwithportals.com/ [pcRequirements] => stdClass Object ( [minimum] => Minimum:
) [legal] => None [developers] => Illuminate\Support\Collection Object ( [items:protected] => Array ( [0] => Valve ) ) [publishers] => Illuminate\Support\Collection Object ( [items:protected] => Array ( [0] => Valve ) ) [price] => stdClass Object ( [currency] => CHF [initial] => 1050 [final] => 1050 [discount_percent] => 0 ) [platforms] => stdClass Object ( [windows] => 1 [mac] => 1 [linux] => 1 ) [metacritic] => stdClass Object ( [score] => 95 [url] => http://www.metacritic.com/game/pc/portal-2?ftag=MCD-06-10aaa1f ) [categories] => Illuminate\Support\Collection Object ( [items:protected] => Array ( [0] => stdClass Object ( [id] => 2 [description] => Single-player ) [1] => stdClass Object ( [id] => 9 [description] => Co-op ) [2] => stdClass Object ( [id] => 22 [description] => Steam Achievements ) [3] => stdClass Object ( [id] => 28 [description] => Full controller support ) [4] => stdClass Object ( [id] => 29 [description] => Steam Trading Cards ) [5] => stdClass Object ( [id] => 13 [description] => Captions available ) [6] => stdClass Object ( [id] => 30 [description] => Steam Workshop ) [7] => stdClass Object ( [id] => 23 [description] => Steam Cloud ) [8] => stdClass Object ( [id] => 15 [description] => Stats ) [9] => stdClass Object ( [id] => 17 [description] => Includes level editor ) [10] => stdClass Object ( [id] => 14 [description] => Commentary available ) ) ) [genres] => Illuminate\Support\Collection Object ( [items:protected] => Array ( [0] => stdClass Object ( [id] => 1 [description] => Action ) [1] => stdClass Object ( [id] => 25 [description] => Adventure ) ) ) [release] => stdClass Object ( [coming_soon] => [date] => 18 Apr, 2011 ) [requiredAge] => 0 [isFree] => [shortDescription] => The "Perpetual Testing Initiative" has been expanded to allow you to design co-op puzzles for you and your friends! [supportedLanguages] => English*, French*, German*, Spanish*, Czech, Danish, Dutch, Finnish, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Romanian, Russian*, Simplified Chinese, Swedish, Thai, Traditional Chinese, Turkish
*languages with full audio support [recommendations] => stdClass Object ( [total] => 126510 ) [achievements] => stdClass Object ( [total] => 51 [highlighted] => Array ( [0] => stdClass Object ( [name] => Wake Up Call [path] => https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/620/SURVIVE_CONTAINER_RIDE.jpg ) [1] => stdClass Object ( [name] => You Monster [path] => https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/620/WAKE_UP.jpg ) [2] => stdClass Object ( [name] => Undiscouraged [path] => https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/620/LASER.jpg ) [3] => stdClass Object ( [name] => Bridge Over Troubling Water [path] => https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/620/BRIDGE.jpg ) [4] => stdClass Object ( [name] => SaBOTour [path] => https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/620/BREAK_OUT.jpg ) [5] => stdClass Object ( [name] => Stalemate Associate [path] => https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/620/STALEMATE_ASSOCIATE.jpg ) [6] => stdClass Object ( [name] => Tater Tote [path] => https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/620/ADDICTED_TO_SPUDS.jpg ) [7] => stdClass Object ( [name] => Vertically Unchallenged [path] => https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/620/BLUE_GEL.jpg ) [8] => stdClass Object ( [name] => Stranger Than Friction [path] => https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/620/ORANGE_GEL.jpg ) [9] => stdClass Object ( [name] => White Out [path] => https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/620/WHITE_GEL.jpg ) ) ) [dlc] => Illuminate\Support\Collection Object ( [items:protected] => Array ( [0] => 323180 ) ) ) ) ================================================ FILE: examples/global/convertId.txt ================================================ stdClass Object ( [id32] => "STEAM_1:1:9846342" [id64] => "76561197979958413" [id3] => "[U:1:19692685]"" ) ================================================ FILE: examples/group/GetGroupSummary.txt ================================================ Syntax\SteamApi\Containers\Group Object ( [groupID64] => 103582791429521412 [groupDetails] => Syntax\SteamApi\Containers\Group\Details Object ( [name] => Valve [url] => [headline] => VALVE [summary] => In addition to producing best-selling entertainment titles, Valve is a developer of leading-edge technologies such as the Sourceâ„¢ game engine and Steamâ„¢, a broadband platform for the delivery and management of digital content. [avatarIcon] => [avatarMedium] => [avatarFull] => [avatarIconUrl] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/1d/1d8baf5a2b5968ae5ca65d7a971c02e222c9a17e.jpg [avatarMediumUrl] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/1d/1d8baf5a2b5968ae5ca65d7a971c02e222c9a17e_medium.jpg [avatarFullUrl] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/1d/1d8baf5a2b5968ae5ca65d7a971c02e222c9a17e_full.jpg ) [memberDetails] => Syntax\SteamApi\Containers\Group\MemberDetails Object ( [count] => 213 [inChat] => 0 [inGame] => 2 [online] => 67 ) [startingMember] => 0 [members] => Syntax\SteamApi\Collection Object ( [items:protected] => Array ( [0] => stdClass Object ( [id32] => STEAM_1:0:12670972 [id64] => 76561197985607672 [id3] => [U:1:25341944] ) [1] => stdClass Object ( [id32] => STEAM_1:0:4548856 [id64] => 76561197969363440 [id3] => [U:1:9097712] ) [2] => stdClass Object ( [id32] => STEAM_1:1:7729156 [id64] => 76561197975724041 [id3] => [U:1:15458313] ) [3] => stdClass Object ( [id32] => STEAM_1:0:14655811 [id64] => 76561197989577350 [id3] => [U:1:29311622] ) [4] => stdClass Object ( [id32] => STEAM_1:1:17183506 [id64] => 76561197994632741 [id3] => [U:1:34367013] ) [5] => stdClass Object ( [id32] => STEAM_1:1:19954933 [id64] => 76561198000175595 [id3] => [U:1:39909867] ) [6] => stdClass Object ( [id32] => STEAM_1:1:2006750 [id64] => 76561197964279229 [id3] => [U:1:4013501] ) [7] => stdClass Object ( [id32] => STEAM_1:1:4154894 [id64] => 76561197968575517 [id3] => [U:1:8309789] ) [8] => stdClass Object ( [id32] => STEAM_1:0:148902 [id64] => 76561197960563532 [id3] => [U:1:297804] ) [9] => stdClass Object ( [id32] => STEAM_1:1:4093282 [id64] => 76561197968452293 [id3] => [U:1:8186565] ) [10] => stdClass Object ( [id32] => STEAM_1:0:4198392 [id64] => 76561197968662512 [id3] => [U:1:8396784] ) [11] => stdClass Object ( [id32] => STEAM_1:1:26994193 [id64] => 76561198014254115 [id3] => [U:1:53988387] ) [12] => stdClass Object ( [id32] => STEAM_1:1:9996423 [id64] => 76561197980258575 [id3] => [U:1:19992847] ) [13] => stdClass Object ( [id32] => STEAM_1:1:3862416 [id64] => 76561197967990561 [id3] => [U:1:7724833] ) [14] => stdClass Object ( [id32] => STEAM_1:1:8985320 [id64] => 76561197978236369 [id3] => [U:1:17970641] ) [15] => stdClass Object ( [id32] => STEAM_1:0:7270842 [id64] => 76561197974807412 [id3] => [U:1:14541684] ) [16] => stdClass Object ( [id32] => STEAM_1:1:5008578 [id64] => 76561197970282885 [id3] => [U:1:10017157] ) [17] => stdClass Object ( [id32] => STEAM_1:1:4231851 [id64] => 76561197968729431 [id3] => [U:1:8463703] ) [18] => stdClass Object ( [id32] => STEAM_1:0:55 [id64] => 76561197960265838 [id3] => [U:1:110] ) [19] => stdClass Object ( [id32] => STEAM_1:1:7163844 [id64] => 76561197974593417 [id3] => [U:1:14327689] ) [20] => stdClass Object ( [id32] => STEAM_1:1:22675066 [id64] => 76561198005615861 [id3] => [U:1:45350133] ) [21] => stdClass Object ( [id32] => STEAM_1:0:13563683 [id64] => 76561197987393094 [id3] => [U:1:27127366] ) [22] => stdClass Object ( [id32] => STEAM_1:1:4626173 [id64] => 76561197969518075 [id3] => [U:1:9252347] ) [23] => stdClass Object ( [id32] => STEAM_1:0:7664041 [id64] => 76561197975593810 [id3] => [U:1:15328082] ) [24] => stdClass Object ( [id32] => STEAM_1:0:11522713 [id64] => 76561197983311154 [id3] => [U:1:23045426] ) [25] => stdClass Object ( [id32] => STEAM_1:0:4528013 [id64] => 76561197969321754 [id3] => [U:1:9056026] ) [26] => stdClass Object ( [id32] => STEAM_1:0:5313211 [id64] => 76561197970892150 [id3] => [U:1:10626422] ) [27] => stdClass Object ( [id32] => STEAM_1:0:13888463 [id64] => 76561197988042654 [id3] => [U:1:27776926] ) [28] => stdClass Object ( [id32] => STEAM_1:0:12680769 [id64] => 76561197985627266 [id3] => [U:1:25361538] ) [29] => stdClass Object ( [id32] => STEAM_1:1:297460 [id64] => 76561197960860649 [id3] => [U:1:594921] ) [30] => stdClass Object ( [id32] => STEAM_1:0:15562575 [id64] => 76561197991390878 [id3] => [U:1:31125150] ) [31] => stdClass Object ( [id32] => STEAM_1:0:10980759 [id64] => 76561197982227246 [id3] => [U:1:21961518] ) [32] => stdClass Object ( [id32] => STEAM_1:0:84447 [id64] => 76561197960434622 [id3] => [U:1:168894] ) [33] => stdClass Object ( [id32] => STEAM_1:1:5149723 [id64] => 76561197970565175 [id3] => [U:1:10299447] ) [34] => stdClass Object ( [id32] => STEAM_1:0:1 [id64] => 76561197960265730 [id3] => [U:1:2] ) [35] => stdClass Object ( [id32] => STEAM_1:1:577237 [id64] => 76561197961420203 [id3] => [U:1:1154475] ) [36] => stdClass Object ( [id32] => STEAM_1:0:4545978 [id64] => 76561197969357684 [id3] => [U:1:9091956] ) [37] => stdClass Object ( [id32] => STEAM_1:0:15977034 [id64] => 76561197992219796 [id3] => [U:1:31954068] ) [38] => stdClass Object ( [id32] => STEAM_1:1:6245063 [id64] => 76561197972755855 [id3] => [U:1:12490127] ) [39] => stdClass Object ( [id32] => STEAM_1:0:36278525 [id64] => 76561198032822778 [id3] => [U:1:72557050] ) [40] => stdClass Object ( [id32] => STEAM_1:0:18515483 [id64] => 76561197997296694 [id3] => [U:1:37030966] ) [41] => stdClass Object ( [id32] => STEAM_1:0:12242697 [id64] => 76561197984751122 [id3] => [U:1:24485394] ) [42] => stdClass Object ( [id32] => STEAM_1:0:1024102 [id64] => 76561197962313932 [id3] => [U:1:2048204] ) [43] => stdClass Object ( [id32] => STEAM_1:1:5843013 [id64] => 76561197971951755 [id3] => [U:1:11686027] ) [44] => stdClass Object ( [id32] => STEAM_1:0:1656 [id64] => 76561197960269040 [id3] => [U:1:3312] ) [45] => stdClass Object ( [id32] => STEAM_1:1:4096872 [id64] => 76561197968459473 [id3] => [U:1:8193745] ) [46] => stdClass Object ( [id32] => STEAM_1:1:5351571 [id64] => 76561197970968871 [id3] => [U:1:10703143] ) [47] => stdClass Object ( [id32] => STEAM_1:1:1 [id64] => 76561197960265731 [id3] => [U:1:3] ) [48] => stdClass Object ( [id32] => STEAM_1:1:68277 [id64] => 76561197960402283 [id3] => [U:1:136555] ) [49] => stdClass Object ( [id32] => STEAM_1:0:5391784 [id64] => 76561197971049296 [id3] => [U:1:10783568] ) [50] => stdClass Object ( [id32] => STEAM_1:0:5 [id64] => 76561197960265738 [id3] => [U:1:10] ) [51] => stdClass Object ( [id32] => STEAM_1:1:4567206 [id64] => 76561197969400141 [id3] => [U:1:9134413] ) [52] => stdClass Object ( [id32] => STEAM_1:0:518081 [id64] => 76561197961301890 [id3] => [U:1:1036162] ) [53] => stdClass Object ( [id32] => STEAM_1:0:141918 [id64] => 76561197960549564 [id3] => [U:1:283836] ) [54] => stdClass Object ( [id32] => STEAM_1:0:5965261 [id64] => 76561197972196250 [id3] => [U:1:11930522] ) [55] => stdClass Object ( [id32] => STEAM_1:0:4727277 [id64] => 76561197969720282 [id3] => [U:1:9454554] ) [56] => stdClass Object ( [id32] => STEAM_1:0:41199979 [id64] => 76561198042665686 [id3] => [U:1:82399958] ) [57] => stdClass Object ( [id32] => STEAM_1:1:5133880 [id64] => 76561197970533489 [id3] => [U:1:10267761] ) [58] => stdClass Object ( [id32] => STEAM_1:1:9 [id64] => 76561197960265747 [id3] => [U:1:19] ) [59] => stdClass Object ( [id32] => STEAM_1:1:12432619 [id64] => 76561197985130967 [id3] => [U:1:24865239] ) [60] => stdClass Object ( [id32] => STEAM_1:1:1258968 [id64] => 76561197962783665 [id3] => [U:1:2517937] ) [61] => stdClass Object ( [id32] => STEAM_1:0:15743120 [id64] => 76561197991751968 [id3] => [U:1:31486240] ) [62] => stdClass Object ( [id32] => STEAM_1:0:9000415 [id64] => 76561197978266558 [id3] => [U:1:18000830] ) [63] => stdClass Object ( [id32] => STEAM_1:0:9408199 [id64] => 76561197979082126 [id3] => [U:1:18816398] ) [64] => stdClass Object ( [id32] => STEAM_1:0:84901 [id64] => 76561197960435530 [id3] => [U:1:169802] ) [65] => stdClass Object ( [id32] => STEAM_1:0:20942754 [id64] => 76561198002151236 [id3] => [U:1:41885508] ) [66] => stdClass Object ( [id32] => STEAM_1:1:11776829 [id64] => 76561197983819387 [id3] => [U:1:23553659] ) [67] => stdClass Object ( [id32] => STEAM_1:1:7 [id64] => 76561197960265743 [id3] => [U:1:15] ) [68] => stdClass Object ( [id32] => STEAM_1:1:12357840 [id64] => 76561197984981409 [id3] => [U:1:24715681] ) [69] => stdClass Object ( [id32] => STEAM_1:1:7824517 [id64] => 76561197975914763 [id3] => [U:1:15649035] ) [70] => stdClass Object ( [id32] => STEAM_1:1:2 [id64] => 76561197960265733 [id3] => [U:1:5] ) [71] => stdClass Object ( [id32] => STEAM_1:1:10 [id64] => 76561197960265749 [id3] => [U:1:21] ) [72] => stdClass Object ( [id32] => STEAM_1:0:11101 [id64] => 76561197960287930 [id3] => [U:1:22202] ) [73] => stdClass Object ( [id32] => STEAM_1:1:79106 [id64] => 76561197960423941 [id3] => [U:1:158213] ) [74] => stdClass Object ( [id32] => STEAM_1:0:262130 [id64] => 76561197960789988 [id3] => [U:1:524260] ) [75] => stdClass Object ( [id32] => STEAM_1:1:1284021 [id64] => 76561197962833771 [id3] => [U:1:2568043] ) [76] => stdClass Object ( [id32] => STEAM_1:0:1289244 [id64] => 76561197962844216 [id3] => [U:1:2578488] ) [77] => stdClass Object ( [id32] => STEAM_1:1:1445328 [id64] => 76561197963156385 [id3] => [U:1:2890657] ) [78] => stdClass Object ( [id32] => STEAM_1:1:1865832 [id64] => 76561197963997393 [id3] => [U:1:3731665] ) [79] => stdClass Object ( [id32] => STEAM_1:1:3439318 [id64] => 76561197967144365 [id3] => [U:1:6878637] ) [80] => stdClass Object ( [id32] => STEAM_1:1:3555815 [id64] => 76561197967377359 [id3] => [U:1:7111631] ) [81] => stdClass Object ( [id32] => STEAM_1:0:3724127 [id64] => 76561197967713982 [id3] => [U:1:7448254] ) [82] => stdClass Object ( [id32] => STEAM_1:1:4008573 [id64] => 76561197968282875 [id3] => [U:1:8017147] ) [83] => stdClass Object ( [id32] => STEAM_1:1:4498397 [id64] => 76561197969262523 [id3] => [U:1:8996795] ) [84] => stdClass Object ( [id32] => STEAM_1:0:5007245 [id64] => 76561197970280218 [id3] => [U:1:10014490] ) [85] => stdClass Object ( [id32] => STEAM_1:1:5009897 [id64] => 76561197970285523 [id3] => [U:1:10019795] ) [86] => stdClass Object ( [id32] => STEAM_1:0:5028844 [id64] => 76561197970323416 [id3] => [U:1:10057688] ) [87] => stdClass Object ( [id32] => STEAM_1:1:5138727 [id64] => 76561197970543183 [id3] => [U:1:10277455] ) [88] => stdClass Object ( [id32] => STEAM_1:1:5184260 [id64] => 76561197970634249 [id3] => [U:1:10368521] ) [89] => stdClass Object ( [id32] => STEAM_1:0:5313648 [id64] => 76561197970893024 [id3] => [U:1:10627296] ) [90] => stdClass Object ( [id32] => STEAM_1:1:5513624 [id64] => 76561197971292977 [id3] => [U:1:11027249] ) [91] => stdClass Object ( [id32] => STEAM_1:0:6012674 [id64] => 76561197972291076 [id3] => [U:1:12025348] ) [92] => stdClass Object ( [id32] => STEAM_1:0:6148822 [id64] => 76561197972563372 [id3] => [U:1:12297644] ) [93] => stdClass Object ( [id32] => STEAM_1:0:9460914 [id64] => 76561197979187556 [id3] => [U:1:18921828] ) [94] => stdClass Object ( [id32] => STEAM_1:0:10183251 [id64] => 76561197980632230 [id3] => [U:1:20366502] ) [95] => stdClass Object ( [id32] => STEAM_1:0:10299860 [id64] => 76561197980865448 [id3] => [U:1:20599720] ) [96] => stdClass Object ( [id32] => STEAM_1:0:10513101 [id64] => 76561197981291930 [id3] => [U:1:21026202] ) [97] => stdClass Object ( [id32] => STEAM_1:0:10998044 [id64] => 76561197982261816 [id3] => [U:1:21996088] ) [98] => stdClass Object ( [id32] => STEAM_1:1:11097202 [id64] => 76561197982460133 [id3] => [U:1:22194405] ) [99] => stdClass Object ( [id32] => STEAM_1:0:12085689 [id64] => 76561197984437106 [id3] => [U:1:24171378] ) [100] => stdClass Object ( [id32] => STEAM_1:0:12662556 [id64] => 76561197985590840 [id3] => [U:1:25325112] ) [101] => stdClass Object ( [id32] => STEAM_1:0:13338906 [id64] => 76561197986943540 [id3] => [U:1:26677812] ) [102] => stdClass Object ( [id32] => STEAM_1:0:15445674 [id64] => 76561197991157076 [id3] => [U:1:30891348] ) [103] => stdClass Object ( [id32] => STEAM_1:0:16101130 [id64] => 76561197992467988 [id3] => [U:1:32202260] ) [104] => stdClass Object ( [id32] => STEAM_1:0:16397581 [id64] => 76561197993060890 [id3] => [U:1:32795162] ) [105] => stdClass Object ( [id32] => STEAM_1:1:19367308 [id64] => 76561197999000345 [id3] => [U:1:38734617] ) [106] => stdClass Object ( [id32] => STEAM_1:0:20973148 [id64] => 76561198002212024 [id3] => [U:1:41946296] ) [107] => stdClass Object ( [id32] => STEAM_1:0:21068177 [id64] => 76561198002402082 [id3] => [U:1:42136354] ) [108] => stdClass Object ( [id32] => STEAM_1:0:1735 [id64] => 76561197960269198 [id3] => [U:1:3470] ) [109] => stdClass Object ( [id32] => STEAM_1:0:5132167 [id64] => 76561197970530062 [id3] => [U:1:10264334] ) [110] => stdClass Object ( [id32] => STEAM_1:0:22070144 [id64] => 76561198004406016 [id3] => [U:1:44140288] ) [111] => stdClass Object ( [id32] => STEAM_1:1:16569574 [id64] => 76561197993404877 [id3] => [U:1:33139149] ) [112] => stdClass Object ( [id32] => STEAM_1:0:49478818 [id64] => 76561198059223364 [id3] => [U:1:98957636] ) [113] => stdClass Object ( [id32] => STEAM_1:1:6318946 [id64] => 76561197972903621 [id3] => [U:1:12637893] ) [114] => stdClass Object ( [id32] => STEAM_1:0:4500605 [id64] => 76561197969266938 [id3] => [U:1:9001210] ) [115] => stdClass Object ( [id32] => STEAM_1:1:43998939 [id64] => 76561198048263607 [id3] => [U:1:87997879] ) [116] => stdClass Object ( [id32] => STEAM_1:0:36276421 [id64] => 76561198032818570 [id3] => [U:1:72552842] ) [117] => stdClass Object ( [id32] => STEAM_1:0:57337253 [id64] => 76561198074940234 [id3] => [U:1:114674506] ) [118] => stdClass Object ( [id32] => STEAM_1:0:22428051 [id64] => 76561198005121830 [id3] => [U:1:44856102] ) [119] => stdClass Object ( [id32] => STEAM_1:0:35631930 [id64] => 76561198031529588 [id3] => [U:1:71263860] ) [120] => stdClass Object ( [id32] => STEAM_1:0:43569472 [id64] => 76561198047404672 [id3] => [U:1:87138944] ) [121] => stdClass Object ( [id32] => STEAM_1:0:60323246 [id64] => 76561198080912220 [id3] => [U:1:120646492] ) [122] => stdClass Object ( [id32] => STEAM_1:1:46640546 [id64] => 76561198053546821 [id3] => [U:1:93281093] ) [123] => stdClass Object ( [id32] => STEAM_1:1:36238710 [id64] => 76561198032743149 [id3] => [U:1:72477421] ) [124] => stdClass Object ( [id32] => STEAM_1:1:6913087 [id64] => 76561197974091903 [id3] => [U:1:13826175] ) [125] => stdClass Object ( [id32] => STEAM_1:0:52203217 [id64] => 76561198064672162 [id3] => [U:1:104406434] ) [126] => stdClass Object ( [id32] => STEAM_1:1:16208074 [id64] => 76561197992681877 [id3] => [U:1:32416149] ) [127] => stdClass Object ( [id32] => STEAM_1:1:33968717 [id64] => 76561198028203163 [id3] => [U:1:67937435] ) [128] => stdClass Object ( [id32] => STEAM_1:1:53882589 [id64] => 76561198068030907 [id3] => [U:1:107765179] ) [129] => stdClass Object ( [id32] => STEAM_1:1:27204627 [id64] => 76561198014674983 [id3] => [U:1:54409255] ) [130] => stdClass Object ( [id32] => STEAM_1:0:27867006 [id64] => 76561198015999740 [id3] => [U:1:55734012] ) [131] => stdClass Object ( [id32] => STEAM_1:1:52159322 [id64] => 76561198064584373 [id3] => [U:1:104318645] ) [132] => stdClass Object ( [id32] => STEAM_1:0:1074101 [id64] => 76561197962413930 [id3] => [U:1:2148202] ) [133] => stdClass Object ( [id32] => STEAM_1:1:56447209 [id64] => 76561198073160147 [id3] => [U:1:112894419] ) [134] => stdClass Object ( [id32] => STEAM_1:0:45224671 [id64] => 76561198050715070 [id3] => [U:1:90449342] ) [135] => stdClass Object ( [id32] => STEAM_1:1:88130213 [id64] => 76561198136526155 [id3] => [U:1:176260427] ) [136] => stdClass Object ( [id32] => STEAM_1:1:22732971 [id64] => 76561198005731671 [id3] => [U:1:45465943] ) [137] => stdClass Object ( [id32] => STEAM_1:0:5475693 [id64] => 76561197971217114 [id3] => [U:1:10951386] ) [138] => stdClass Object ( [id32] => STEAM_1:0:40317356 [id64] => 76561198040900440 [id3] => [U:1:80634712] ) [139] => stdClass Object ( [id32] => STEAM_1:1:3540511 [id64] => 76561197967346751 [id3] => [U:1:7081023] ) [140] => stdClass Object ( [id32] => STEAM_1:1:34153911 [id64] => 76561198028573551 [id3] => [U:1:68307823] ) [141] => stdClass Object ( [id32] => STEAM_1:1:449668 [id64] => 76561197961165065 [id3] => [U:1:899337] ) [142] => stdClass Object ( [id32] => STEAM_1:0:56032430 [id64] => 76561198072330588 [id3] => [U:1:112064860] ) [143] => stdClass Object ( [id32] => STEAM_1:0:29974022 [id64] => 76561198020213772 [id3] => [U:1:59948044] ) [144] => stdClass Object ( [id32] => STEAM_1:0:23714752 [id64] => 76561198007695232 [id3] => [U:1:47429504] ) [145] => stdClass Object ( [id32] => STEAM_1:1:22532721 [id64] => 76561198005331171 [id3] => [U:1:45065443] ) [146] => stdClass Object ( [id32] => STEAM_1:1:44659497 [id64] => 76561198049584723 [id3] => [U:1:89318995] ) [147] => stdClass Object ( [id32] => STEAM_1:1:28043444 [id64] => 76561198016352617 [id3] => [U:1:56086889] ) [148] => stdClass Object ( [id32] => STEAM_1:1:43057012 [id64] => 76561198046379753 [id3] => [U:1:86114025] ) [149] => stdClass Object ( [id32] => STEAM_1:0:11973460 [id64] => 76561197984212648 [id3] => [U:1:23946920] ) [150] => stdClass Object ( [id32] => STEAM_1:0:43776078 [id64] => 76561198047817884 [id3] => [U:1:87552156] ) [151] => stdClass Object ( [id32] => STEAM_1:0:6113130 [id64] => 76561197972491988 [id3] => [U:1:12226260] ) [152] => stdClass Object ( [id32] => STEAM_1:1:4749701 [id64] => 76561197969765131 [id3] => [U:1:9499403] ) [153] => stdClass Object ( [id32] => STEAM_1:0:6114800 [id64] => 76561197972495328 [id3] => [U:1:12229600] ) [154] => stdClass Object ( [id32] => STEAM_1:1:32068263 [id64] => 76561198024402255 [id3] => [U:1:64136527] ) [155] => stdClass Object ( [id32] => STEAM_1:1:16383317 [id64] => 76561197993032363 [id3] => [U:1:32766635] ) [156] => stdClass Object ( [id32] => STEAM_1:1:121344 [id64] => 76561197960508417 [id3] => [U:1:242689] ) [157] => stdClass Object ( [id32] => STEAM_1:0:23715288 [id64] => 76561198007696304 [id3] => [U:1:47430576] ) [158] => stdClass Object ( [id32] => STEAM_1:0:476610 [id64] => 76561197961218948 [id3] => [U:1:953220] ) [159] => stdClass Object ( [id32] => STEAM_1:0:24898512 [id64] => 76561198010062752 [id3] => [U:1:49797024] ) [160] => stdClass Object ( [id32] => STEAM_1:0:44176718 [id64] => 76561198048619164 [id3] => [U:1:88353436] ) [161] => stdClass Object ( [id32] => STEAM_1:0:14731367 [id64] => 76561197989728462 [id3] => [U:1:29462734] ) [162] => stdClass Object ( [id32] => STEAM_1:1:45429415 [id64] => 76561198051124559 [id3] => [U:1:90858831] ) [163] => stdClass Object ( [id32] => STEAM_1:0:25490286 [id64] => 76561198011246300 [id3] => [U:1:50980572] ) [164] => stdClass Object ( [id32] => STEAM_1:0:62061 [id64] => 76561197960389850 [id3] => [U:1:124122] ) [165] => stdClass Object ( [id32] => STEAM_1:0:8585276 [id64] => 76561197977436280 [id3] => [U:1:17170552] ) [166] => stdClass Object ( [id32] => STEAM_1:0:5971 [id64] => 76561197960277670 [id3] => [U:1:11942] ) [167] => stdClass Object ( [id32] => STEAM_1:0:5567160 [id64] => 76561197971400048 [id3] => [U:1:11134320] ) [168] => stdClass Object ( [id32] => STEAM_1:1:50902290 [id64] => 76561198062070309 [id3] => [U:1:101804581] ) [169] => stdClass Object ( [id32] => STEAM_1:1:12242230 [id64] => 76561197984750189 [id3] => [U:1:24484461] ) [170] => stdClass Object ( [id32] => STEAM_1:1:33879296 [id64] => 76561198028024321 [id3] => [U:1:67758593] ) [171] => stdClass Object ( [id32] => STEAM_1:0:20641908 [id64] => 76561198001549544 [id3] => [U:1:41283816] ) [172] => stdClass Object ( [id32] => STEAM_1:0:31960985 [id64] => 76561198024187698 [id3] => [U:1:63921970] ) [173] => stdClass Object ( [id32] => STEAM_1:1:21469523 [id64] => 76561198003204775 [id3] => [U:1:42939047] ) [174] => stdClass Object ( [id32] => STEAM_1:0:56962765 [id64] => 76561198074191258 [id3] => [U:1:113925530] ) [175] => stdClass Object ( [id32] => STEAM_1:0:6 [id64] => 76561197960265740 [id3] => [U:1:12] ) [176] => stdClass Object ( [id32] => STEAM_1:0:12 [id64] => 76561197960265752 [id3] => [U:1:24] ) [177] => stdClass Object ( [id32] => STEAM_1:0:4214338 [id64] => 76561197968694404 [id3] => [U:1:8428676] ) [178] => stdClass Object ( [id32] => STEAM_1:1:6052580 [id64] => 76561197972370889 [id3] => [U:1:12105161] ) [179] => stdClass Object ( [id32] => STEAM_1:0:9294262 [id64] => 76561197978854252 [id3] => [U:1:18588524] ) [180] => stdClass Object ( [id32] => STEAM_1:1:9429285 [id64] => 76561197979124299 [id3] => [U:1:18858571] ) [181] => stdClass Object ( [id32] => STEAM_1:1:14771562 [id64] => 76561197989808853 [id3] => [U:1:29543125] ) [182] => stdClass Object ( [id32] => STEAM_1:1:15649237 [id64] => 76561197991564203 [id3] => [U:1:31298475] ) [183] => stdClass Object ( [id32] => STEAM_1:0:16185676 [id64] => 76561197992637080 [id3] => [U:1:32371352] ) [184] => stdClass Object ( [id32] => STEAM_1:0:16783588 [id64] => 76561197993832904 [id3] => [U:1:33567176] ) [185] => stdClass Object ( [id32] => STEAM_1:1:17646028 [id64] => 76561197995557785 [id3] => [U:1:35292057] ) [186] => stdClass Object ( [id32] => STEAM_1:1:18091284 [id64] => 76561197996448297 [id3] => [U:1:36182569] ) [187] => stdClass Object ( [id32] => STEAM_1:1:18731401 [id64] => 76561197997728531 [id3] => [U:1:37462803] ) [188] => stdClass Object ( [id32] => STEAM_1:1:22360241 [id64] => 76561198004986211 [id3] => [U:1:44720483] ) [189] => stdClass Object ( [id32] => STEAM_1:0:23695884 [id64] => 76561198007657496 [id3] => [U:1:47391768] ) [190] => stdClass Object ( [id32] => STEAM_1:0:24110617 [id64] => 76561198008486962 [id3] => [U:1:48221234] ) [191] => stdClass Object ( [id32] => STEAM_1:1:24951483 [id64] => 76561198010168695 [id3] => [U:1:49902967] ) [192] => stdClass Object ( [id32] => STEAM_1:1:27497553 [id64] => 76561198015260835 [id3] => [U:1:54995107] ) [193] => stdClass Object ( [id32] => STEAM_1:1:31926646 [id64] => 76561198024119021 [id3] => [U:1:63853293] ) [194] => stdClass Object ( [id32] => STEAM_1:1:31926674 [id64] => 76561198024119077 [id3] => [U:1:63853349] ) [195] => stdClass Object ( [id32] => STEAM_1:1:31926708 [id64] => 76561198024119145 [id3] => [U:1:63853417] ) [196] => stdClass Object ( [id32] => STEAM_1:1:31926719 [id64] => 76561198024119167 [id3] => [U:1:63853439] ) [197] => stdClass Object ( [id32] => STEAM_1:1:31926740 [id64] => 76561198024119209 [id3] => [U:1:63853481] ) [198] => stdClass Object ( [id32] => STEAM_1:1:31926752 [id64] => 76561198024119233 [id3] => [U:1:63853505] ) [199] => stdClass Object ( [id32] => STEAM_1:1:31926771 [id64] => 76561198024119271 [id3] => [U:1:63853543] ) [200] => stdClass Object ( [id32] => STEAM_1:1:31926784 [id64] => 76561198024119297 [id3] => [U:1:63853569] ) [201] => stdClass Object ( [id32] => STEAM_1:0:31941822 [id64] => 76561198024149372 [id3] => [U:1:63883644] ) [202] => stdClass Object ( [id32] => STEAM_1:0:31941855 [id64] => 76561198024149438 [id3] => [U:1:63883710] ) [203] => stdClass Object ( [id32] => STEAM_1:1:32101219 [id64] => 76561198024468167 [id3] => [U:1:64202439] ) [204] => stdClass Object ( [id32] => STEAM_1:1:36112393 [id64] => 76561198032490515 [id3] => [U:1:72224787] ) [205] => stdClass Object ( [id32] => STEAM_1:1:37578256 [id64] => 76561198035422241 [id3] => [U:1:75156513] ) [206] => stdClass Object ( [id32] => STEAM_1:1:43938312 [id64] => 76561198048142353 [id3] => [U:1:87876625] ) [207] => stdClass Object ( [id32] => STEAM_1:0:49714621 [id64] => 76561198059694970 [id3] => [U:1:99429242] ) [208] => stdClass Object ( [id32] => STEAM_1:0:55613691 [id64] => 76561198071493110 [id3] => [U:1:111227382] ) [209] => stdClass Object ( [id32] => STEAM_1:1:59954187 [id64] => 76561198080174103 [id3] => [U:1:119908375] ) [210] => stdClass Object ( [id32] => STEAM_1:1:62455758 [id64] => 76561198085177245 [id3] => [U:1:124911517] ) [211] => stdClass Object ( [id32] => STEAM_1:0:77147995 [id64] => 76561198114561718 [id3] => [U:1:154295990] ) [212] => stdClass Object ( [id32] => STEAM_1:1:90334873 [id64] => 76561198140935475 [id3] => [U:1:180669747] ) ) ) ) ================================================ FILE: examples/item/GetPlayerItems.txt ================================================ Array ( [numberOfBackpackSlots] => 50 [items] => Illuminate\Support\Collection Object ( [items:protected] => Array ( [0] => Syntax\SteamApi\Containers\Item Object ( [id] => 5787837042 [originalId] => 5787837042 [defIndex] => 166 [level] => 5 [quality] => 6 [quantity] => 1 [inventory] => 0 [origin] => 0 [flags] => Array ( [trade] => [craft] => 1 ) [containedItem] => [style] => [attributes] => Array ( [0] => stdClass Object ( [defindex] => 143 [value] => 1406566784 [float_value] => 1842591301632 ) [1] => stdClass Object ( [defindex] => 746 [value] => 1065353216 [float_value] => 1 ) [2] => stdClass Object ( [defindex] => 292 [value] => 1115684864 [float_value] => 64 ) [3] => stdClass Object ( [defindex] => 388 [value] => 1115684864 [float_value] => 64 ) [4] => stdClass Object ( [defindex] => 153 [value] => 1065353216 [float_value] => 1 ) ) [custom] => Array ( [name] => [description] => ) ) [1] => Syntax\SteamApi\Containers\Item Object ( [id] => 5787837069 [originalId] => 5787837069 [defIndex] => 877 [level] => 1 [quality] => 1 [quantity] => 1 [inventory] => 3221225480 [origin] => 13 [flags] => Array ( [trade] => 1 [craft] => 1 ) [containedItem] => [style] => [attributes] => Array ( [0] => stdClass Object ( [defindex] => 746 [value] => 1065353216 [float_value] => 1 ) [1] => stdClass Object ( [defindex] => 292 [value] => 1115684864 [float_value] => 64 ) [2] => stdClass Object ( [defindex] => 388 [value] => 1115684864 [float_value] => 64 ) ) [custom] => Array ( [name] => [description] => ) ) [2] => Syntax\SteamApi\Containers\Item Object ( [id] => 5787837070 [originalId] => 5787837070 [defIndex] => 878 [level] => 1 [quality] => 1 [quantity] => 1 [inventory] => 3221225480 [origin] => 13 [flags] => Array ( [trade] => 1 [craft] => 1 ) [containedItem] => [style] => 0 [attributes] => Array ( [0] => stdClass Object ( [defindex] => 746 [value] => 1065353216 [float_value] => 1 ) [1] => stdClass Object ( [defindex] => 292 [value] => 1115684864 [float_value] => 64 ) [2] => stdClass Object ( [defindex] => 388 [value] => 1115684864 [float_value] => 64 ) ) [custom] => Array ( [name] => [description] => ) ) [3] => Syntax\SteamApi\Containers\Item Object ( [id] => 5787837071 [originalId] => 5787837071 [defIndex] => 879 [level] => 1 [quality] => 1 [quantity] => 1 [inventory] => 3221225480 [origin] => 13 [flags] => Array ( [trade] => 1 [craft] => 1 ) [containedItem] => [style] => 0 [attributes] => Array ( [0] => stdClass Object ( [defindex] => 746 [value] => 1065353216 [float_value] => 1 ) [1] => stdClass Object ( [defindex] => 292 [value] => 1115684864 [float_value] => 64 ) [2] => stdClass Object ( [defindex] => 388 [value] => 1115684864 [float_value] => 64 ) ) [custom] => Array ( [name] => [description] => ) ) [4] => Syntax\SteamApi\Containers\Item Object ( [id] => 5787837154 [originalId] => 5787837154 [defIndex] => 5867 [level] => 1 [quality] => 6 [quantity] => 1 [inventory] => 3221225473 [origin] => 0 [flags] => Array ( [trade] => 1 [craft] => 1 ) [containedItem] => [style] => 0 [attributes] => Array ( [0] => stdClass Object ( [defindex] => 2046 [value] => 1065353216 [float_value] => 1 ) [1] => stdClass Object ( [defindex] => 187 [value] => 1121189888 [float_value] => 106 ) [2] => stdClass Object ( [defindex] => 744 [value] => 1 [float_value] => 1.4012984643248E-45 ) [3] => stdClass Object ( [defindex] => 528 [value] => 1169641472 [float_value] => 5866 ) [4] => stdClass Object ( [defindex] => 731 [value] => 1065353216 [float_value] => 1 ) [5] => stdClass Object ( [defindex] => 815 [value] => 1 [float_value] => 1.4012984643248E-45 ) ) [custom] => Array ( [name] => [description] => ) ) ) ) ) ================================================ FILE: examples/news/GetNewsForApp.txt ================================================ Array ( [0] => stdClass Object ( [gid] => 521614150601956190 [title] => Think Of All The Things We Learned In Portal 2 [url] => http://store.steampowered.com/news/externalpost/rps/521614150601956190 [is_external_url] => 1 [author] => contact@rockpapershotgun.com (Philippa Warr) [contents] => Have you ever idly wondered whether GLaDOS might have been up to more research and testing than the Portal games let on? A study from Florida State University into the effects of playing Portal 2 on a variety of skills won’t do much to ease your fears, then. According to the study, spending eight hours playing Portal 2 is more effective at improving a range of cognitive skills than a dedicated brain training program called Lumosity. … [feedlabel] => Rock, Paper, Shotgun [date] => 1412265624 [feedname] => rps ) [1] => stdClass Object ( [gid] => 521614150561342440 [title] => Think Of All The Things We Learned In Portal 2 [url] => http://store.steampowered.com/news/externalpost/rps/521614150561342440 [is_external_url] => 1 [author] => contact@rockpapershotgun.com (Philippa Warr) [contents] => Have you ever idly wondered whether GLaDOS might have been up to more research and testing than the Portal games let on? A study from Florida State University into the effects of playing Portal 2 on a variety of skills won’t do much to ease your fears, then. According to the study, spending eight hours playing Portal 2 is more effective at improving a range of cognitive skills than a dedicated brain training program called Lumosity. … [feedlabel] => Rock, Paper, Shotgun [date] => 1412265624 [feedname] => rps ) [2] => stdClass Object ( [gid] => 521613514271155690 [title] => Steam Music Player Out Of Beta, Valve s Soundtracks Free [url] => http://store.steampowered.com/news/externalpost/rps/521613514271155690 [is_external_url] => 1 [author] => contact@rockpapershotgun.com (Graham Smith) [contents] => In almost every strategy, management or sim game I play, I will immediately turn off the music which comes with the game in favour of my own. That means that Steam Music Player sounds like a good idea to me even if I long ago abandoned mp3s in favour of streaming. The built-in functionality, which lets you browse your music library and control playback from in-game using the Steam overlay, has just left beta after its initial announcement back in February. To celebrate, Valve have made the sound... [feedlabel] => Rock, Paper, Shotgun [date] => 1411657215 [feedname] => rps ) [3] => stdClass Object ( [gid] => 521612880947759679 [title] => Introducing The Portal Merchandise Workshop [url] => http://store.steampowered.com/news/externalpost/portal2_blog/521612880947759679 [is_external_url] => 1 [author] => [contents] => It seems Dota 2 and Team Fortress 2 have launched Merchandise Workshops, where the community can submit, vote on and sell their own non-virtual, actually real t-shirts and posters. And so far, the response from their communities has been overwhelmingly positive. So we thought: What if we applied that same idea, but to a good game, with a smarter, more attractive community? Introducing the Portal Merchandise Workshop, where you can heroes can bravely design their own Portal universe concepts. "Bu... [feedlabel] => Portal 2 Blog [date] => 1410973260 [feedname] => portal2_blog ) [4] => stdClass Object ( [gid] => 552009088168130714 [title] => Midweek Madness - Portal 2, 75% Off [url] => http://store.steampowered.com/news/14193/ [is_external_url] => [author] => Valve [contents] => Save 75% on Portal 2 during this week's Midweek Madness*! Portal 2 draws from the award-winning formula of innovative gameplay, story, and music that earned the original Portal over 70 industry accolades and created a cult following. The single-player portion of Portal 2 introduces a cast of dynamic new characters, a host of fresh puzzle elements, and a much larger set of devious test chambers. Players will explore never-before-seen areas of the Aperture Science Labs and be reunited with GLaDOS,... [feedlabel] => Announcement [date] => 1408467600 [feedname] => steam_announce ) ) ================================================ FILE: examples/package/packageDetails.txt ================================================ Array ( [0] => stdClass Object ( [id] => 76710 [name] => Just Cause 3 XL [page_image] => https: //steamcdn-a.akamaihd.net/steam/subs/76710/header.jpg?t=1449600260 [header] => https: //steamcdn-a.akamaihd.net/steam/subs/76710/header_ratio.jpg?t=1449600260 [small_logo] => https: //steamcdn-a.akamaihd.net/steam/subs/76710/capsule_231x87.jpg?t=1449600260 [apps] => Array( [0] => stdClass Object( [id] => 225540 [name] => Just Cause™ 3 ) [1] => stdClass Object( [id] => 401850 [name] => Just Cause™ 3 DLC: Air, Land & Sea Expansion Pass ) ) [page_content] => none[price] => stdClass Object( [currency] => USD [initial] => 4499 [final] => 4499 [discount_percent] => 0 [individual] => 4498 ) [platforms] => stdClass Object( [windows] => 1 [mac] => [linux] => ) [release] => stdClass Object( [coming_soon] => [date] => ) [controller] => stdClass Object( [full_gamepad] => 1 ) ) ) ================================================ FILE: examples/player/GetBadges.txt ================================================ stdClass Object ( [badges] => Array ( [0] => stdClass Object ( [badgeid] => 16 [level] => 1 [completion_time] => 1404061200 [xp] => 150 [scarcity] => 877623 ) [1] => stdClass Object ( [badgeid] => 2 [level] => 2 [completion_time] => 1394212133 [xp] => 200 [scarcity] => 1990152 ) [2] => stdClass Object ( [badgeid] => 13 [level] => 124 [completion_time] => 1268659900 [xp] => 353 [scarcity] => 1243165 ) [3] => stdClass Object ( [badgeid] => 1 [level] => 4 [completion_time] => 1268659900 [xp] => 200 [scarcity] => 46831294 ) ) [player_xp] => 903 [player_level] => 9 [player_xp_needed_to_level_up] => 97 [player_xp_needed_current_level] => 900 ) ================================================ FILE: examples/player/GetCommunityBadgeProgress.txt ================================================ stdClass Object ( [quests] => Array ( [0] => stdClass Object ( [questid] => 101 [completed] => 1 ) [1] => stdClass Object ( [questid] => 102 [completed] => 1 ) [2] => stdClass Object ( [questid] => 103 [completed] => 1 ) [3] => stdClass Object ( [questid] => 104 [completed] => 1 ) [4] => stdClass Object ( [questid] => 105 [completed] => 1 ) [5] => stdClass Object ( [questid] => 106 [completed] => ) [6] => stdClass Object ( [questid] => 108 [completed] => 1 ) [7] => stdClass Object ( [questid] => 109 [completed] => 1 ) [8] => stdClass Object ( [questid] => 110 [completed] => 1 ) [9] => stdClass Object ( [questid] => 111 [completed] => 1 ) [10] => stdClass Object ( [questid] => 112 [completed] => 1 ) [11] => stdClass Object ( [questid] => 113 [completed] => 1 ) [12] => stdClass Object ( [questid] => 114 [completed] => 1 ) [13] => stdClass Object ( [questid] => 115 [completed] => 1 ) [14] => stdClass Object ( [questid] => 116 [completed] => 1 ) [15] => stdClass Object ( [questid] => 117 [completed] => 1 ) [16] => stdClass Object ( [questid] => 118 [completed] => 1 ) [17] => stdClass Object ( [questid] => 119 [completed] => 1 ) [18] => stdClass Object ( [questid] => 120 [completed] => 1 ) [19] => stdClass Object ( [questid] => 121 [completed] => 1 ) [20] => stdClass Object ( [questid] => 122 [completed] => 1 ) [21] => stdClass Object ( [questid] => 123 [completed] => 1 ) [22] => stdClass Object ( [questid] => 124 [completed] => ) [23] => stdClass Object ( [questid] => 125 [completed] => ) [24] => stdClass Object ( [questid] => 126 [completed] => 1 ) [25] => stdClass Object ( [questid] => 127 [completed] => 1 ) ) ) ================================================ FILE: examples/player/GetOwnedGames.txt ================================================ Syntax\SteamApi\Collection Object ( [items:protected] => Array ( [104] => Syntax\SteamApi\Containers\Game Object ( [appId] => 251570 [name] => 7 Days to Die [playtimeTwoWeeks] => 0 [playtimeTwoWeeksReadable] => 0 minutes [playtimeForever] => 12 [playtimeForeverReadable] => 12 minutes [icon] => http://media.steampowered.com/steamcommunity/public/images/apps/251570/c8f826b116770525b68e7b4e37ad83ca044ae760.jpg [logo] => http://media.steampowered.com/steamcommunity/public/images/apps/251570/d2f0fb2b63983bf5c5a1b627b59ce754788308df.jpg [header] => http://cdn.steampowered.com/v/gfx/apps/251570/header.jpg [hasCommunityVisibleStats] => 1 ) [32] => Syntax\SteamApi\Containers\Game Object ( [appId] => 22650 [name] => Alien Breed 2: Assault [playtimeTwoWeeks] => 0 [playtimeTwoWeeksReadable] => 0 minutes [playtimeForever] => 0 [playtimeForeverReadable] => 0 minutes [icon] => http://media.steampowered.com/steamcommunity/public/images/apps/22650/a10e00aa5fc77cc14deb38f7da48e5da40b18503.jpg [logo] => http://media.steampowered.com/steamcommunity/public/images/apps/22650/57b8df3a30a02c1a013fa6301563dcc2e941ef11.jpg [header] => http://cdn.steampowered.com/v/gfx/apps/22650/header.jpg [hasCommunityVisibleStats] => 1 ) [33] => Syntax\SteamApi\Containers\Game Object ( [appId] => 22670 [name] => Alien Breed 3: Descent [playtimeTwoWeeks] => 0 [playtimeTwoWeeksReadable] => 0 minutes [playtimeForever] => 0 [playtimeForeverReadable] => 0 minutes [icon] => http://media.steampowered.com/steamcommunity/public/images/apps/22670/276d9c54a181c2baf809c53c6172a5475866e693.jpg [logo] => http://media.steampowered.com/steamcommunity/public/images/apps/22670/6bd254a867864ef8b4e6d2b979547e9c67d669a3.jpg [header] => http://cdn.steampowered.com/v/gfx/apps/22670/header.jpg [hasCommunityVisibleStats] => 1 ) [31] => Syntax\SteamApi\Containers\Game Object ( [appId] => 22610 [name] => Alien Breed: Impact [playtimeTwoWeeks] => 0 [playtimeTwoWeeksReadable] => 0 minutes [playtimeForever] => 0 [playtimeForeverReadable] => 0 minutes [icon] => http://media.steampowered.com/steamcommunity/public/images/apps/22610/963d4d2b346f7258940a9bb9c8a5e319ec1bc781.jpg [logo] => http://media.steampowered.com/steamcommunity/public/images/apps/22610/fcf02acbd58c5a7ee29f15df2e849054d1f3a021.jpg [header] => http://cdn.steampowered.com/v/gfx/apps/22610/header.jpg [hasCommunityVisibleStats] => 1 ) ) ) ================================================ FILE: examples/player/GetPlayerLevelDetails.txt ================================================ Syntax\SteamApi\Containers\Player\Level Object ( [playerXp] => 903 [playerLevel] => 9 [xpToLevelUp] => 97 [xpForCurrentLevel] => 900 [currentLevelFloor] => 900 [currentLevelCeieling] => 1000 [percentThroughLevel] => 97 ) ================================================ FILE: examples/player/GetRecentlyPlayedGames.txt ================================================ Syntax\SteamApi\Collection Object ( [items:protected] => Array ( [3] => Syntax\SteamApi\Containers\Game Object ( [appId] => 214490 [name] => Alien: Isolation [playtimeTwoWeeks] => 73 [playtimeTwoWeeksReadable] => 1 hours 13 minutes [playtimeForever] => 73 [playtimeForeverReadable] => 1 hours 13 minutes [icon] => http://media.steampowered.com/steamcommunity/public/images/apps/214490/7bf964858835da75630a43ac0ddbf0f66a40902f.jpg [logo] => http://media.steampowered.com/steamcommunity/public/images/apps/214490/6cdbe0113548dad8cee3d24fbace9abe298ac9af.jpg [header] => http://cdn.steampowered.com/v/gfx/apps/214490/header.jpg [hasCommunityVisibleStats] => 0 ) [1] => Syntax\SteamApi\Containers\Game Object ( [appId] => 258970 [name] => Gauntletâ„¢ [playtimeTwoWeeks] => 148 [playtimeTwoWeeksReadable] => 2 hours 28 minutes [playtimeForever] => 148 [playtimeForeverReadable] => 2 hours 28 minutes [icon] => http://media.steampowered.com/steamcommunity/public/images/apps/258970/76e95a57a669c30984c9dcd32879536746d75de9.jpg [logo] => http://media.steampowered.com/steamcommunity/public/images/apps/258970/0b9cae9548f1a6dea05ecfb8ef886a6211189128.jpg [header] => http://cdn.steampowered.com/v/gfx/apps/258970/header.jpg [hasCommunityVisibleStats] => 0 ) [4] => Syntax\SteamApi\Containers\Game Object ( [appId] => 249130 [name] => LEGO MARVEL Super Heroes [playtimeTwoWeeks] => 46 [playtimeTwoWeeksReadable] => 46 minutes [playtimeForever] => 46 [playtimeForeverReadable] => 46 minutes [icon] => http://media.steampowered.com/steamcommunity/public/images/apps/249130/8462ed9e1004624c7109233eafd7098211da9f86.jpg [logo] => http://media.steampowered.com/steamcommunity/public/images/apps/249130/8b012ffdf2cb13e6f71cdf3606ce053c888ff3b5.jpg [header] => http://cdn.steampowered.com/v/gfx/apps/249130/header.jpg [hasCommunityVisibleStats] => 0 ) [2] => Syntax\SteamApi\Containers\Game Object ( [appId] => 241930 [name] => Middle-earth: Shadow of Mordor [playtimeTwoWeeks] => 71 [playtimeTwoWeeksReadable] => 1 hours 21 minutes [playtimeForever] => 81 [playtimeForeverReadable] => 1 hours 21 minutes [icon] => http://media.steampowered.com/steamcommunity/public/images/apps/241930/161afab3c9f725f593635723cc64a7fbeb324ead.jpg [logo] => http://media.steampowered.com/steamcommunity/public/images/apps/241930/00631b918ee8799ff48b3d91d9eb0d3278aafa83.jpg [header] => http://cdn.steampowered.com/v/gfx/apps/241930/header.jpg [hasCommunityVisibleStats] => 0 ) [0] => Syntax\SteamApi\Containers\Game Object ( [appId] => 221680 [name] => Rocksmith 2014 [playtimeTwoWeeks] => 150 [playtimeTwoWeeksReadable] => 2 hours 30 minutes [playtimeForever] => 753 [playtimeForeverReadable] => 12 hours 33 minutes [icon] => http://media.steampowered.com/steamcommunity/public/images/apps/221680/26c3d3ad45c9386e909613e5d115e73955501844.jpg [logo] => http://media.steampowered.com/steamcommunity/public/images/apps/221680/f7d201a1638d020101fade6d8d51cf09c33b3b1c.jpg [header] => http://cdn.steampowered.com/v/gfx/apps/221680/header.jpg [hasCommunityVisibleStats] => 0 ) ) ) ================================================ FILE: examples/player/GetSteamLevel.txt ================================================ 9 ================================================ FILE: examples/player/IsPlayingSharedGame.txt ================================================ 76561198022436617 ================================================ FILE: examples/user/GetFriendList.txt ================================================ Array ( [0] => Syntax\SteamApi\Containers\Player Object ( [steamId] => 76561198022436617 [steamIds] => stdClass Object ( [id32] => "STEAM_1:1:9846342" [id64] => "76561198022436617" [id3] => "[U:1:19692685]"" ) [communityVisibilityState] => 3 [profileState] => 1 [personaName] => Stygian [lastLogoff] => October 8th, 2014 10:50am [profileUrl] => http://steamcommunity.com/id/stygiansabyss/ [avatar] => [avatarMedium] => [avatarFull] => [personaState] => Online [primaryClanId] => 103582791435113986 [timecreated] => March 15th, 2010 01:31pm [personaStateFlags] => 0 ) [1] => Syntax\SteamApi\Containers\Player Object ( [steamId] => 76561198028432364 [steamIds] => stdClass Object ( [id32] => "STEAM_1:1:9846342" [id64] => "76561198028432364" [id3] => "[U:1:19692685]"" ) [communityVisibilityState] => 3 [profileState] => 1 [personaName] => [GoB] Bindusara [lastLogoff] => October 8th, 2014 05:39am [profileUrl] => http://steamcommunity.com/id/bindusara/ [avatar] => [avatarMedium] => [avatarFull] => [personaState] => Online [primaryClanId] => 103582791432779431 [timecreated] => August 1st, 2010 04:38am [personaStateFlags] => 0 ) ) ================================================ FILE: examples/user/GetPlayerBans.txt ================================================ Array ( [0] => stdClass Object ( [SteamId] => 76561197979958413 [CommunityBanned] => [VACBanned] => [NumberOfVACBans] => 0 [DaysSinceLastBan] => 0 [EconomyBan] => banned ) ) ================================================ FILE: examples/user/GetPlayerSummaries.txt ================================================ Array ( [0] => Syntax\SteamApi\Containers\Player Object ( [steamId] => 76561198022436617 [steamIds] => Syntax\SteamApi\Containers\Id Object ( [id32] => STEAM_1:1:31085444 [id64] => 76561198022436617 [id3] => [U:1:62170889] [communityId] => STEAM_1:1:31085444 [steamId] => 76561198022436617 ) [communityVisibilityState] => 3 [profileState] => 1 [personaName] => Stygian [lastLogoff] => October 8th, 2014 10:50am [profileUrl] => http://steamcommunity.com/id/stygiansabyss/ [avatar] => [avatarMedium] => [avatarFull] => [avatarUrl] => http://media.steampowered.com/steamcommunity/public/images/avatars/3a/3a718856298ce108a71dfd5b0bc5eb913a8ff650.jpg [avatarMediumUrl] => http://media.steampowered.com/steamcommunity/public/images/avatars/3a/3a718856298ce108a71dfd5b0bc5eb913a8ff650_medium.jpg [avatarFullUrl] => http://media.steampowered.com/steamcommunity/public/images/avatars/3a/3a718856298ce108a71dfd5b0bc5eb913a8ff650_full.jpg [personaState] => Online [personaStateId] => 3 [realName] => Joe Smith [primaryClanId] => 103582791435113986 [timecreated] => March 15th, 2010 01:31pm [personaStateFlags] => 0 [locCountryCode] => US [locStateCode] => TX [locCityId] => 3620 [location] => stdClass Object ( [country] => United States [state] => Texas [city] => Dallas ) [commentPermission]=> 1 [gameDetails] => stdClass Object ( [gameId] => 252950 [serverIp] => null [serverSteamId] => null [extraInfo] => Rocket League ) ) ) ================================================ FILE: examples/user/ResolveVanityURL.txt ================================================ stdClass Object ( [id32] => STEAM_1:0:11101 [id64] => 76561197960287930 [id3] => [U:1:22202] ) ================================================ FILE: examples/user/stats/GetGlobalAchievementPercentageForApp.txt ================================================ Array ( [0] => stdClass Object ( [name] => explosive_exit [percent] => 60.344631195068 ) [1] => stdClass Object ( [name] => suddenly_skewered [percent] => 42.981929779053 ) [2] => stdClass Object ( [name] => precision_strike [percent] => 40.083293914795 ) [3] => stdClass Object ( [name] => the_undeath_of_khamun [percent] => 38.004730224609 ) [4] => stdClass Object ( [name] => as_luck_would_have_it [percent] => 33.594764709473 ) [5] => stdClass Object ( [name] => besting_the_beast_of_orox [percent] => 23.76727104187 ) [6] => stdClass Object ( [name] => icy_tomb [percent] => 22.661437988281 ) [7] => stdClass Object ( [name] => eye_for_an_eye [percent] => 15.825128555298 ) [8] => stdClass Object ( [name] => furious_charge [percent] => 15.571806907654 ) [9] => stdClass Object ( [name] => morak_defeated [percent] => 13.494199752808 ) [10] => stdClass Object ( [name] => deader_than_dead [percent] => 10.665216445923 ) [11] => stdClass Object ( [name] => embracing_the_end [percent] => 8.6481952667236 ) [12] => stdClass Object ( [name] => seriously_severed [percent] => 8.6143236160278 ) [13] => stdClass Object ( [name] => heroic_hunger [percent] => 7.664014339447 ) [14] => stdClass Object ( [name] => dying_for_a_living [percent] => 4.6241703033447 ) [15] => stdClass Object ( [name] => dropper_of_treasure [percent] => 2.8013129234314 ) [16] => stdClass Object ( [name] => scarred_veteran [percent] => 1.8548201322556 ) [17] => stdClass Object ( [name] => hardened_champion [percent] => 1.7990039587021 ) [18] => stdClass Object ( [name] => pyromancer [percent] => 1.5619037151337 ) [19] => stdClass Object ( [name] => crypt_kicker [percent] => 1.5447294712067 ) [20] => stdClass Object ( [name] => formidable_fortune [percent] => 1.2575376033783 ) [21] => stdClass Object ( [name] => artful_dodger [percent] => 1.0457216501236 ) [22] => stdClass Object ( [name] => cave_crusher [percent] => 0.87016260623932 ) [23] => stdClass Object ( [name] => mummy_slayer [percent] => 0.86586904525757 ) [24] => stdClass Object ( [name] => stormcaller [percent] => 0.62972295284271 ) [25] => stdClass Object ( [name] => accomplished_master [percent] => 0.61684221029282 ) [26] => stdClass Object ( [name] => bombardier [percent] => 0.53097093105316 ) [27] => stdClass Object ( [name] => whirling_death [percent] => 0.5056865811348 ) [28] => stdClass Object ( [name] => slayer [percent] => 0.36065948009491 ) [29] => stdClass Object ( [name] => temple_toppler [percent] => 0.33060455322266 ) [30] => stdClass Object ( [name] => the_captains_special [percent] => 0.27383404970169 ) [31] => stdClass Object ( [name] => eating_off_the_floor [percent] => 0.18128387629986 ) [32] => stdClass Object ( [name] => lich_slayer [percent] => 0.1602931022644 ) [33] => stdClass Object ( [name] => frostweaver [percent] => 0.14884360134602 ) [34] => stdClass Object ( [name] => giant_spider_slayer [percent] => 0.1264216452837 ) [35] => stdClass Object ( [name] => skeleton_slayer [percent] => 0.12594458460808 ) [36] => stdClass Object ( [name] => grunt_slayer [percent] => 0.097797878086567 ) [37] => stdClass Object ( [name] => cultist_slayer [percent] => 0.095889627933502 ) [38] => stdClass Object ( [name] => orc_slayer [percent] => 0.078238300979137 ) [39] => stdClass Object ( [name] => demon_slayer [percent] => 0.076330050826073 ) [40] => stdClass Object ( [name] => as_luck_would_have_it_1 [percent] => 0.020036637783051 ) [41] => stdClass Object ( [name] => burned_alive [percent] => 0.020036637783051 ) [42] => stdClass Object ( [name] => as_luck_would_have_it_3 [percent] => 0.018128387629986 ) [43] => stdClass Object ( [name] => slayer_1 [percent] => 0.016697200015187 ) [44] => stdClass Object ( [name] => faithful_customer [percent] => 0.012403633445501 ) [45] => stdClass Object ( [name] => mummy_slayer_3 [percent] => 0.012403633445501 ) [46] => stdClass Object ( [name] => slayer_2 [percent] => 0.010495381429791 ) [47] => stdClass Object ( [name] => heroic_hunger_3 [percent] => 0.010018318891525 ) [48] => stdClass Object ( [name] => dying_for_a_living_3 [percent] => 0.0090641938149929 ) [49] => stdClass Object ( [name] => skeleton_slayer_3 [percent] => 0.008110067807138 ) [50] => stdClass Object ( [name] => faithful_customer_3 [percent] => 0.008110067807138 ) [51] => stdClass Object ( [name] => riddles_of_the_grave_3 [percent] => 0.0076330048032105 ) [52] => stdClass Object ( [name] => formidable_fortune_3 [percent] => 0.0071559422649443 ) [53] => stdClass Object ( [name] => dropper_of_treasure_3 [percent] => 0.0066788792610168 ) [54] => stdClass Object ( [name] => cultist_slayer_3 [percent] => 0.0062018167227507 ) [55] => stdClass Object ( [name] => eating_off_the_floor_3 [percent] => 0.0057247541844845 ) [56] => stdClass Object ( [name] => goblin_slayer_3 [percent] => 0.0057247541844845 ) [57] => stdClass Object ( [name] => secrets_of_the_flame_3 [percent] => 0.0057247541844845 ) [58] => stdClass Object ( [name] => mysteries_in_the_dark [percent] => 0.0042935656383634 ) [59] => stdClass Object ( [name] => riddles_of_the_grave [percent] => 0.0042935656383634 ) [60] => stdClass Object ( [name] => deader_than_dead_3 [percent] => 0.0042935656383634 ) [61] => stdClass Object ( [name] => secrets_of_the_flame [percent] => 0.0038165024016052 ) [62] => stdClass Object ( [name] => rude_interruption [percent] => 0.0038165024016052 ) [63] => stdClass Object ( [name] => slayer_3 [percent] => 0.0038165024016052 ) [64] => stdClass Object ( [name] => orc_slayer_3 [percent] => 0.0038165024016052 ) [65] => stdClass Object ( [name] => lich_slayer_3 [percent] => 0.0028623770922422 ) [66] => stdClass Object ( [name] => giant_spider_slayer_3 [percent] => 0.0028623770922422 ) [67] => stdClass Object ( [name] => whirling_death_3 [percent] => 0.0023853140883148 ) [68] => stdClass Object ( [name] => hardened_champion_3 [percent] => 0.0023853140883148 ) [69] => stdClass Object ( [name] => frostweaver_3 [percent] => 0.0023853140883148 ) [70] => stdClass Object ( [name] => cold_hearted_3 [percent] => 0.0023853140883148 ) [71] => stdClass Object ( [name] => generous_3 [percent] => 0.0023853140883148 ) [72] => stdClass Object ( [name] => cave_crusher_3 [percent] => 0.0019082512008026 ) [73] => stdClass Object ( [name] => stormcaller_3 [percent] => 0.0019082512008026 ) [74] => stdClass Object ( [name] => bombardier_3 [percent] => 0.0019082512008026 ) [75] => stdClass Object ( [name] => blessed_by_the_gods_3 [percent] => 0.0019082512008026 ) [76] => stdClass Object ( [name] => blessed_by_the_gods [percent] => 0.0019082512008026 ) [77] => stdClass Object ( [name] => artful_dodger_3 [percent] => 0.0019082512008026 ) [78] => stdClass Object ( [name] => trailblazer_3 [percent] => 0.0019082512008026 ) [79] => stdClass Object ( [name] => unruly_3 [percent] => 0.0019082512008026 ) [80] => stdClass Object ( [name] => accomplished_master_3 [percent] => 0.0019082512008026 ) [81] => stdClass Object ( [name] => temple_toppler_3 [percent] => 0.0019082512008026 ) [82] => stdClass Object ( [name] => pyromancer_3 [percent] => 0.0019082512008026 ) [83] => stdClass Object ( [name] => mysteries_in_the_dark_3 [percent] => 0.0019082512008026 ) [84] => stdClass Object ( [name] => light_footed_3 [percent] => 0.0019082512008026 ) [85] => stdClass Object ( [name] => scarred_veteran_3 [percent] => 0.0019082512008026 ) [86] => stdClass Object ( [name] => heedless_3 [percent] => 0.0019082512008026 ) [87] => stdClass Object ( [name] => crypt_kicker_3 [percent] => 0.0019082512008026 ) [88] => stdClass Object ( [name] => dragon_slayer_3 [percent] => 0.0014311885461211 ) [89] => stdClass Object ( [name] => daemon_slayer_3 [percent] => 0.0014311885461211 ) [90] => stdClass Object ( [name] => dragon_slayer [percent] => 0.0014311885461211 ) [91] => stdClass Object ( [name] => schizofrenic_3 [percent] => 0.00047706280020066 ) [92] => stdClass Object ( [name] => [percent] => 0 ) [93] => stdClass Object ( [name] => generous [percent] => 0 ) ) ================================================ FILE: examples/user/stats/GetPlayerAchievements.txt ================================================ Array ( [0] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => supervictorious [achieved] => 1 [name] => Super Victorious [description] => Win a total of 30 games across any game mode [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/710fa884cc942b05b4ff2856eda4a1eebe909f21.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9396ab7802bc827abefb5f13a4bdb04e05c5a079.jpg [unlockTimestamp] => 1438237608 ) [1] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => helenspride [achieved] => 1 [name] => Helen's Pride [description] => Score 6 Goals in a single game [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/d25f78987a4f8a3500172ef5c8019c02684ae2ba.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/05065c20c22438f791a5f23f20c154483299f90c.jpg [unlockTimestamp] => 1437893827 ) [2] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => battlecarcollector [achieved] => 1 [name] => Battle-Car Collector [description] => Unlock all Battle-Cars [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/b69193ec416423e20757130026768b5c71bf3177.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/5e2ccf8b81120ed738f7d498dd3f06a55cc64d2d.jpg [unlockTimestamp] => 1437894786 ) [3] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => dropsinthebucket [achieved] => 1 [name] => Drops in the Bucket [description] => Collect 50 Items [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/19c6744ebc45507a746469e1ba71e9654bf77a11.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/1b8bca57551d91dfbba27004505cd1e8a2cc9e58.jpg [unlockTimestamp] => 1438310461 ) [4] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => greasemonkey [achieved] => 1 [name] => Grease Monkey [description] => Customize every slot on a single Battle-Car [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ba582e59dd4672ffe1752c47b76ba7eb1a650454.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/aec92c92c1cd8c21576c117f1db6c0d2fadaba75.jpg [unlockTimestamp] => 1437894861 ) [5] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => pitchveteran [achieved] => 1 [name] => Pitch Veteran [description] => Play a total of 20 games across any game mode [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/c55951a42ba66003406158faf90e28dbe6458b0c.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/7edacce7bce74a838fd3057ff2a3f8448d73b1c8.jpg [unlockTimestamp] => 1437806004 ) [6] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => breakshot [achieved] => 1 [name] => Break Shot [description] => Score a goal by hitting your opponent into the ball [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/89997d040ba3905a9e5360a30082b803b1bc921b.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9b1ed566f6ab42bc5c31eba103ad86eae12ab505.jpg [unlockTimestamp] => 1437798363 ) [7] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => turbocharger [achieved] => 1 [name] => Turbocharger [description] => Use your Rocket Boost for a total of 5 minutes [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ea22e69de9d44c05e6ce497db64e6d82b1d53187.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/89130dffe20e4286e7331d97c76bd0287c49d568.jpg [unlockTimestamp] => 1437799271 ) [8] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => minutetowinit [achieved] => 1 [name] => Minute to Win it [description] => With only 60 seconds left, Win a game in which you were tied or trailing [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/fdd5ce73dc1c612c407bfac38da013efac61c1a9.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/8ec891467a1ad518daf8dd2de98364256a911643.jpg [unlockTimestamp] => 1437798554 ) [9] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => speeddemon [achieved] => 1 [name] => Speed Demon [description] => Completely fill and then empty your Rocket Boost 10 times in a single match [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/c11e603e583346392b6568ad96ebfbd1f98477d0.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/5c1602039641935b70bc1c4492a15a6db8a52605.jpg [unlockTimestamp] => 1437799638 ) [10] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => pickmeup [achieved] => 1 [name] => Pick-Me Up [description] => Collect 5 Items [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9c53a15a1d1f1722691b1471448ec0fc6eab6be2.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/bcbd911e0605c930d3714dbec61ab8429cf6c5a4.jpg [unlockTimestamp] => 1437799131 ) [11] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => wallcrawler [achieved] => 1 [name] => Wall-Crawler [description] => Drive on the dome walls for a total of 5 minutes [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/35d5f16bcd2a67e64026c3beb5fc130013c12b4e.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/e307dbbe620e0b4530917e7fa764dcbc49b8e1c2.jpg [unlockTimestamp] => 1437801013 ) [12] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => featherinyourrecap [achieved] => 1 [name] => Feather in Your Recap [description] => Watch a save file in Replay mode [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/74262e7580d0e3f17030c7694c0fad7920f99b87.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/3431cbdb828b3ac557afd552ccecea12b742c458.jpg [unlockTimestamp] => 1438311420 ) [13] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => winner [achieved] => 1 [name] => Winner [description] => Win a total of 5 games across any mode [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/e274145b3c21a55f80e0070f5dd46364da10eb05.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/b269d797cbcccf4d68529a2ff1a524d9626996fe.jpg [unlockTimestamp] => 1437801180 ) [14] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => cleansheet [achieved] => 1 [name] => Clean Sheet [description] => Win a game without giving up a single Goal [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/7c4125ea4f6d81ecf50589094fc92778a94661e8.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/fec9c436d6f05c3a904c7d9ad52449f1e6b1b0ad.jpg [unlockTimestamp] => 1437894785 ) [15] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => triplethreat [achieved] => 1 [name] => Triple Threat [description] => Win a 3v3 game [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/4811e355b1f84729f517098deb9b12fc2afc3a34.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/20590bb380acb604d2d6d1be1a54eef904c6d68b.jpg [unlockTimestamp] => 1437798554 ) [16] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => doubleup [achieved] => 1 [name] => Double Up [description] => Win a 2v2 game [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/13f0dccfdb88573115dafea639791866fd6484ad.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/70a08315760189a7a078d99848d534b03b332962.jpg [unlockTimestamp] => 1438310460 ) [17] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => singlesclub [achieved] => 1 [name] => Singles Club [description] => Win a 1v1 game [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/8e03bd6011ba4eed45630b0cf7a8787e9ea6d1bf.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/4263c0e66c5ca77853c377a19d6d9b02061c7de3.jpg [unlockTimestamp] => 1437797261 ) [18] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => perfectstart [achieved] => 1 [name] => Perfect Start [description] => Win your first game of the Season [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/6c478f5e5023bc27aea9d72ed5d2b36a298ae46d.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/a9cd85d387f1a46d419d5f5482892a69395679b4.jpg [unlockTimestamp] => 1437892059 ) [19] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => knowthedrill [achieved] => 1 [name] => Know the Drill [description] => Complete a Practice Drill [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/44f63dd8f08d7692d5528c3a8831ea3b171140f0.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/210eaa485f56902c3e16387c4d1de272dc444c32.jpg [unlockTimestamp] => 1437796456 ) [20] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => traveler [achieved] => 1 [name] => Traveler [description] => Play in every Rocket League stadium [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/4484dc4e2b83e3cd093411923a61e0d7868d564c.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/507a58a09cf6eb92ca99ad125fca5334174c0a2a.jpg [unlockTimestamp] => 1437800246 ) [21] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => tinkerer [achieved] => 1 [name] => Tinkerer [description] => Customize one slot on a single Battle-Car [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/e461f3103d5a8f49b851d4a0d3aff723a5376d5a.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/a3131a8eba30a7e0e68986a3d8ef7535b5eabf1e.jpg [unlockTimestamp] => 1437795500 ) [22] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => firsttimer [achieved] => 1 [name] => First-Timer [description] => Score your first Goal [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/2a870e59a1101ebf87c0e8aef9f95a6d900fa454.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/494d0e131443ebbb8c3bffdb884b707ac0ba5203.jpg [unlockTimestamp] => 1437796922 ) [23] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => barrasbravas [achieved] => 1 [name] => Barras Bravas [description] => Play an Online game with a Friend [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/2b74674e9d9f2c04cf59a60bb226a1c67cbdd024.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/392e39f23a3b0bec553fd262c1c0ad564e21019b.jpg [unlockTimestamp] => 1437796889 ) [24] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => virtuoso [achieved] => 0 [name] => Virtuoso [description] => Unlock all original Achievements [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/d63287a74492218ac97000af0147f6e40bd51f1d.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/33f14554d8cb38d7ecefd98dbb765e21efc26f20.jpg [unlockTimestamp] => ) [25] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => stocked [achieved] => 0 [name] => Stocked [description] => Collect all Items [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/689d4370df62dab7b3f904d4f7b182310958efd2.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/f36ef329ccfc916aff310c3237ef92f6f194579c.jpg [unlockTimestamp] => ) [26] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => farfaraway [achieved] => 0 [name] => Far, Far Away... [description] => Drive a total of 500 km [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/c3c40f439d804bbcf892229ed76b2bedb25058c7.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ae25bf8b5ffe14f37e3e971276f1314fd0b5f6d1.jpg [unlockTimestamp] => ) [27] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => champion [achieved] => 0 [name] => Champion [description] => Win the Season Championship [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ef9fc46837a6a31b2fedd4d227f27cd3af0a9867.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/60d3c3176775495281f222c10675dddc2b4ad9cd.jpg [unlockTimestamp] => ) [28] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => thestreak [achieved] => 0 [name] => The Streak [description] => Win 10 games in a row across any mode [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9974f05905881b45c7a2dbbd3c84d5e8c57fa01a.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/7413ea8cb240492e6bea29e31300d2963ccd65a2.jpg [unlockTimestamp] => ) [29] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => rocketeer [achieved] => 0 [name] => Rocketeer [description] => Complete the regular Season [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/90d781a6891727c11ddec87f6535bd74d22ef580.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/90dbc6fc26cf20b84910374cdc427f3738719339.jpg [unlockTimestamp] => ) [30] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => ridersblock [achieved] => 0 [name] => Rider's Block [description] => Make 20 Saves [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/bfc6762c212bec0612729c07f669d3a910963071.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/a9dbcbf9eadbed9cb5523548d5be85cda7e16839.jpg [unlockTimestamp] => ) [31] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => drillsergeant [achieved] => 0 [name] => Drill Sergeant [description] => Complete every Practice Drill (any difficulty) [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/1722cf4d9f19e2f8f64d2d44485323c2216ed4ec.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ea6d1769868939b99d024a6256946bf0934d00a6.jpg [unlockTimestamp] => ) [32] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => teamplayer [achieved] => 0 [name] => Team Player [description] => Play against every team in a Season [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/8e893a17e7cdd62e051dc69b73d4c484eed402d5.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/93ae9471624053ccb2c4243b3a3eabc8312c121f.jpg [unlockTimestamp] => ) [33] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => sarpbcforever [achieved] => 0 [name] => SARPBC Forever [description] => Play with both classic Battle-Cars [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/0c41f15dbb9323dc0822eae6616c82fca137af8b.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ecd41aec3ddc6f9114d5251a413af2994248a6d1.jpg [unlockTimestamp] => ) [34] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => stillashowoff [achieved] => 0 [name] => Still A Show-Off [description] => Score a goal while reversing [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/c991bb3e47b1e33169f699a8331f73889186f021.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ccea164eac4e859c3b6778253d2f47d2a0b6ce8d.jpg [unlockTimestamp] => ) [35] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => friendly [achieved] => 0 [name] => Friendly [description] => Play an Exhibition match [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/96eb1d571ab406ac143c6d768292c0a8714ffe65.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/0235fb209b67a27cdf406b4c1d00094c1054e725.jpg [unlockTimestamp] => ) [36] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => skyhigh [achieved] => 0 [name] => Sky High [description] => Score an Aerial Goal [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/60b1f8b5d598d01186c8d2c2600b268a13bee63d.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/b81801f3a078924e54f84e98337419810106f37b.jpg [unlockTimestamp] => ) [37] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => allfours [achieved] => 0 [name] => All Fours [description] => Win a 4v4 game [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/6d16a566ac4c1c79720ee79d43c2d7f527a93dbd.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/d21faf6bb60918ebab768d0b35a4e3698e2aa20d.jpg [unlockTimestamp] => ) [38] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => gladiator [achieved] => 0 [name] => Gladiator [description] => Play a game on Utopia Coliseum [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/954409ee668ab6149a5bd007ae5f93b6ccc2aef8.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/0c27ce9c3c1fe3e7c025e684816cf3a2ce686a55.jpg [unlockTimestamp] => ) [39] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => winningiswinning [achieved] => 0 [name] => Winning is Winning [description] => Win a Season Championship using Dominus or Takumi in every game [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9aab4ee9614d12bcf3e7c7c5fb4441370dcae12b.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/158d9ba3fe60b7befe32c0c29313b0dd7109b6cc.jpg [unlockTimestamp] => ) [40] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => aninchand62miles [achieved] => 0 [name] => An Inch and 62 Miles [description] => Drive 100 km with either the Cristiano or Spinner Wheels [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/0919f99fd4f9a67f7aad68c703b3afc639625d51.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/d89c612e5e92250ca1dd2107c098340e1469a08f.jpg [unlockTimestamp] => ) [41] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => rideordie [achieved] => 0 [name] => Ride or Die [description] => Equip both Dominus and Takumi with a new Decal and Paint Finish, then win a game [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9e498c5a0429ff2d7894ccd4501e5613a9db76aa.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/914697bd315b51b4f170b0054144280b02e07ebd.jpg [unlockTimestamp] => ) [42] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => dontlookback [achieved] => 0 [name] => Don't Look Back [description] => Use the Burnout or Nitrous Rocket Boost for a total of 10 minutes [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/e6002d682ed3b2356509ce8a48d09bdc50f67977.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/793e5ce0698ac9bd893dc36bdbd69d5081a802cc.jpg [unlockTimestamp] => ) [43] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => familynotfriends [achieved] => 0 [name] => Family, Not Friends [description] => Play a complete game with both Dominus and Takumi [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/e3e5c5012a74323f3f3a005a481feabe40c7bd8b.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/02b23f206188e0ced0b236b47a30e6e09859e3bf.jpg [unlockTimestamp] => ) [44] => Syntax\SteamApi\Containers\Achievement Object ( [apiName] => driftking [achieved] => 0 [name] => Drift King [description] => Perform a 180 powerslide with both the Cristiano and Spinner Wheels [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9c27899d8b0e2fd45029cdd6906055f4cd963c48.jpg [iconGray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/83ef17be796d9b9b1640e34b5db6002683e03330.jpg [unlockTimestamp] => ) ) ================================================ FILE: examples/user/stats/GetSchemaForGame.txt ================================================ stdClass Object ( [game] => stdClass Object ( [gameName] => Rocket League BETA [gameVersion] => 13 [availableGameStats] => stdClass Object ( [achievements] => Array ( [0] => stdClass Object ( [name] => Virtuoso [defaultvalue] => 0 [displayName] => Virtuoso [hidden] => 0 [description] => Unlock all original Achievements [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/d63287a74492218ac97000af0147f6e40bd51f1d.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/33f14554d8cb38d7ecefd98dbb765e21efc26f20.jpg ) [1] => stdClass Object ( [name] => Stocked [defaultvalue] => 0 [displayName] => Stocked [hidden] => 0 [description] => Collect all Items [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/689d4370df62dab7b3f904d4f7b182310958efd2.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/f36ef329ccfc916aff310c3237ef92f6f194579c.jpg ) [2] => stdClass Object ( [name] => FarFarAway [defaultvalue] => 0 [displayName] => Far, Far Away... [hidden] => 0 [description] => Drive a total of 500 km [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/c3c40f439d804bbcf892229ed76b2bedb25058c7.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ae25bf8b5ffe14f37e3e971276f1314fd0b5f6d1.jpg ) [3] => stdClass Object ( [name] => SuperVictorious [defaultvalue] => 0 [displayName] => Super Victorious [hidden] => 0 [description] => Win a total of 30 games across any game mode [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/710fa884cc942b05b4ff2856eda4a1eebe909f21.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9396ab7802bc827abefb5f13a4bdb04e05c5a079.jpg ) [4] => stdClass Object ( [name] => Champion [defaultvalue] => 0 [displayName] => Champion [hidden] => 0 [description] => Win the Season Championship [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ef9fc46837a6a31b2fedd4d227f27cd3af0a9867.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/60d3c3176775495281f222c10675dddc2b4ad9cd.jpg ) [5] => stdClass Object ( [name] => TheStreak [defaultvalue] => 0 [displayName] => The Streak [hidden] => 0 [description] => Win 10 games in a row across any mode [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9974f05905881b45c7a2dbbd3c84d5e8c57fa01a.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/7413ea8cb240492e6bea29e31300d2963ccd65a2.jpg ) [6] => stdClass Object ( [name] => HelensPride [defaultvalue] => 0 [displayName] => Helen's Pride [hidden] => 0 [description] => Score 6 Goals in a single game [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/d25f78987a4f8a3500172ef5c8019c02684ae2ba.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/05065c20c22438f791a5f23f20c154483299f90c.jpg ) [7] => stdClass Object ( [name] => BattleCarCollector [defaultvalue] => 0 [displayName] => Battle-Car Collector [hidden] => 0 [description] => Unlock all Battle-Cars [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/b69193ec416423e20757130026768b5c71bf3177.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/5e2ccf8b81120ed738f7d498dd3f06a55cc64d2d.jpg ) [8] => stdClass Object ( [name] => DropsintheBucket [defaultvalue] => 0 [displayName] => Drops in the Bucket [hidden] => 0 [description] => Collect 50 Items [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/19c6744ebc45507a746469e1ba71e9654bf77a11.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/1b8bca57551d91dfbba27004505cd1e8a2cc9e58.jpg ) [9] => stdClass Object ( [name] => Rocketeer [defaultvalue] => 0 [displayName] => Rocketeer [hidden] => 0 [description] => Complete the regular Season [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/90d781a6891727c11ddec87f6535bd74d22ef580.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/90dbc6fc26cf20b84910374cdc427f3738719339.jpg ) [10] => stdClass Object ( [name] => GreaseMonkey [defaultvalue] => 0 [displayName] => Grease Monkey [hidden] => 0 [description] => Customize every slot on a single Battle-Car [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ba582e59dd4672ffe1752c47b76ba7eb1a650454.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/aec92c92c1cd8c21576c117f1db6c0d2fadaba75.jpg ) [11] => stdClass Object ( [name] => PitchVeteran [defaultvalue] => 0 [displayName] => Pitch Veteran [hidden] => 0 [description] => Play a total of 20 games across any game mode [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/c55951a42ba66003406158faf90e28dbe6458b0c.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/7edacce7bce74a838fd3057ff2a3f8448d73b1c8.jpg ) [12] => stdClass Object ( [name] => RidersBlock [defaultvalue] => 0 [displayName] => Rider's Block [hidden] => 0 [description] => Make 20 Saves [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/bfc6762c212bec0612729c07f669d3a910963071.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/a9dbcbf9eadbed9cb5523548d5be85cda7e16839.jpg ) [13] => stdClass Object ( [name] => BreakShot [defaultvalue] => 0 [displayName] => Break Shot [hidden] => 0 [description] => Score a goal by hitting your opponent into the ball [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/89997d040ba3905a9e5360a30082b803b1bc921b.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9b1ed566f6ab42bc5c31eba103ad86eae12ab505.jpg ) [14] => stdClass Object ( [name] => Turbocharger [defaultvalue] => 0 [displayName] => Turbocharger [hidden] => 0 [description] => Use your Rocket Boost for a total of 5 minutes [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ea22e69de9d44c05e6ce497db64e6d82b1d53187.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/89130dffe20e4286e7331d97c76bd0287c49d568.jpg ) [15] => stdClass Object ( [name] => DrillSergeant [defaultvalue] => 0 [displayName] => Drill Sergeant [hidden] => 0 [description] => Complete every Practice Drill (any difficulty) [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/1722cf4d9f19e2f8f64d2d44485323c2216ed4ec.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ea6d1769868939b99d024a6256946bf0934d00a6.jpg ) [16] => stdClass Object ( [name] => MinutetoWinit [defaultvalue] => 0 [displayName] => Minute to Win it [hidden] => 0 [description] => With only 60 seconds left, Win a game in which you were tied or trailing [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/fdd5ce73dc1c612c407bfac38da013efac61c1a9.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/8ec891467a1ad518daf8dd2de98364256a911643.jpg ) [17] => stdClass Object ( [name] => SpeedDemon [defaultvalue] => 0 [displayName] => Speed Demon [hidden] => 0 [description] => Completely fill and then empty your Rocket Boost 10 times in a single match [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/c11e603e583346392b6568ad96ebfbd1f98477d0.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/5c1602039641935b70bc1c4492a15a6db8a52605.jpg ) [18] => stdClass Object ( [name] => PickMeUp [defaultvalue] => 0 [displayName] => Pick-Me Up [hidden] => 0 [description] => Collect 5 Items [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9c53a15a1d1f1722691b1471448ec0fc6eab6be2.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/bcbd911e0605c930d3714dbec61ab8429cf6c5a4.jpg ) [19] => stdClass Object ( [name] => WallCrawler [defaultvalue] => 0 [displayName] => Wall-Crawler [hidden] => 0 [description] => Drive on the dome walls for a total of 5 minutes [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/35d5f16bcd2a67e64026c3beb5fc130013c12b4e.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/e307dbbe620e0b4530917e7fa764dcbc49b8e1c2.jpg ) [20] => stdClass Object ( [name] => TeamPlayer [defaultvalue] => 0 [displayName] => Team Player [hidden] => 0 [description] => Play against every team in a Season [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/8e893a17e7cdd62e051dc69b73d4c484eed402d5.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/93ae9471624053ccb2c4243b3a3eabc8312c121f.jpg ) [21] => stdClass Object ( [name] => SARPBCForever [defaultvalue] => 0 [displayName] => SARPBC Forever [hidden] => 0 [description] => Play with both classic Battle-Cars [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/0c41f15dbb9323dc0822eae6616c82fca137af8b.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ecd41aec3ddc6f9114d5251a413af2994248a6d1.jpg ) [22] => stdClass Object ( [name] => FeatherinYourRecap [defaultvalue] => 0 [displayName] => Feather in Your Recap [hidden] => 0 [description] => Watch a save file in Replay mode [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/74262e7580d0e3f17030c7694c0fad7920f99b87.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/3431cbdb828b3ac557afd552ccecea12b742c458.jpg ) [23] => stdClass Object ( [name] => Winner [defaultvalue] => 0 [displayName] => Winner [hidden] => 0 [description] => Win a total of 5 games across any mode [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/e274145b3c21a55f80e0070f5dd46364da10eb05.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/b269d797cbcccf4d68529a2ff1a524d9626996fe.jpg ) [24] => stdClass Object ( [name] => CleanSheet [defaultvalue] => 0 [displayName] => Clean Sheet [hidden] => 0 [description] => Win a game without giving up a single Goal [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/7c4125ea4f6d81ecf50589094fc92778a94661e8.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/fec9c436d6f05c3a904c7d9ad52449f1e6b1b0ad.jpg ) [25] => stdClass Object ( [name] => TripleThreat [defaultvalue] => 0 [displayName] => Triple Threat [hidden] => 0 [description] => Win a 3v3 game [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/4811e355b1f84729f517098deb9b12fc2afc3a34.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/20590bb380acb604d2d6d1be1a54eef904c6d68b.jpg ) [26] => stdClass Object ( [name] => DoubleUp [defaultvalue] => 0 [displayName] => Double Up [hidden] => 0 [description] => Win a 2v2 game [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/13f0dccfdb88573115dafea639791866fd6484ad.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/70a08315760189a7a078d99848d534b03b332962.jpg ) [27] => stdClass Object ( [name] => SinglesClub [defaultvalue] => 0 [displayName] => Singles Club [hidden] => 0 [description] => Win a 1v1 game [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/8e03bd6011ba4eed45630b0cf7a8787e9ea6d1bf.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/4263c0e66c5ca77853c377a19d6d9b02061c7de3.jpg ) [28] => stdClass Object ( [name] => PerfectStart [defaultvalue] => 0 [displayName] => Perfect Start [hidden] => 0 [description] => Win your first game of the Season [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/6c478f5e5023bc27aea9d72ed5d2b36a298ae46d.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/a9cd85d387f1a46d419d5f5482892a69395679b4.jpg ) [29] => stdClass Object ( [name] => StillAShowOff [defaultvalue] => 0 [displayName] => Still A Show-Off [hidden] => 0 [description] => Score a goal while reversing [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/c991bb3e47b1e33169f699a8331f73889186f021.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/ccea164eac4e859c3b6778253d2f47d2a0b6ce8d.jpg ) [30] => stdClass Object ( [name] => KnowTheDrill [defaultvalue] => 0 [displayName] => Know the Drill [hidden] => 0 [description] => Complete a Practice Drill [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/44f63dd8f08d7692d5528c3a8831ea3b171140f0.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/210eaa485f56902c3e16387c4d1de272dc444c32.jpg ) [31] => stdClass Object ( [name] => Traveler [defaultvalue] => 0 [displayName] => Traveler [hidden] => 0 [description] => Play in every Rocket League stadium [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/4484dc4e2b83e3cd093411923a61e0d7868d564c.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/507a58a09cf6eb92ca99ad125fca5334174c0a2a.jpg ) [32] => stdClass Object ( [name] => Tinkerer [defaultvalue] => 0 [displayName] => Tinkerer [hidden] => 0 [description] => Customize one slot on a single Battle-Car [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/e461f3103d5a8f49b851d4a0d3aff723a5376d5a.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/a3131a8eba30a7e0e68986a3d8ef7535b5eabf1e.jpg ) [33] => stdClass Object ( [name] => FirstTimer [defaultvalue] => 0 [displayName] => First-Timer [hidden] => 0 [description] => Score your first Goal [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/2a870e59a1101ebf87c0e8aef9f95a6d900fa454.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/494d0e131443ebbb8c3bffdb884b707ac0ba5203.jpg ) [34] => stdClass Object ( [name] => BarrasBravas [defaultvalue] => 0 [displayName] => Barras Bravas [hidden] => 0 [description] => Play an Online game with a Friend [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/2b74674e9d9f2c04cf59a60bb226a1c67cbdd024.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/392e39f23a3b0bec553fd262c1c0ad564e21019b.jpg ) [35] => stdClass Object ( [name] => Friendly [defaultvalue] => 0 [displayName] => Friendly [hidden] => 0 [description] => Play an Exhibition match [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/96eb1d571ab406ac143c6d768292c0a8714ffe65.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/0235fb209b67a27cdf406b4c1d00094c1054e725.jpg ) [36] => stdClass Object ( [name] => SkyHigh [defaultvalue] => 0 [displayName] => Sky High [hidden] => 1 [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/60b1f8b5d598d01186c8d2c2600b268a13bee63d.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/b81801f3a078924e54f84e98337419810106f37b.jpg ) [37] => stdClass Object ( [name] => AllFours [defaultvalue] => 0 [displayName] => All Fours [hidden] => 1 [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/6d16a566ac4c1c79720ee79d43c2d7f527a93dbd.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/d21faf6bb60918ebab768d0b35a4e3698e2aa20d.jpg ) [38] => stdClass Object ( [name] => Gladiator [defaultvalue] => 0 [displayName] => Gladiator [hidden] => 1 [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/954409ee668ab6149a5bd007ae5f93b6ccc2aef8.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/0c27ce9c3c1fe3e7c025e684816cf3a2ce686a55.jpg ) [39] => stdClass Object ( [name] => WinningIsWinning [defaultvalue] => 0 [displayName] => Winning is Winning [hidden] => 1 [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9aab4ee9614d12bcf3e7c7c5fb4441370dcae12b.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/158d9ba3fe60b7befe32c0c29313b0dd7109b6cc.jpg ) [40] => stdClass Object ( [name] => AnInchAnd62Miles [defaultvalue] => 0 [displayName] => An Inch and 62 Miles [hidden] => 1 [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/0919f99fd4f9a67f7aad68c703b3afc639625d51.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/d89c612e5e92250ca1dd2107c098340e1469a08f.jpg ) [41] => stdClass Object ( [name] => RideOrDie [defaultvalue] => 0 [displayName] => Ride or Die [hidden] => 1 [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9e498c5a0429ff2d7894ccd4501e5613a9db76aa.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/914697bd315b51b4f170b0054144280b02e07ebd.jpg ) [42] => stdClass Object ( [name] => DontLookBack [defaultvalue] => 0 [displayName] => Don't Look Back [hidden] => 1 [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/e6002d682ed3b2356509ce8a48d09bdc50f67977.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/793e5ce0698ac9bd893dc36bdbd69d5081a802cc.jpg ) [43] => stdClass Object ( [name] => FamilyNotFriends [defaultvalue] => 0 [displayName] => Family, Not Friends [hidden] => 1 [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/e3e5c5012a74323f3f3a005a481feabe40c7bd8b.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/02b23f206188e0ced0b236b47a30e6e09859e3bf.jpg ) [44] => stdClass Object ( [name] => DriftKing [defaultvalue] => 0 [displayName] => Drift King [hidden] => 1 [icon] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/9c27899d8b0e2fd45029cdd6906055f4cd963c48.jpg [icongray] => http://cdn.akamai.steamstatic.com/steamcommunity/public/images/apps/252950/83ef17be796d9b9b1640e34b5db6002683e03330.jpg ) ) [stats] => Array ( [0] => stdClass Object ( [name] => 1_2 [defaultvalue] => 0 [displayName] => ) [1] => stdClass Object ( [name] => 1_3 [defaultvalue] => 0 [displayName] => ) [2] => stdClass Object ( [name] => 1_8 [defaultvalue] => 0 [displayName] => ) [3] => stdClass Object ( [name] => 1_11 [defaultvalue] => 0 [displayName] => ) [4] => stdClass Object ( [name] => 1_12 [defaultvalue] => 0 [displayName] => ) [5] => stdClass Object ( [name] => 1_18 [defaultvalue] => 0 [displayName] => ) [6] => stdClass Object ( [name] => 1_23 [defaultvalue] => 0 [displayName] => ) [7] => stdClass Object ( [name] => 1_40 [defaultvalue] => 0 [displayName] => ) [8] => stdClass Object ( [name] => 1_42 [defaultvalue] => 0 [displayName] => ) ) ) ) ) ================================================ FILE: examples/user/stats/GetUserStatsForGame.txt ================================================ Array ( [0] => stdClass Object ( [name] => explosive_exit [achieved] => 1 ) [1] => stdClass Object ( [name] => suddenly_skewered [achieved] => 1 ) [2] => stdClass Object ( [name] => the_undeath_of_khamun [achieved] => 1 ) ) ================================================ FILE: examples/user/stats/GetUserStatsForGameAll.txt ================================================ stdClass Object ( [steamID] => 76561198159417876 [gameName] => ValveTestApp260 [stats] => Array ( [0] => stdClass Object ( [name] => total_kills [value] => 2210 ) [1] => stdClass Object ( [name] => total_deaths [value] => 2796 ) [2] => stdClass Object ( [name] => total_time_played [value] => 345679 ) [3] => stdClass Object ( [name] => total_planted_bombs [value] => 167 ) [4] => stdClass Object ( [name] => total_defused_bombs [value] => 56 ) [5] => stdClass Object ( [name] => total_wins [value] => 1609 ) [6] => stdClass Object ( [name] => total_damage_done [value] => 339844 ) [7] => stdClass Object ( [name] => total_money_earned [value] => 7836172 ) [8] => stdClass Object ( [name] => total_rescued_hostages [value] => 2 ) [9] => stdClass Object ( [name] => total_kills_knife [value] => 61 ) [10] => stdClass Object ( [name] => total_kills_hegrenade [value] => 41 ) [11] => stdClass Object ( [name] => total_kills_glock [value] => 69 ) [12] => stdClass Object ( [name] => total_kills_deagle [value] => 158 ) [13] => stdClass Object ( [name] => total_kills_elite [value] => 3 ) [14] => stdClass Object ( [name] => total_kills_fiveseven [value] => 46 ) [15] => stdClass Object ( [name] => total_kills_xm1014 [value] => 5 ) [16] => stdClass Object ( [name] => total_kills_mac10 [value] => 12 ) [17] => stdClass Object ( [name] => total_kills_ump45 [value] => 13 ) [18] => stdClass Object ( [name] => total_kills_p90 [value] => 134 ) [19] => stdClass Object ( [name] => total_kills_awp [value] => 534 ) [20] => stdClass Object ( [name] => total_kills_ak47 [value] => 433 ) [21] => stdClass Object ( [name] => total_kills_aug [value] => 9 ) [22] => stdClass Object ( [name] => total_kills_famas [value] => 15 ) [23] => stdClass Object ( [name] => total_kills_g3sg1 [value] => 3 ) [24] => stdClass Object ( [name] => total_kills_m249 [value] => 8 ) [25] => stdClass Object ( [name] => total_kills_headshot [value] => 728 ) [26] => stdClass Object ( [name] => total_kills_enemy_weapon [value] => 351 ) [27] => stdClass Object ( [name] => total_wins_pistolround [value] => 107 ) [28] => stdClass Object ( [name] => total_wins_map_cs_office [value] => 4 ) [29] => stdClass Object ( [name] => total_wins_map_de_dust2 [value] => 293 ) [30] => stdClass Object ( [name] => total_wins_map_de_inferno [value] => 69 ) [31] => stdClass Object ( [name] => total_wins_map_de_nuke [value] => 120 ) [32] => stdClass Object ( [name] => total_wins_map_de_train [value] => 15 ) [33] => stdClass Object ( [name] => total_weapons_donated [value] => 341 ) [34] => stdClass Object ( [name] => total_broken_windows [value] => 2 ) [35] => stdClass Object ( [name] => total_kills_enemy_blinded [value] => 41 ) [36] => stdClass Object ( [name] => total_kills_knife_fight [value] => 19 ) [37] => stdClass Object ( [name] => total_kills_against_zoomed_sniper [value] => 210 ) [38] => stdClass Object ( [name] => total_dominations [value] => 3 ) [39] => stdClass Object ( [name] => total_shots_hit [value] => 6804 ) [40] => stdClass Object ( [name] => total_shots_fired [value] => 44679 ) [41] => stdClass Object ( [name] => total_rounds_played [value] => 3376 ) [42] => stdClass Object ( [name] => total_shots_deagle [value] => 1961 ) [43] => stdClass Object ( [name] => total_shots_glock [value] => 3008 ) [44] => stdClass Object ( [name] => total_shots_elite [value] => 289 ) [45] => stdClass Object ( [name] => total_shots_fiveseven [value] => 966 ) [46] => stdClass Object ( [name] => total_shots_awp [value] => 2488 ) [47] => stdClass Object ( [name] => total_shots_ak47 [value] => 10196 ) [48] => stdClass Object ( [name] => total_shots_aug [value] => 210 ) [49] => stdClass Object ( [name] => total_shots_famas [value] => 420 ) [50] => stdClass Object ( [name] => total_shots_g3sg1 [value] => 19 ) [51] => stdClass Object ( [name] => total_shots_p90 [value] => 5381 ) [52] => stdClass Object ( [name] => total_shots_mac10 [value] => 633 ) [53] => stdClass Object ( [name] => total_shots_ump45 [value] => 598 ) [54] => stdClass Object ( [name] => total_shots_xm1014 [value] => 276 ) [55] => stdClass Object ( [name] => total_shots_m249 [value] => 232 ) [56] => stdClass Object ( [name] => total_hits_deagle [value] => 371 ) [57] => stdClass Object ( [name] => total_hits_glock [value] => 386 ) [58] => stdClass Object ( [name] => total_hits_elite [value] => 26 ) [59] => stdClass Object ( [name] => total_hits_fiveseven [value] => 150 ) [60] => stdClass Object ( [name] => total_hits_awp [value] => 604 ) [61] => stdClass Object ( [name] => total_hits_ak47 [value] => 1442 ) [62] => stdClass Object ( [name] => total_hits_aug [value] => 34 ) [63] => stdClass Object ( [name] => total_hits_famas [value] => 88 ) [64] => stdClass Object ( [name] => total_hits_g3sg1 [value] => 5 ) [65] => stdClass Object ( [name] => total_hits_p90 [value] => 781 ) [66] => stdClass Object ( [name] => total_hits_mac10 [value] => 81 ) [67] => stdClass Object ( [name] => total_hits_ump45 [value] => 74 ) [68] => stdClass Object ( [name] => total_hits_xm1014 [value] => 52 ) [69] => stdClass Object ( [name] => total_hits_m249 [value] => 35 ) [70] => stdClass Object ( [name] => total_rounds_map_cs_office [value] => 20 ) [71] => stdClass Object ( [name] => total_rounds_map_de_dust2 [value] => 653 ) [72] => stdClass Object ( [name] => total_rounds_map_de_inferno [value] => 134 ) [73] => stdClass Object ( [name] => total_rounds_map_de_nuke [value] => 235 ) [74] => stdClass Object ( [name] => total_rounds_map_de_train [value] => 30 ) [75] => stdClass Object ( [name] => last_match_t_wins [value] => 1 ) [76] => stdClass Object ( [name] => last_match_ct_wins [value] => 1 ) [77] => stdClass Object ( [name] => last_match_wins [value] => 1 ) [78] => stdClass Object ( [name] => last_match_max_players [value] => 10 ) [79] => stdClass Object ( [name] => last_match_kills [value] => 3 ) [80] => stdClass Object ( [name] => last_match_deaths [value] => 1 ) [81] => stdClass Object ( [name] => last_match_mvps [value] => 1 ) [82] => stdClass Object ( [name] => last_match_favweapon_id [value] => 9 ) [83] => stdClass Object ( [name] => last_match_favweapon_shots [value] => 7 ) [84] => stdClass Object ( [name] => last_match_favweapon_hits [value] => 2 ) [85] => stdClass Object ( [name] => last_match_favweapon_kills [value] => 2 ) [86] => stdClass Object ( [name] => last_match_damage [value] => 261 ) [87] => stdClass Object ( [name] => last_match_money_spent [value] => 6150 ) [88] => stdClass Object ( [name] => last_match_dominations [value] => 0 ) [89] => stdClass Object ( [name] => total_mvps [value] => 256 ) [90] => stdClass Object ( [name] => total_gun_game_rounds_played [value] => 1 ) [91] => stdClass Object ( [name] => total_matches_won [value] => 47 ) [92] => stdClass Object ( [name] => total_matches_played [value] => 143 ) [93] => stdClass Object ( [name] => total_gg_matches_played [value] => 1 ) [94] => stdClass Object ( [name] => total_contribution_score [value] => 5148 ) [95] => stdClass Object ( [name] => last_match_contribution_score [value] => 6 ) [96] => stdClass Object ( [name] => last_match_rounds [value] => 2 ) [97] => stdClass Object ( [name] => total_kills_hkp2000 [value] => 122 ) [98] => stdClass Object ( [name] => total_shots_hkp2000 [value] => 3464 ) [99] => stdClass Object ( [name] => total_hits_hkp2000 [value] => 544 ) [100] => stdClass Object ( [name] => total_hits_p250 [value] => 320 ) [101] => stdClass Object ( [name] => total_kills_p250 [value] => 69 ) [102] => stdClass Object ( [name] => total_shots_p250 [value] => 1669 ) [103] => stdClass Object ( [name] => total_kills_sg556 [value] => 5 ) [104] => stdClass Object ( [name] => total_shots_sg556 [value] => 176 ) [105] => stdClass Object ( [name] => total_hits_sg556 [value] => 21 ) [106] => stdClass Object ( [name] => total_hits_scar20 [value] => 9 ) [107] => stdClass Object ( [name] => total_kills_scar20 [value] => 5 ) [108] => stdClass Object ( [name] => total_shots_scar20 [value] => 50 ) [109] => stdClass Object ( [name] => total_shots_ssg08 [value] => 1251 ) [110] => stdClass Object ( [name] => total_hits_ssg08 [value] => 225 ) [111] => stdClass Object ( [name] => total_kills_ssg08 [value] => 88 ) [112] => stdClass Object ( [name] => total_shots_mp7 [value] => 130 ) [113] => stdClass Object ( [name] => total_hits_mp7 [value] => 14 ) [114] => stdClass Object ( [name] => total_kills_mp7 [value] => 2 ) [115] => stdClass Object ( [name] => total_kills_mp9 [value] => 14 ) [116] => stdClass Object ( [name] => total_shots_mp9 [value] => 463 ) [117] => stdClass Object ( [name] => total_hits_mp9 [value] => 99 ) [118] => stdClass Object ( [name] => total_hits_nova [value] => 151 ) [119] => stdClass Object ( [name] => total_kills_nova [value] => 22 ) [120] => stdClass Object ( [name] => total_shots_nova [value] => 945 ) [121] => stdClass Object ( [name] => total_hits_negev [value] => 130 ) [122] => stdClass Object ( [name] => total_kills_negev [value] => 41 ) [123] => stdClass Object ( [name] => total_shots_negev [value] => 1875 ) [124] => stdClass Object ( [name] => total_shots_sawedoff [value] => 128 ) [125] => stdClass Object ( [name] => total_hits_sawedoff [value] => 7 ) [126] => stdClass Object ( [name] => total_kills_sawedoff [value] => 1 ) [127] => stdClass Object ( [name] => total_shots_bizon [value] => 1114 ) [128] => stdClass Object ( [name] => total_hits_bizon [value] => 130 ) [129] => stdClass Object ( [name] => total_kills_bizon [value] => 23 ) [130] => stdClass Object ( [name] => total_kills_tec9 [value] => 78 ) [131] => stdClass Object ( [name] => total_shots_tec9 [value] => 1878 ) [132] => stdClass Object ( [name] => total_hits_tec9 [value] => 278 ) [133] => stdClass Object ( [name] => total_shots_mag7 [value] => 160 ) [134] => stdClass Object ( [name] => total_hits_mag7 [value] => 11 ) [135] => stdClass Object ( [name] => total_kills_mag7 [value] => 2 ) [136] => stdClass Object ( [name] => total_kills_m4a1 [value] => 184 ) [137] => stdClass Object ( [name] => total_kills_galilar [value] => 8 ) [138] => stdClass Object ( [name] => total_kills_taser [value] => 2 ) [139] => stdClass Object ( [name] => total_shots_m4a1 [value] => 4166 ) [140] => stdClass Object ( [name] => total_shots_galilar [value] => 517 ) [141] => stdClass Object ( [name] => total_shots_taser [value] => 16 ) [142] => stdClass Object ( [name] => total_hits_m4a1 [value] => 737 ) [143] => stdClass Object ( [name] => total_hits_galilar [value] => 38 ) [144] => stdClass Object ( [name] => GI.lesson.csgo_instr_explain_buymenu [value] => 16 ) [145] => stdClass Object ( [name] => GI.lesson.csgo_instr_explain_buyarmor [value] => 16 ) [146] => stdClass Object ( [name] => GI.lesson.csgo_instr_explain_plant_bomb [value] => 0 ) [147] => stdClass Object ( [name] => GI.lesson.csgo_instr_explain_bomb_carrier [value] => 0 ) [148] => stdClass Object ( [name] => GI.lesson.defuse_planted_bomb [value] => 0 ) [149] => stdClass Object ( [name] => GI.lesson.csgo_instr_explain_follow_bomber [value] => 0 ) [150] => stdClass Object ( [name] => GI.lesson.csgo_instr_explain_pickup_bomb [value] => 0 ) [151] => stdClass Object ( [name] => GI.lesson.csgo_instr_explain_prevent_bomb_pickup [value] => 0 ) [152] => stdClass Object ( [name] => GI.lesson.Csgo_cycle_weapons_kb [value] => 0 ) [153] => stdClass Object ( [name] => GI.lesson.csgo_instr_explain_zoom [value] => 0 ) [154] => stdClass Object ( [name] => GI.lesson.csgo_instr_explain_reload [value] => 17 ) [155] => stdClass Object ( [name] => GI.lesson.version_number [value] => 0 ) [156] => stdClass Object ( [name] => GI.lesson.find_planted_bomb [value] => 0 ) [157] => stdClass Object ( [name] => GI.lesson.csgo_instr_explain_inspect [value] => 0 ) ) [achievements] => Array ( [0] => stdClass Object ( [name] => WIN_BOMB_PLANT [achieved] => 1 ) [1] => stdClass Object ( [name] => BOMB_PLANT_LOW [achieved] => 1 ) [2] => stdClass Object ( [name] => KILL_ENEMY_LOW [achieved] => 1 ) [3] => stdClass Object ( [name] => KILL_ENEMY_MED [achieved] => 1 ) [4] => stdClass Object ( [name] => BOMB_DEFUSE_CLOSE_CALL [achieved] => 1 ) [5] => stdClass Object ( [name] => KILL_BOMB_DEFUSER [achieved] => 1 ) [6] => stdClass Object ( [name] => WIN_BOMB_DEFUSE [achieved] => 1 ) [7] => stdClass Object ( [name] => BOMB_PLANT_IN_25_SECONDS [achieved] => 1 ) [8] => stdClass Object ( [name] => WIN_ROUNDS_LOW [achieved] => 1 ) [9] => stdClass Object ( [name] => WIN_ROUNDS_MED [achieved] => 1 ) [10] => stdClass Object ( [name] => GIVE_DAMAGE_LOW [achieved] => 1 ) [11] => stdClass Object ( [name] => GIVE_DAMAGE_MED [achieved] => 1 ) [12] => stdClass Object ( [name] => KILLING_SPREE [achieved] => 1 ) [13] => stdClass Object ( [name] => KILL_WITH_OWN_GUN [achieved] => 1 ) [14] => stdClass Object ( [name] => KILL_TWO_WITH_ONE_SHOT [achieved] => 1 ) [15] => stdClass Object ( [name] => EARN_MONEY_LOW [achieved] => 1 ) [16] => stdClass Object ( [name] => EARN_MONEY_MED [achieved] => 1 ) [17] => stdClass Object ( [name] => DEAD_GRENADE_KILL [achieved] => 1 ) [18] => stdClass Object ( [name] => KILL_ENEMY_FIVESEVEN [achieved] => 1 ) [19] => stdClass Object ( [name] => KILL_ENEMY_AWP [achieved] => 1 ) [20] => stdClass Object ( [name] => KILL_ENEMY_TEAM [achieved] => 1 ) [21] => stdClass Object ( [name] => KILLS_WITH_MULTIPLE_GUNS [achieved] => 1 ) [22] => stdClass Object ( [name] => KILL_HOSTAGE_RESCUER [achieved] => 1 ) [23] => stdClass Object ( [name] => LAST_PLAYER_ALIVE [achieved] => 1 ) [24] => stdClass Object ( [name] => KILL_ENEMY_LAST_BULLET [achieved] => 1 ) [25] => stdClass Object ( [name] => KILLING_SPREE_ENDER [achieved] => 1 ) [26] => stdClass Object ( [name] => HEADSHOTS [achieved] => 1 ) [27] => stdClass Object ( [name] => DAMAGE_NO_KILL [achieved] => 1 ) [28] => stdClass Object ( [name] => KILL_LOW_DAMAGE [achieved] => 1 ) [29] => stdClass Object ( [name] => KILL_ENEMY_RELOADING [achieved] => 1 ) [30] => stdClass Object ( [name] => KILL_ENEMY_BLINDED [achieved] => 1 ) [31] => stdClass Object ( [name] => KILL_ENEMIES_WHILE_BLIND [achieved] => 1 ) [32] => stdClass Object ( [name] => KILLS_ENEMY_WEAPON [achieved] => 1 ) [33] => stdClass Object ( [name] => KILL_WITH_EVERY_WEAPON [achieved] => 1 ) [34] => stdClass Object ( [name] => WIN_KNIFE_FIGHTS_LOW [achieved] => 1 ) [35] => stdClass Object ( [name] => HIP_SHOT [achieved] => 1 ) [36] => stdClass Object ( [name] => KILL_SNIPER_WITH_SNIPER [achieved] => 1 ) [37] => stdClass Object ( [name] => KILL_SNIPER_WITH_KNIFE [achieved] => 1 ) [38] => stdClass Object ( [name] => KILL_SNIPERS [achieved] => 1 ) [39] => stdClass Object ( [name] => KILL_WHEN_AT_LOW_HEALTH [achieved] => 1 ) [40] => stdClass Object ( [name] => PISTOL_ROUND_KNIFE_KILL [achieved] => 1 ) [41] => stdClass Object ( [name] => FAST_ROUND_WIN [achieved] => 1 ) [42] => stdClass Object ( [name] => WIN_PISTOLROUNDS_LOW [achieved] => 1 ) [43] => stdClass Object ( [name] => WIN_PISTOLROUNDS_MED [achieved] => 1 ) [44] => stdClass Object ( [name] => WIN_BOMB_PLANT_AFTER_RECOVERY [achieved] => 1 ) [45] => stdClass Object ( [name] => LOSSLESS_EXTERMINATION [achieved] => 1 ) [46] => stdClass Object ( [name] => FLAWLESS_VICTORY [achieved] => 1 ) [47] => stdClass Object ( [name] => UNSTOPPABLE_FORCE [achieved] => 1 ) [48] => stdClass Object ( [name] => IMMOVABLE_OBJECT [achieved] => 1 ) [49] => stdClass Object ( [name] => HEADSHOTS_IN_ROUND [achieved] => 1 ) [50] => stdClass Object ( [name] => WIN_MAP_DE_DUST2 [achieved] => 1 ) [51] => stdClass Object ( [name] => WIN_MAP_DE_NUKE [achieved] => 1 ) [52] => stdClass Object ( [name] => KILL_WHILE_IN_AIR [achieved] => 1 ) [53] => stdClass Object ( [name] => KILL_ENEMY_IN_AIR [achieved] => 1 ) [54] => stdClass Object ( [name] => SILENT_WIN [achieved] => 1 ) [55] => stdClass Object ( [name] => BLOODLESS_VICTORY [achieved] => 1 ) [56] => stdClass Object ( [name] => DONATE_WEAPONS [achieved] => 1 ) [57] => stdClass Object ( [name] => DEFUSE_DEFENSE [achieved] => 1 ) [58] => stdClass Object ( [name] => KILL_BOMB_PICKUP [achieved] => 1 ) [59] => stdClass Object ( [name] => DOMINATIONS_LOW [achieved] => 1 ) [60] => stdClass Object ( [name] => AVENGE_FRIEND [achieved] => 1 ) [61] => stdClass Object ( [name] => KILL_ENEMY_HKP2000 [achieved] => 1 ) [62] => stdClass Object ( [name] => KILL_ENEMY_P250 [achieved] => 1 ) ) ) ================================================ FILE: phpunit.xml ================================================ ./tests/ ./src ================================================ FILE: rector.php ================================================ paths([ __DIR__ . '/src', __DIR__ . '/tests', ]); // register a single rule $rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class); $rectorConfig->rule(AddPropertyTypeDeclarationRector::class); // define sets of rules $rectorConfig->sets([ LevelSetList::UP_TO_PHP_82, ]); }; ================================================ FILE: src/Syntax/SteamApi/Client.php ================================================ getApiKey(); $this->client = new GuzzleClient(); $this->apiKey = $apiKey; // Set up the Ids $this->setUpFormatted(); } public function get(): static { return $this; } public function getSteamId() { return $this->steamId; } /** * @param null $arguments * * @return stdClass * * @throws ApiArgumentRequired * @throws ApiCallFailedException * @throws GuzzleException */ protected function setUpService($arguments = null): stdClass { // Services have a different url syntax if ($arguments == null) { throw new ApiArgumentRequired; } $parameters = [ 'key' => $this->apiKey, 'format' => $this->apiFormat, 'input_json' => $arguments, ]; $steamUrl = $this->buildUrl(true); // Build the query string $parameters = http_build_query($parameters); // Send the request and get the results $request = new Request('GET', $steamUrl . '?' . $parameters); $response = $this->sendRequest($request); // Pass the results back return $response->body; } /** * @throws GuzzleException * @throws ApiCallFailedException */ protected function setUpClient(array $arguments = []) { $versionFlag = ! is_null($this->version); $steamUrl = $this->buildUrl($versionFlag); $parameters = [ 'key' => $this->apiKey, 'format' => $this->apiFormat, ]; if (! empty($arguments)) { $parameters = array_merge($arguments, $parameters); } // Build the query string $parameters = http_build_query($parameters); $headers = []; if (array_key_exists('l', $arguments)) { $headers = [ 'Accept-Language' => $arguments['l'], ]; } // Send the request and get the results $request = new Request('GET', $steamUrl . '?' . $parameters, $headers); $response = $this->sendRequest($request); // Pass the results back return $response->body; } protected function setUpXml(array $arguments = []): \SimpleXMLElement|null { $steamUrl = $this->buildUrl(); // Build the query string $parameters = http_build_query($arguments); // Pass the results back libxml_use_internal_errors(true); $result = simplexml_load_file($steamUrl . '?' . $parameters); if (! $result) { return null; } return $result; } public function getRedirectUrl(): void { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->url); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_exec($ch); $this->url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); curl_close($ch); } /** * * @param Request $request * @return stdClass * @throws ApiCallFailedException * @throws GuzzleException */ protected function sendRequest(Request $request): stdClass { // Try to get the result. Handle the possible exceptions that can arise try { $response = $this->client->send($request); $result = new stdClass(); $result->code = $response->getStatusCode(); $result->body = json_decode((string) $response->getBody(), null, 512, JSON_THROW_ON_ERROR); } catch (ClientException $e) { throw new ApiCallFailedException($e->getMessage(), $e->getResponse()->getStatusCode(), $e); } catch (ServerException $e) { throw new ApiCallFailedException('Api call failed to complete due to a server error.', $e->getResponse()->getStatusCode(), $e); } catch (Exception $e) { throw new ApiCallFailedException($e->getMessage(), $e->getCode(), $e); } // For some resources, the Steam API responds with an empty response if (empty($result->body)) { throw new ApiCallFailedException('API call failed due to empty response', $result->code); } if (empty((array)$result->body)) { throw new ApiCallFailedException('Api call failed to complete due to an empty response.', $result->code); } // If all worked out, return the result return $result; } private function buildUrl($version = false): string { // Set up the basic url $url = $this->url . ($this->interface ?? '') . '/' . $this->method . '/'; // If we have a version, add it if ($version) { return $url . $this->version . '/'; } return $url; } /** * @throws ClassNotFoundException * @throws UnrecognizedId */ public function __call($name, $arguments) { // Handle a steamId being passed if (! empty($arguments) && count($arguments) == 1) { $this->steamId = $arguments[0]; $this->convertSteamIdTo64(); } // Inside the root steam directory $class = ucfirst((string) $name); $steamClass = '\Syntax\SteamApi\Steam\\' . $class; if (class_exists($steamClass)) { return new $steamClass($this->steamId); } // Inside a nested directory $class = implode('\\', preg_split('/(?=[A-Z])/', $class, -1, PREG_SPLIT_NO_EMPTY)); $steamClass = '\Syntax\SteamApi\Steam\\' . $class; if (class_exists($steamClass)) { return new $steamClass($this->steamId); } // Nothing found throw new ClassNotFoundException($name); } /** * @param Collection $objects * * @return Collection */ protected function sortObjects(Collection $objects): Collection { return $objects->sortBy(fn($object) => $object->name); } /** * @param string $method * @param string $version */ protected function setApiDetails(string $method, string $version): void { $this->method = $method; $this->version = $version; } /** * @throws ApiArgumentRequired * @throws ApiCallFailedException * @throws GuzzleException * @throws \JsonException */ protected function getServiceResponse($arguments) { $arguments = json_encode($arguments, JSON_THROW_ON_ERROR); // Get the client $body = $this->setUpService($arguments); if (!isset($body->response) || empty((array)$body->response)) { throw new ApiCallFailedException('Api call failed to complete due to an empty response.', 500); } return $body->response; } /** * @throws ApiCallFailedException * @throws GuzzleException */ protected function getClientResponse($arguments) { // Get the client $body = $this->setUpClient($arguments); if (!isset($body->response) || empty((array)$body->response)) { throw new ApiCallFailedException('Api call failed to complete due to an empty response.', 500); } return $body->response; } /** * @return string * @throws Exceptions\InvalidApiKeyException */ protected function getApiKey(): string { $apiKey = Config::get('steam-api.steamApiKey'); if ($apiKey == 'YOUR-API-KEY') { throw new Exceptions\InvalidApiKeyException(); } if (is_null($apiKey) || $apiKey === '' || $apiKey == []) { $apiKey = getenv('apiKey'); } return $apiKey; } /** * @throws UnrecognizedId */ private function convertSteamIdTo64(): void { if (is_array($this->steamId)) { array_walk( /** * @throws UnrecognizedId */ $this->steamId, function (&$id) { // Convert the id to all types and grab the 64 bit version $id = $this->convertToAll($id)->id64; }); } else { // Convert the id to all types and grab the 64 bit version $this->steamId = $this->convertToAll($this->steamId)->id64; } } } ================================================ FILE: src/Syntax/SteamApi/Containers/Achievement.php ================================================ apiName = (string) $achievement->apiname; $this->achieved = (int)(string) $achievement['closed']; $this->name = (string) $achievement->name; $this->description = (string) $achievement->description; $this->icon = (string) $achievement->iconClosed; $this->iconGray = (string) $achievement->iconOpen; $this->unlockTimestamp = isset($achievement->unlockTimestamp) ? (int)(string) $achievement->unlockTimestamp : null; } } ================================================ FILE: src/Syntax/SteamApi/Containers/App.php ================================================ id = $app->steam_appid; $this->type = $app->type; $this->name = $app->name; $this->controllerSupport = $this->checkIssetField($app, 'controller_support', 'None'); $this->description = $app->detailed_description; $this->about = $app->about_the_game; $this->fullgame = $this->checkIssetField($app, 'fullgame', $this->getFakeFullgameObject()); $this->header = $app->header_image; $this->website = $this->checkIsNullField($app, 'website', 'None'); $this->pcRequirements = $app->pc_requirements; $this->legal = $this->checkIssetField($app, 'legal_notice', 'None'); $this->developers = $this->checkIssetCollection($app, 'developers'); $this->publishers = new Collection($app->publishers); $this->price = $this->checkIssetField($app, 'price_overview', $this->getFakePriceObject()); $this->platforms = $app->platforms; $this->metacritic = $this->checkIssetField($app, 'metacritic', $this->getFakeMetacriticObject()); $this->categories = $this->checkIssetCollection($app, 'categories'); $this->genres = $this->checkIssetCollection($app, 'genres'); $this->release = $app->release_date; $this->requiredAge = (int)$app->required_age; $this->isFree = $app->is_free; $this->shortDescription = $app->short_description; $this->supportedLanguages = $this->checkIssetField($app, 'supported_languages', 'None'); $this->recommendations = $this->checkIssetField($app, 'recommendations', $this->getFakeRecommendationsObject()); $this->achievements = $this->checkIssetField($app, 'achievements', $this->getFakeAchievementsObject()); $this->dlc = $this->checkIssetCollection($app, 'dlc', new Collection()); $this->movies = $this->checkIssetCollection($app, 'movies', new Collection()); } protected function getFakeMetacriticObject(): stdClass { $object = new stdClass(); $object->url = null; $object->score = 'No Score'; return $object; } protected function getFakePriceObject(): stdClass { $object = new stdClass(); $object->final = 'No price found'; return $object; } protected function getFakeFullgameObject(): stdClass { $object = new stdClass(); $object->appid = null; $object->name = 'No parent game found'; return $object; } protected function getFakeRecommendationsObject(): stdClass { $object = new stdClass(); $object->total = 0; return $object; } protected function getFakeAchievementsObject(): stdClass { $object = new stdClass(); $object->total = 0; return $object; } } ================================================ FILE: src/Syntax/SteamApi/Containers/BaseContainer.php ================================================ $field) ? $app->$field : $value; } /** * @param $app * @param string $field * * @return mixed */ protected function checkIssetField($app, string $field, mixed $value = null): mixed { return $app->$field ?? $value; } /** * @param $app * @param string $field * @param mixed|null $value * @return mixed */ protected function checkIssetCollection($app, string $field, mixed $value = null): mixed { return isset($app->$field) ? new Collection($app->$field) : $value; } /** * @param string $image * * @return string */ protected function getImageForAvatar(string $image): string { return ''; } /** * Very simple pluralize helper for days, hours, minutes. * This is not an end all solution to pluralization. * * @param $word * @param $count * * @return string */ protected function pluralize($word, $count): string { if ((int) $count === 1) { return $word .' '; } return $word .'s '; } /** * Convert a value from pure minutes into something easily digestible. * * @param $minutes * * @return string */ protected function convertFromMinutes($minutes): string { $seconds = $minutes * 60; $secondsInAMinute = 60; $secondsInAnHour = 60 * $secondsInAMinute; $secondsInADay = 24 * $secondsInAnHour; // extract days $days = floor($seconds / $secondsInADay); // extract hours $hourSeconds = $seconds % $secondsInADay; $hours = floor($hourSeconds / $secondsInAnHour); // extract minutes $minuteSeconds = $hourSeconds % $secondsInAnHour; $minutes = floor($minuteSeconds / $secondsInAMinute); // return the final string $output = ''; if ($days > 0) { $output .= $days . ' ' . $this->pluralize('day', $days); } if ($hours > 0) { $output .= $hours . ' ' . $this->pluralize('hour', $hours); } $output .= $minutes . ' ' . $this->pluralize('minute', $minutes); return $output; } } ================================================ FILE: src/Syntax/SteamApi/Containers/Game.php ================================================ appId = $app->appid; $this->name = $this->checkIssetField($app, 'name'); $this->playtimeTwoWeeks = $this->checkIssetField($app, 'playtime_2weeks', 0); $this->playtimeTwoWeeksReadable = $this->convertFromMinutes($this->playtimeTwoWeeks); $this->playtimeForever = $this->checkIssetField($app, 'playtime_forever', 0); $this->playtimeForeverReadable = $this->convertFromMinutes($this->playtimeForever); $this->icon = $this->checkIssetImage($app, 'img_icon_url'); $this->logo = $this->checkIssetImage($app, 'img_logo_url'); $this->header = 'http://cdn.akamai.steamstatic.com/steam/apps/' . $this->appId . '/header.jpg'; $this->hasCommunityVisibleStats = $this->checkIssetField($app, 'has_community_visible_stats', 0); } /** * @param $app * @param string $field * @param string|null $value * * @return null|string */ protected function checkIssetImage($app, string $field, string $value = null): ?string { return isset($app->$field) ? $this->getImageForGame($app->appid, $app->$field) : $value; } protected function getImageForGame($appId, $hash): ?string { if ($hash != null) { return 'http://media.steampowered.com/steamcommunity/public/images/apps/' . $appId . '/' . $hash . '.jpg'; } return null; } } ================================================ FILE: src/Syntax/SteamApi/Containers/GameDetails.php ================================================ checkIssetField($gameDetails, 'gameid'); $this->serverIp = $this->checkIssetField($gameDetails, 'gameserverip'); $this->serverSteamId = $this->checkIssetField($gameDetails, 'gameserversteamid'); $this->extraInfo = $this->checkIssetField($gameDetails, 'gameextrainfo'); $this->lobbyId = $this->checkIssetField($gameDetails, 'lobbysteamid'); $this->gameId = is_null($gameId) ? null : (int)$gameId; } } ================================================ FILE: src/Syntax/SteamApi/Containers/Group/Details.php ================================================ name = (string)$details->groupName; $this->url = (string)$details->groupUrl; $this->headline = (string)$details->headline; $this->summary = (string)$details->summary; $this->avatarIcon = $this->getImageForAvatar((string)$details->avatarIcon); $this->avatarMedium = $this->getImageForAvatar((string)$details->avatarMedium); $this->avatarFull = $this->getImageForAvatar((string)$details->avatarFull); $this->avatarIconUrl = (string)$details->avatarIcon; $this->avatarMediumUrl = (string)$details->avatarMedium; $this->avatarFullUrl = (string)$details->avatarFull; } } ================================================ FILE: src/Syntax/SteamApi/Containers/Group/MemberDetails.php ================================================ count = (int)(string)$details->memberCount; $this->inChat = (int)(string)$details->membersInChat; $this->inGame = (int)(string)$details->membersInGame; $this->online = (int)(string)$details->membersOnline; } } ================================================ FILE: src/Syntax/SteamApi/Containers/Group.php ================================================ groupID64 = (string)$group->groupID64; $this->groupDetails = new Details($group->groupDetails); $this->memberDetails = new MemberDetails($group->groupDetails); $this->startingMember = (int)(string)$group->startingMember; $this->members = new Collection; foreach ($group->members->steamID64 as $member) { $this->members->add((new Client)->convertId((string)$member)); } } } ================================================ FILE: src/Syntax/SteamApi/Containers/Id.php ================================================ convertId($id); $this->id32 = $steamIds->id32; $this->id64 = $steamIds->id64; $this->id3 = $steamIds->id3; $this->steamId = $this->id64; $this->communityId = $this->id32; } } ================================================ FILE: src/Syntax/SteamApi/Containers/Item.php ================================================ id = $item->id; $this->originalId = $item->original_id; $this->defIndex = $item->defindex; $this->level = $item->level; $this->quality = $item->quality; $this->quantity = $item->quantity; $this->inventory = $item->inventory; $this->origin = $this->checkIssetField($item, 'origin'); $this->containedItem = $this->checkIssetField($item, 'contained_item'); $this->style = $this->checkIssetField($item, 'style'); $this->attributes = $this->checkIssetField($item, 'attributes'); $this->flags = [ 'trade' => ! $this->checkIssetField($item, 'flag_cannot_trade', false), 'craft' => ! $this->checkIssetField($item, 'flag_cannot_craft', false), ]; $this->custom = [ 'name' => $this->checkIssetField($item, 'custom_name'), 'description' => $this->checkIssetField($item, 'custom_desc'), ]; } } ================================================ FILE: src/Syntax/SteamApi/Containers/Package.php ================================================ id = (int) $id; $this->name = $package->name; $this->apps = $package->apps; $this->page_content = $this->checkIssetField($package, 'page_content', 'none'); $this->header = $this->checkIssetField($package, 'header_image', 'none'); $this->small_logo = $this->checkIssetField($package, 'small_logo', 'none'); $this->page_image = $this->checkIssetField($package, 'page_image', 'none'); $this->price = $this->checkIssetField($package, 'price', $this->getFakePriceObject()); $this->platforms = $package->platforms; $this->controller = $package->controller; $this->release = $package->release_date; } protected function getFakePriceObject(): \stdClass { $object = new \stdClass(); $object->final = 'No price found'; return $object; } } ================================================ FILE: src/Syntax/SteamApi/Containers/Player/Level.php ================================================ playerXp = $levelDetails->player_xp; $this->playerLevel = $levelDetails->player_level; $this->xpToLevelUp = $levelDetails->player_xp_needed_to_level_up; $this->xpForCurrentLevel = $levelDetails->player_xp_needed_current_level; $this->currentLevelFloor = $this->xpForCurrentLevel; $this->currentLevelCeiling = $this->playerXp + $this->xpToLevelUp; // arbitrary range formula. n = value in the middle ( n - min ) / ( max - min ) * 100 $this->percentThroughLevel = ($this->playerXp - $this->currentLevelFloor) / ($this->currentLevelCeiling - $this->currentLevelFloor) * 100; } } ================================================ FILE: src/Syntax/SteamApi/Containers/Player.php ================================================ steamId = $player->steamid; $this->steamIds = (new Id((int)$this->steamId)); $this->communityVisibilityState = $player->communityvisibilitystate; $this->profileState = $this->checkIssetField($player, 'profilestate'); $this->personaName = $player->personaname; $this->lastLogoff = date('F jS, Y h:ia', $this->checkIssetField($player, 'lastlogoff')); $this->profileUrl = $player->profileurl; $this->avatar = $this->getImageForAvatar($player->avatar); $this->avatarMedium = $this->getImageForAvatar($player->avatarmedium); $this->avatarFull = $this->getImageForAvatar($player->avatarfull); $this->avatarUrl = $player->avatar; $this->avatarMediumUrl = $player->avatarmedium; $this->avatarFullUrl = $player->avatarfull; $this->personaState = $this->convertPersonaState($player->personastate); $this->personaStateId = $player->personastate; $this->realName = $this->checkIssetField($player, 'realname'); $this->primaryClanId = $this->checkIssetField($player, 'primaryclanid'); $this->timecreated = $this->checkIssetField($player, 'timecreated'); $this->personaStateFlags = $this->checkIssetField($player, 'personastateflags'); $this->locCountryCode = $this->checkIssetField($player, 'loccountrycode'); $this->locStateCode = $this->checkIssetField($player, 'locstatecode'); $this->locCityId = $this->checkIssetField($player, 'loccityid'); $this->location = $this->getLocation(); $this->commentPermission = $this->checkIssetField($player, 'commentpermission'); $gameDetails = [ 'gameServerIp' => $this->checkIssetField($player, 'gameserverip'), 'gameServerSteamId' => $this->checkIssetField($player, 'gameserversteamid'), 'gameExtraInfo' => $this->checkIssetField($player, 'gameextrainfo'), 'gameId' => $this->checkIssetField($player, 'gameid'), ]; if (! empty(array_filter($gameDetails))) { $this->gameDetails = (new GameDetails($player)); } } /** * @throws \JsonException */ protected function getLocation(): \stdClass { $countriesFile = json_decode(\file_get_contents(__DIR__ . '/../Resources/countries.json'), null, 512, JSON_THROW_ON_ERROR); $result = new \stdClass; if ($this->locCountryCode != null && isset($countriesFile->{$this->locCountryCode})) { $result->country = $countriesFile->{$this->locCountryCode}->name; if ($this->locStateCode != null && isset($countriesFile->{$this->locCountryCode}->states->{$this->locStateCode})) { $result->state = $countriesFile->{$this->locCountryCode}->states->{$this->locStateCode}->name; } if ($this->locCityId != null && isset($countriesFile->{$this->locCountryCode}->states->{$this->locStateCode}) && ! empty($countriesFile->{$this->locCountryCode}->states->{$this->locStateCode}->cities)) { if (isset($countriesFile->{$this->locCountryCode}->states->{$this->locStateCode}->cities->{$this->locCityId})) { $result->city = $countriesFile->{$this->locCountryCode}->states->{$this->locStateCode}->cities->{$this->locCityId}->name; } } } return $result; } protected function convertPersonaState(int $personaState): string { return match ($personaState) { 0 => 'Offline', 1 => 'Online', 2 => 'Busy', 3 => 'Away', 4 => 'Snooze', 5 => 'Looking to Trade', 6 => 'Looking to Play', default => 'Unknown', }; } } ================================================ FILE: src/Syntax/SteamApi/Exceptions/ApiArgumentRequired.php ================================================ url = 'http://store.steampowered.com/'; $this->interface = 'api'; } /** * @param $appIds * @param null $country * @param null $language * @return Collection * @throws ApiCallFailedException * @throws GuzzleException */ public function appDetails($appIds, $country = null, $language = null): Collection { // Set up the api details $this->method = 'appdetails'; $this->version = null; // Set up the arguments $arguments = [ 'appids' => $appIds, 'cc' => $country, 'l' => $language, ]; // Get the client $client = $this->setUpClient($arguments); return $this->convertToObjects($client); } /** * @throws ApiCallFailedException * @throws GuzzleException */ public function GetAppList() { // Set up the api details $this->url = 'http://api.steampowered.com/'; $this->interface = 'ISteamApps'; $this->method = __FUNCTION__; $this->version = 'v0001'; // Get the client $client = $this->setUpClient(); return $client->applist->apps->app; } protected function convertToObjects($apps): Collection { $convertedApps = $this->convertGames($apps); return $this->sortObjects($convertedApps); } /** * @param $apps * * @return Collection */ protected function convertGames($apps): Collection { $convertedApps = new Collection(); foreach ($apps as $app) { if (isset($app->data)) { $convertedApps->add(new AppContainer($app->data)); } } return $convertedApps; } } ================================================ FILE: src/Syntax/SteamApi/Steam/Group.php ================================================ method = 'memberslistxml'; if (is_numeric($group)) { $this->url = 'http://steamcommunity.com/gid/'; } else { $this->url = 'http://steamcommunity.com/groups/'; } $this->url = $this->url . $group; // Set up the arguments $arguments = [ 'xml' => 1, ]; // Get the client $client = $this->setUpXml($arguments); // Clean up the games return new GroupContainer($client); } } ================================================ FILE: src/Syntax/SteamApi/Steam/Item.php ================================================ url = 'http://store.steampowered.com/'; $this->isService = true; $this->interface = 'api'; } /** * @throws ApiCallFailedException * @throws GuzzleException */ public function GetPlayerItems($appId, $steamId): Inventory { // Set up the api details $this->url = 'http://api.steampowered.com/'; $this->interface = 'IEconItems_' . $appId; $this->method = __FUNCTION__; $this->version = 'v0001'; $arguments = ['steamId' => $steamId]; $client = $this->setUpClient($arguments); // Clean up the items $items = $this->convertToObjects($client->result->items); // Return a full inventory return new Inventory($client->result->num_backpack_slots, $items); } protected function convertToObjects($items): Collection { return $this->convertItems($items); } /** * @param array $items * * @return Collection */ protected function convertItems(array $items): Collection { $convertedItems = new Collection(); foreach ($items as $item) { $convertedItems->add(new ItemContainer($item)); } return $convertedItems; } } ================================================ FILE: src/Syntax/SteamApi/Steam/News.php ================================================ interface = 'ISteamNews'; } /** * @throws ApiCallFailedException * @throws GuzzleException */ public function GetNewsForApp($appId, $count = 5, $maxLength = null) { // Set up the api details $this->method = __FUNCTION__; $this->version = 'v0002'; // Set up the arguments $arguments = [ 'appid' => $appId, 'count' => $count, ]; if (! is_null($maxLength)) { $arguments['maxlength'] = $maxLength; } // Get the client $client = $this->setUpClient($arguments); return $client->appnews; } } ================================================ FILE: src/Syntax/SteamApi/Steam/Package.php ================================================ url = 'http://store.steampowered.com/'; $this->interface = 'api'; } /** * @throws ApiCallFailedException * @throws GuzzleException */ public function packageDetails($packId, $cc = null, $language = null): Collection { // Set up the api details $this->method = 'packagedetails'; $this->version = null; // Set up the arguments $arguments = [ 'packageids' => $packId, 'cc' => $cc, 'l' => $language, ]; // Get the client $client = $this->setUpClient($arguments); return $this->convertToObjects($client, $packId); } protected function convertToObjects($package, $packId): Collection { $convertedPacks = $this->convertPacks($package, $packId); return $this->sortObjects($convertedPacks); } /** * @param $packages * @param $packId * @return Collection */ protected function convertPacks($packages, $packId): Collection { $convertedPacks = new Collection(); foreach ($packages as $package) { if (isset($package->data)) { $convertedPacks->add(new PackageContainer($package->data, $packId)); } } return $convertedPacks; } } ================================================ FILE: src/Syntax/SteamApi/Steam/Player.php ================================================ interface = 'IPlayerService'; $this->isService = true; $this->steamId = $steamId; } /** * @throws ApiCallFailedException * @throws ApiArgumentRequired * @throws GuzzleException * @throws \JsonException */ public function GetSteamLevel() { // Set up the api details $this->setApiDetails(__FUNCTION__, 'v0001'); // Set up the arguments $arguments = ['steamId' => $this->steamId]; // Get the client $client = $this->getServiceResponse($arguments); return $client->player_level; } /** * @throws ApiCallFailedException * @throws ApiArgumentRequired * @throws GuzzleException * @throws \JsonException */ public function GetPlayerLevelDetails(): ?Level { $details = $this->GetBadges(); if(count((array)$details) == 0){ return null; } return new Level($details); } /** * @throws ApiCallFailedException * @throws ApiArgumentRequired * @throws GuzzleException * @throws \JsonException */ public function GetBadges() { // Set up the api details $this->setApiDetails(__FUNCTION__, 'v0001'); // Set up the arguments $arguments = ['steamId' => $this->steamId]; // Get the client return $this->getServiceResponse($arguments); } /** * @throws ApiArgumentRequired * @throws ApiCallFailedException * @throws GuzzleException * @throws \JsonException */ public function GetCommunityBadgeProgress($badgeId = null) { // Set up the api details $this->setApiDetails(__FUNCTION__, 'v0001'); // Set up the arguments $arguments = ['steamId' => $this->steamId]; if ($badgeId != null) { $arguments['badgeid'] = $badgeId; } // Get the client return $this->getServiceResponse($arguments); } /** * @throws ApiCallFailedException * @throws ApiArgumentRequired * @throws GuzzleException * @throws \JsonException */ public function GetOwnedGames($includeAppInfo = true, $includePlayedFreeGames = false, $appIdsFilter = []): Collection { // Set up the api details $this->setApiDetails(__FUNCTION__, 'v0001'); // Set up the arguments $arguments = ['steamId' => $this->steamId]; if ($includeAppInfo) { $arguments['include_appinfo'] = $includeAppInfo; } if ($includePlayedFreeGames) { $arguments['include_played_free_games'] = $includePlayedFreeGames; } $appIdsFilter = (array) $appIdsFilter; if (count($appIdsFilter) > 0) { $arguments['appids_filter'] = $appIdsFilter; } // Get the client $client = $this->getServiceResponse($arguments); // Clean up the games return $this->convertToObjects($client->games ?? []); } /** * @throws ApiCallFailedException * @throws ApiArgumentRequired * @throws GuzzleException * @throws \JsonException */ public function GetRecentlyPlayedGames($count = null): ?Collection { // Set up the api details $this->setApiDetails(__FUNCTION__, 'v0001'); // Set up the arguments $arguments = ['steamId' => $this->steamId]; if (! is_null($count)) { $arguments['count'] = $count; } // Get the client $client = $this->getServiceResponse($arguments); if (isset($client->total_count) && $client->total_count > 0) { // Clean up the games return $this->convertToObjects($client->games); } return null; } /** * @throws ApiCallFailedException * @throws ApiArgumentRequired * @throws GuzzleException * @throws \JsonException * @deprecated - use ISteamUser.CheckAppOwnership */ public function IsPlayingSharedGame($appIdPlaying): string { // Set up the api details $this->setApiDetails(__FUNCTION__, 'v0001'); // Set up the arguments $arguments = [ 'steamId' => $this->steamId, 'appid_playing' => $appIdPlaying, ]; // Get the client $client = $this->getServiceResponse($arguments); return $client->lender_steamid; } protected function convertToObjects($games): Collection { $convertedGames = $this->convertGames($games); return $this->sortObjects($convertedGames); } private function convertGames($games): Collection { $convertedGames = new Collection; foreach ($games as $game) { $convertedGames->add(new Game($game)); } return $convertedGames; } } ================================================ FILE: src/Syntax/SteamApi/Steam/User/Stats.php ================================================ interface = 'ISteamUserStats'; $this->steamId = $steamId; } /** * @param $appId * * @return array|null * @throws GuzzleException * @throws ApiCallFailedException * @deprecated * */ public function GetPlayerAchievementsAPI($appId): ?array { // Set up the api details $this->method = 'GetPlayerAchievementsAPI'; $this->version = 'v0001'; // Set up the arguments $arguments = [ 'steamid' => $this->steamId, 'appid' => $appId, 'l' => 'english', ]; // Get the client $stats = $this->GetSchemaForGame($appId); // Make sure the game has achievements if ($stats == null || $stats->game->availableGameStats->achievements == null) { return null; } $client = $this->setUpClient($arguments)->playerstats; $stats = $stats->game->availableGameStats->achievements; // Clean up the games return $this->convertToObjects($client->achievements); } public function GetPlayerAchievements($appId): ?array { // Set up the api details $this->interface = null; $this->method = 'achievements'; if (is_numeric($this->steamId)) { $this->url = 'http://steamcommunity.com/profiles/'; } else { $this->url = 'http://steamcommunity.com/id/'; } $this->url = $this->url . $this->steamId . '/stats/' . $appId; // Set up the arguments $arguments = [ 'xml' => 1, ]; try { // Get the client $client = $this->setUpXml($arguments); // Clean up the games return $this->convertToObjects($client->achievements->achievement); } catch (Exception) { // In rare cases, games can force the use of a simplified name instead of an app ID // In these cases, try again by grabbing the redirected url. if (is_int($appId)) { $this->getRedirectUrl(); try { // Get the client $client = $this->setUpXml($arguments); // Clean up the games return $this->convertToObjects($client->achievements->achievement); } catch (Exception) { return null; } } // If the name and ID fail, return null. return null; } } /** * @throws ApiCallFailedException * @throws GuzzleException */ public function GetGlobalAchievementPercentagesForApp($gameId) { // Set up the api details $this->method = __FUNCTION__; $this->version = 'v0002'; // Set up the arguments $arguments = [ 'gameid' => $gameId, 'l' => 'english', ]; // Get the client $client = $this->setUpClient($arguments)->achievementpercentages; return $client->achievements; } /** * @param $appId int Steam 64 id * @param $all bool Return all stats when true and only achievements when false * * @return mixed * @throws ApiCallFailedException * @throws GuzzleException */ public function GetUserStatsForGame(int $appId, bool $all = false): mixed { // Set up the api details $this->method = __FUNCTION__; $this->version = 'v0002'; // Set up the arguments $arguments = [ 'steamid' => $this->steamId, 'appid' => $appId, 'l' => 'english', ]; // Get the client $client = $this->setUpClient($arguments)->playerstats; // Games like DOTA and CS:GO have additional stats here. Return everything if they are wanted. if ($all === true) { return $client; } return $client->achievements; } /** * @param $appId * * @return mixed * @throws ApiCallFailedException * @throws GuzzleException * @link https://wiki.teamfortress.com/wiki/WebAPI/GetSchemaForGame * */ public function GetSchemaForGame($appId): mixed { // Set up the api details $this->method = __FUNCTION__; $this->version = 'v0002'; // Set up the arguments $arguments = [ 'appid' => $appId, 'l' => 'english', ]; // Get the client return $this->setUpClient($arguments); } protected function convertToObjects($achievements): array { $cleanedAchievements = []; foreach ($achievements as $achievement) { $cleanedAchievements[] = new Achievement($achievement); } return $cleanedAchievements; } } ================================================ FILE: src/Syntax/SteamApi/Steam/User.php ================================================ interface = 'ISteamUser'; $this->steamId = $steamId; } /** * Get the user_ids for a display name. * * @param null $displayName Custom name from steam profile link. * * @return mixed * * @throws ApiArgumentRequired * @throws ApiCallFailedException * @throws GuzzleException * @throws UnrecognizedId * @throws \JsonException */ public function ResolveVanityURL($displayName = null): mixed { // This only works with a display name. Make sure we have one. if ($displayName == null) { throw new UnrecognizedId('You must pass a display name for this call.'); } // Set up the api details $this->method = __FUNCTION__; $this->version = 'v0001'; $results = $this->getClientResponse(['vanityurl' => $displayName]); // Return the full steam ID object for the display name. return $results->message ?? $this->convertId($results->steamid); } /** * @param string|null $steamId * * @return array */ public function GetPlayerSummaries(string $steamId = null): array { // Set up the api details $this->method = __FUNCTION__; $this->version = 'v0002'; if ($steamId == null) { $steamId = $this->steamId; } $steamId = implode(',', (array)$steamId); $chunks = array_chunk(explode(',', $steamId), 100); $map = array_map($this->getChunkedPlayerSummaries(...), $chunks); return $this->compressPlayerSummaries($map); } /** * @param $chunk * @return array * @throws ApiCallFailedException * @throws GuzzleException * @throws \JsonException * @throws ApiArgumentRequired */ private function getChunkedPlayerSummaries($chunk): array { // Set up the arguments $arguments = [ 'steamids' => implode(',', $chunk), ]; // Get the client $client = $this->setUpClient($arguments)->response; // Clean up the games return $this->convertToObjects($client->players); } private function compressPlayerSummaries($summaries): array { $result = []; $keys = array_keys($summaries); foreach ($keys as $key) { $result = array_merge($result, $summaries[$key]); } return $result; } /** * @throws ApiCallFailedException * @throws GuzzleException */ public function GetPlayerBans($steamId = null) { // Set up the api details $this->method = __FUNCTION__; $this->version = 'v1'; if ($steamId == null) { $steamId = $this->steamId; } // Set up the arguments $arguments = [ 'steamids' => implode(',', (array)$steamId), ]; // Get the client $client = $this->setUpClient($arguments); return $client->players; } /** * @throws ApiCallFailedException * @throws GuzzleException */ public function GetFriendList($relationship = 'all', $summaries = true): array { // Set up the api details $this->method = __FUNCTION__; $this->version = 'v0001'; if (! in_array($relationship, $this->friendRelationships)) { throw new InvalidArgumentException('Provided relationship [' . $relationship . '] is not valid. Please select from: ' . implode(', ', $this->friendRelationships)); } // Set up the arguments $arguments = [ 'steamid' => $this->steamId, 'relationship' => $relationship, ]; // Get the client $client = $this->setUpClient($arguments)->friendslist; // Clean up the games $steamIds = []; foreach ($client->friends as $friend) { $steamIds[] = $friend->steamid; } if($summaries) { $friends = $this->GetPlayerSummaries(implode(',', $steamIds)); } else { $friends = $steamIds; } return $friends; } protected function convertToObjects($players): array { $cleanedPlayers = []; foreach ($players as $player) { if(property_exists($player, 'steamid')) { $cleanedPlayers[] = new PlayerContainer($player); } } return $cleanedPlayers; } } ================================================ FILE: src/Syntax/SteamApi/SteamApiServiceProvider.php ================================================ publishes([__DIR__ . '/../../config/config.php' => config_path('steam-api.php')]); } /** * Register the service provider. * * @return void */ public function register(): void { $this->app->singleton('steam-api', fn () => new Client()); } /** * Get the services provided by the provider. * * @return string[] */ public function provides(): array { return ['steam-api']; } } ================================================ FILE: src/Syntax/SteamApi/SteamId.php ================================================ convertToAll($id); switch ($format) { case 'ID32': case 'id32': case 32: return $this->formatted->{self::$ID32}; case 'ID64': case 'id64': case 64: return $this->formatted->{self::$ID64}; case 'ID3': case 'id3': case 3: return $this->formatted->{self::$ID3}; default: return $this->formatted; } } protected function setUpFormatted(): void { $this->formatted = new \stdClass(); $this->formatted->{self::$ID32} = null; $this->formatted->{self::$ID64} = null; $this->formatted->{self::$ID3} = null; } /** * @throws UnrecognizedId */ private function convertToAll($id) { [$type, $matches] = $this->determineIDType($id); $this->getRawValue($id, $type, $matches); // Convert to each type $this->convertToID32(); $this->convertToID64(); $this->convertToID3(); return $this->formatted; } private function convertToID32(): void { $z = bcdiv($this->rawValue, '2', 0); $y = bcmul($z, '2', 0); $y = bcsub($this->rawValue, $y, 0); $formatted = "STEAM_1:$y:$z"; $this->formatted->{self::$ID32} = $formatted; } private function convertToID64(): void { $formatted = bcadd($this->rawValue, self::$id64Base, 0); $this->formatted->{self::$ID64} = $formatted; } private function convertToID3(): void { $formatted = "[U:1:$this->rawValue]"; $this->formatted->{self::$ID3} = $formatted; } /** * @throws UnrecognizedId */ private function determineIDType($id): array { $id = trim((string) $id); if (preg_match('/^STEAM_[0-1]:([0-1]):([0-9]+)$/', $id, $matches)) { return ['ID32', $matches]; } if (preg_match('/^[0-9]+$/', $id)) { return ['ID64', null]; } if (preg_match('/^\[U:1:([0-9]+)\]$/', $id, $matches)) { return ['ID3', $matches]; } throw new UnrecognizedId('Id [' . $id . '] is not recognized as a steam id.'); } /** * Get a raw value from any type of steam id * * @param $id * @param $type * @param $matches */ private function getRawValue($id, $type, $matches): void { switch ($type) { case 'ID32': $this->rawValue = bcmul((string) $matches[2], '2', 0); $this->rawValue = bcadd($this->rawValue, (string) $matches[1], 0); $this->formatted->{self::$ID32} = $id; break; case 'ID64': $this->rawValue = bcsub((string) $id, self::$id64Base, 0); $this->formatted->{self::$ID64} = $id; break; case 'ID3': $this->rawValue = $matches[1]; $this->formatted->{self::$ID3} = $id; break; } } } ================================================ FILE: src/config/.gitkeep ================================================ ================================================ FILE: src/config/config.php ================================================ env('STEAM_API_KEY'), ]; ================================================ FILE: tests/AppTest.php ================================================ steamClient->app()->appDetails($this->appId); $this->assertCount(1, $details); $detail = $details->first(); $this->checkAppProperties($detail); $this->checkClasses($detail); } /** @test */ public function it_gets_a_list_of_all_apps() { $apps = $this->steamClient->app()->GetAppList(); $this->assertGreaterThan(0, $apps); $this->assertObjectHasProperties(['appid', 'name'], $apps[0]); } /** * @param $detail */ private function checkClasses($detail): void { $this->assertInstanceOf(\Syntax\SteamApi\Containers\App::class, $detail); $this->assertInstanceOf(\Illuminate\Support\Collection::class, $detail->developers); $this->assertInstanceOf(\Illuminate\Support\Collection::class, $detail->publishers); $this->assertInstanceOf(\Illuminate\Support\Collection::class, $detail->categories); $this->assertInstanceOf(\Illuminate\Support\Collection::class, $detail->genres); } } ================================================ FILE: tests/BaseTester.php ================================================ load(); } $this->steamClient = new Client(); } /** @test */ public function empty_test() { $this->assertTrue(true); } protected function assertObjectHasProperties($attributes, $object): void { foreach ($attributes as $attribute) { $this->assertObjectHasProperty($attribute, $object); } } protected function checkSteamIdsProperties($steamId): void { $attributes = [ 'id32', 'id64', 'id3', 'communityId', 'steamId' ]; $this->assertObjectHasProperties($attributes, $steamId); } protected function checkPlayerProperties($friendsList): void { $attributes = [ 'steamId', 'steamIds', 'communityVisibilityState', 'profileState', 'lastLogoff', 'profileUrl', 'realName', 'primaryClanId', 'timecreated' ]; $this->assertObjectHasProperties($attributes, $friendsList[0]); $attributes = [ 'avatar', 'avatarMedium', 'avatarFull', 'avatarUrl', 'avatarMediumUrl', 'avatarFullUrl', ]; $this->assertObjectHasProperties($attributes, $friendsList[0]); $attributes = [ 'personaName', 'personaState', 'personaStateId', 'personaStateFlags' ]; $this->assertObjectHasProperties($attributes, $friendsList[0]); $attributes = [ 'locCountryCode', 'locStateCode', 'locCityId', 'location' ]; $this->assertObjectHasProperties($attributes, $friendsList[0]); $this->checkSteamIdsProperties($friendsList[0]->steamIds); } protected function checkAchievementProperties($achievement): void { $attributes = [ 'apiName', 'achieved', 'name', 'description' ]; $this->assertObjectHasProperties($attributes, $achievement); } protected function checkAppProperties($app): void { $this->checkMainAppProperties($app); $this->checkGeneralAppProperties($app); $this->checkNestedAppProperties($app); } protected function checkPackageProperties($package): void { $this->checkNestedPackageProperties($package); } protected function checkGroupProperties($group): void { $this->checkGroupMainSummaryProperties($group); $this->checkGroupDetailProperties($group); $this->checkGroupMemberDetailsProperties($group); $this->checkGroupMemberProperties($group); } /** * @param $item */ protected function checkItemProperties($item): void { $attributes = ['id', 'originalId', 'level', 'quality', 'quantity']; $this->assertObjectHasProperties($attributes, $item); } /** * @param $app */ private function checkMainAppProperties($app): void { $attributes = [ 'id', 'type', 'name', 'controllerSupport', 'description', 'about', 'fullgame', 'header', 'website', 'shortDescription' ]; $this->assertObjectHasProperties($attributes, $app); } /** * @param $app */ private function checkGeneralAppProperties($app): void { $attributes = [ 'pcRequirements', 'legal', 'developers', 'publishers', 'price', 'platforms', 'metacritic', 'categories', 'genres', 'release', 'requiredAge', 'isFree', 'supportedLanguages', 'recommendations' ]; $this->assertObjectHasProperties($attributes, $app); } /** * @param $app */ private function checkNestedAppProperties($app): void { $this->assertObjectHasProperty('minimum', $app->pcRequirements); $attributes = ['currency', 'initial', 'final', 'discount_percent']; $this->assertObjectHasProperties($attributes, $app->price); $attributes = ['windows', 'mac', 'linux']; $this->assertObjectHasProperties($attributes, $app->platforms); $attributes = ['score', 'url']; $this->assertObjectHasProperties($attributes, $app->metacritic); $attributes = ['total']; $this->assertObjectHasProperties($attributes, $app->recommendations); $attributes = ['total']; $this->assertObjectHasProperties($attributes, $app->achievements); } /** * @param $package */ private function checkNestedPackageProperties($package): void { $attributes = ['currency', 'initial', 'final', 'discount_percent', 'individual']; $this->assertObjectHasProperties($attributes, $package->price); $attributes = ['windows', 'mac', 'linux']; $this->assertObjectHasProperties($attributes, $package->platforms); } /** * @param $group */ private function checkGroupMainSummaryProperties($group): void { $this->assertObjectHasProperty('groupID64', $group); $this->assertObjectHasProperty('groupDetails', $group); $this->assertObjectHasProperty('memberDetails', $group); $this->assertObjectHasProperty('startingMember', $group); $this->assertObjectHasProperty('members', $group); } /** * @param $group */ private function checkGroupDetailProperties($group): void { $this->assertObjectHasProperty('name', $group->groupDetails); $this->assertObjectHasProperty('url', $group->groupDetails); $this->assertObjectHasProperty('headline', $group->groupDetails); $this->assertObjectHasProperty('summary', $group->groupDetails); $this->assertObjectHasProperty('avatarIcon', $group->groupDetails); $this->assertObjectHasProperty('avatarMedium', $group->groupDetails); $this->assertObjectHasProperty('avatarFull', $group->groupDetails); $this->assertObjectHasProperty('avatarIconUrl', $group->groupDetails); $this->assertObjectHasProperty('avatarMediumUrl', $group->groupDetails); $this->assertObjectHasProperty('avatarFullUrl', $group->groupDetails); } /** * @param $group */ private function checkGroupMemberDetailsProperties($group): void { $this->assertObjectHasProperty('count', $group->memberDetails); $this->assertObjectHasProperty('inChat', $group->memberDetails); $this->assertObjectHasProperty('inGame', $group->memberDetails); $this->assertObjectHasProperty('online', $group->memberDetails); } /** * @param $group */ private function checkGroupMemberProperties($group): void { $startingMember = $group->members->get($group->startingMember); $this->assertObjectHasProperty('id32', $startingMember); $this->assertObjectHasProperty('id64', $startingMember); $this->assertObjectHasProperty('id3', $startingMember); } protected function expectApiCallFailedException(string $message): void { $this->expectException(\Syntax\SteamApi\Exceptions\ApiCallFailedException::class); $this->expectExceptionMessage($message); } protected function expectEmptyResponseException(): void { $this->expectApiCallFailedException( 'Api call failed to complete due to an empty response'); } } ================================================ FILE: tests/GroupTest.php ================================================ steamClient->group()->GetGroupSummary($this->groupId); $this->checkGroupProperties($group); $this->checkClasses($group); } /** @test */ public function it_gets_a_summary_of_a_group_by_name() { $group = $this->steamClient->group()->GetGroupSummary($this->groupName); $this->checkGroupProperties($group); $this->checkClasses($group); } /** * @param $group */ protected function checkClasses($group): void { $this->assertInstanceOf(\Syntax\SteamApi\Containers\Group::class, $group); $this->assertInstanceOf(\Syntax\SteamApi\Containers\Group\Details::class, $group->groupDetails); $this->assertInstanceOf(\Syntax\SteamApi\Containers\Group\MemberDetails::class, $group->memberDetails); $this->assertInstanceOf(\Illuminate\Support\Collection::class, $group->members); } } ================================================ FILE: tests/IdTest.php ================================================ steamClient->convertId($this->id64); $this->assertEquals($this->id32, $ids->id32); $this->assertEquals($this->id64, $ids->id64); $this->assertEquals($this->id3, $ids->id3); } } ================================================ FILE: tests/ItemTest.php ================================================ steamClient->item()->GetPlayerItems($this->appId, 76561198022436617); $this->assertCount(3, $inventory->items); $item = $inventory->items->first(); $this->checkItemProperties($item); } } ================================================ FILE: tests/NewsTest.php ================================================ steamClient->news()->GetNewsForApp($this->appId, 1, 20); $this->assertObjectHasProperty('appid', $newsArticle); $this->assertEquals($this->appId, $newsArticle->appid); $this->assertObjectHasProperty('newsitems', $newsArticle); $this->assertGreaterThan(0, count($newsArticle->newsitems)); $attributes = [ 'gid', 'title', 'url', 'is_external_url', 'author', 'contents', 'feedlabel', 'date', 'feedname' ]; $this->assertObjectHasProperties($attributes, $newsArticle->newsitems[0]); $this->assertTrue(strlen(strip_tags((string) $newsArticle->newsitems[0]->contents)) <= 23); } /** @test */ public function it_gets_more_than_1_news_article_by_app_id() { $newsArticle = $this->steamClient->news()->GetNewsForApp($this->appId); $this->assertGreaterThan(1, count($newsArticle->newsitems)); return $newsArticle; } /** * @test * * @depends it_gets_more_than_1_news_article_by_app_id * * @param $defaultNewsCall */ public function it_has_full_news_article_by_app_id($defaultNewsCall) { foreach ($defaultNewsCall->newsitems as $newsItem) { if (strlen(strip_tags((string) $newsItem->contents)) > 0) { $this->assertGreaterThan(23, strlen(strip_tags((string) $newsItem->contents))); } } } } ================================================ FILE: tests/PackageTest.php ================================================ steamClient->package()->packageDetails($this->packageId); $this->assertCount(1, $details); $detail = $details->first(); $this->checkPackageProperties($detail); $this->checkPackageClasses($detail); } /** * @param $detail */ private function checkPackageClasses($detail): void { $this->assertInstanceOf(\Syntax\SteamApi\Containers\Package::class, $detail); } } ================================================ FILE: tests/PlayerTest.php ================================================ steamClient->player($this->id64)->GetSteamLevel(); $this->assertIsInt($steamLevel); } /** @test */ public function it_gets_the_player_details_by_user_id() { $details = $this->steamClient->player($this->id64)->GetPlayerLevelDetails(); $this->assertInstanceOf(\Syntax\SteamApi\Containers\Player\Level::class, $details); $attributes = [ 'playerXp', 'playerLevel', 'xpToLevelUp', 'xpForCurrentLevel', 'currentLevelFloor', 'currentLevelCeiling', 'percentThroughLevel' ]; $this->assertObjectHasProperties($attributes, $details); } /** @test */ public function it_gets_the_badges_by_user_id() { $badges = $this->steamClient->player($this->id64)->GetBadges(); $attributes = ['badges', 'player_xp', 'player_level', 'player_xp_needed_to_level_up', 'player_xp_needed_current_level']; $this->assertObjectHasProperties($attributes, $badges); $attributes = ['badgeid', 'level', 'completion_time', 'xp', 'scarcity']; $this->assertObjectHasProperties($attributes, $badges->badges[0]); } /** @test */ public function it_gets_the_badge_progress_by_user_id() { $this->expectApiCallFailedException('Api call failed to complete due to an empty response'); $progress = $this->steamClient->player($this->id64)->GetCommunityBadgeProgress(); $this->assertObjectHasProperty('quests', $progress); $attributes = ['questid', 'completed']; $this->assertObjectHasProperties($attributes, $progress->quests[0]); } /** @test */ public function it_gets_the_owned_games_by_user_id() { $games = $this->steamClient->player($this->id64)->GetOwnedGames(); $this->assertInstanceOf(\Illuminate\Support\Collection::class, $games); $this->assertInstanceOf(\Syntax\SteamApi\Containers\Game::class, $games->first()); $attributes = [ 'appId', 'name', 'playtimeTwoWeeks', 'playtimeTwoWeeksReadable', 'playtimeForever', 'playtimeForeverReadable', 'icon', 'logo', 'header', 'hasCommunityVisibleStats' ]; $this->assertObjectHasProperties($attributes, $games->first()); } /** @test */ public function it_gets_the_owned_games_by_user_id_without_app_details() { $games = $this->steamClient->player($this->id64)->GetOwnedGames(false); $this->assertInstanceOf(\Illuminate\Support\Collection::class, $games); $this->assertInstanceOf(\Syntax\SteamApi\Containers\Game::class, $games->first()); $attributes = [ 'appId', 'name', 'playtimeTwoWeeks', 'playtimeTwoWeeksReadable', 'playtimeForever', 'playtimeForeverReadable', 'icon', 'logo', 'header', 'hasCommunityVisibleStats' ]; $this->assertObjectHasProperties($attributes, $games->first()); $this->assertNull($games->first()->name); $this->assertNull($games->first()->icon); $this->assertNull($games->first()->logo); } /** @test */ public function it_filters_the_owned_games_by_user_id() { $games = $this->steamClient->player($this->id64)->GetOwnedGames(true, false, 400); $this->assertInstanceOf(\Illuminate\Support\Collection::class, $games); $this->assertInstanceOf(\Syntax\SteamApi\Containers\Game::class, $games->first()); $this->assertEquals(1, $games->count()); $attributes = [ 'appId', 'name', 'playtimeTwoWeeks', 'playtimeTwoWeeksReadable', 'playtimeForever', 'playtimeForeverReadable', 'icon', 'logo', 'header', 'hasCommunityVisibleStats' ]; $this->assertObjectHasProperties($attributes, $games->first()); } /** @test */ public function it_gets_recently_played_games_by_user_id() { $games = $this->steamClient->player($this->id64)->GetRecentlyPlayedGames(); $this->assertInstanceOf(\Illuminate\Support\Collection::class, $games); $this->assertInstanceOf(\Syntax\SteamApi\Containers\Game::class, $games->first()); $attributes = [ 'appId', 'name', 'playtimeTwoWeeks', 'playtimeTwoWeeksReadable', 'playtimeForever', 'playtimeForeverReadable', 'icon', 'logo', 'header', 'hasCommunityVisibleStats' ]; $this->assertObjectHasProperties($attributes, $games->first()); } /** @test */ public function it_gets_a_single_recently_played_game_by_user_id() { $games = $this->steamClient->player($this->id64)->GetRecentlyPlayedGames(1); $this->assertInstanceOf(\Illuminate\Support\Collection::class, $games); $this->assertInstanceOf(\Syntax\SteamApi\Containers\Game::class, $games->first()); $this->assertEquals(1, $games->count()); $attributes = [ 'appId', 'name', 'playtimeTwoWeeks', 'playtimeTwoWeeksReadable', 'playtimeForever', 'playtimeForeverReadable', 'icon', 'logo', 'header', 'hasCommunityVisibleStats' ]; $this->assertObjectHasProperties($attributes, $games->first()); } /** @test */ public function it_checks_if_playing_a_shared_game_by_user_and_app_id() { $this->expectEmptyResponseException(); $playingSharedGame = $this->steamClient->player($this->id64)->IsPlayingSharedGame($this->appId); $this->assertNotNull($playingSharedGame); } } ================================================ FILE: tests/UserStatsTest.php ================================================ steamClient->userStats($this->id64)->GetPlayerAchievements(359320); $this->assertNull($achievements); } /** @test */ public function it_gets_the_users_achievements_for_a_game() { $achievements = $this->steamClient->userStats(76561198022436617)->GetPlayerAchievements(252950); $this->assertInstanceOf(\Syntax\SteamApi\Containers\Achievement::class, $achievements[0]); $this->checkAchievementProperties($achievements[0]); } /** @test */ public function it_gets_the_global_achievement_percentage_for_a_game() { $achievements = $this->steamClient->userStats($this->id64)->GetGlobalAchievementPercentagesForApp($this->appId); $this->assertGreaterThan(0, $achievements); $attributes = ['name', 'percent']; $this->assertObjectHasProperties($attributes, $achievements[0]); } /** @test */ public function it_gets_the_user_stats_for_a_game() { $stats = $this->steamClient->userStats(76_561_198_159_417_876)->GetUserStatsForGame($this->appId); $this->assertTrue(is_array($stats)); $attributes = ['name', 'achieved']; $this->assertObjectHasProperties($attributes, $stats[0]); } /** @test */ public function it_gets_all_the_user_stats_for_a_game() { $stats = $this->steamClient->userStats(76_561_198_159_417_876)->GetUserStatsForGame($this->appId, true); $this->assertTrue(is_object($stats)); $attributes = ['name', 'achieved']; $this->assertObjectHasProperties($attributes, $stats->achievements[0]); $attributes = ['name', 'value']; $this->assertObjectHasProperties($attributes, $stats->stats[0]); } /** @test */ public function it_gets_all_the_stats_for_a_game() { $stats = $this->steamClient->userStats(76_561_198_159_417_876)->GetSchemaForGame($this->appId); $this->assertTrue(is_object($stats)); $attributes = ['gameName', 'gameVersion', 'availableGameStats']; $this->assertObjectHasProperties($attributes, $stats->game); } } ================================================ FILE: tests/UserTest.php ================================================ id32, $this->altId64]; $userService = $this->steamClient->user($steamIds); $this->assertCount(2, $userService->getSteamId()); $this->assertEquals($this->id64, $userService->getSteamId()[0]); } /** * @test * @throws UnrecognizedId * @throws GuzzleException * @throws ApiCallFailedException */ public function it_throws_an_exception_when_no_display_name_is_provided() { if (method_exists($this, 'setExpectedException')) { $this->setExpectedException(\Syntax\SteamApi\Exceptions\UnrecognizedId::class); } else { $this->expectException(\Syntax\SteamApi\Exceptions\UnrecognizedId::class); } $steamObject = $this->steamClient->user($this->id64)->ResolveVanityURL(); $this->assertEquals('No match', $steamObject); } /** @test * @throws ApiCallFailedException * @throws GuzzleException * @throws UnrecognizedId */ public function it_returns_no_match_from_an_invalid_display_name() { $steamObject = $this->steamClient->user($this->id64)->ResolveVanityURL('stygiansabyssINVALID'); $this->assertEquals('No match', $steamObject); } /** @test * @throws ApiCallFailedException * @throws GuzzleException * @throws UnrecognizedId */ public function it_gets_the_steam_id_from_a_display_name() { $steamObject = $this->steamClient->user(76561198022436617)->ResolveVanityURL('stygiansabyss'); $this->assertEquals(76561198022436617, $steamObject->id64); } /** @test */ public function it_gets_the_base_users_player_summary() { $friendsList = $this->steamClient->user($this->id64)->GetPlayerSummaries(); $this->assertCount(1, $friendsList); $this->checkPlayerProperties($friendsList); $this->checkPlayerClasses($friendsList); } /** @test */ public function it_gets_the_supplied_users_player_summary() { $friendsList = $this->steamClient->user($this->id64)->GetPlayerSummaries($this->altId64); $this->assertCount(1, $friendsList); $this->checkPlayerProperties($friendsList); $this->checkPlayerClasses($friendsList); $this->assertNotEquals($friendsList[0]->steamId, $this->id64); } /** @test */ public function it_gets_all_users_in_friend_list() { $friendsList = $this->steamClient->user($this->id64)->GetFriendList('all'); $this->assertGreaterThan(0, $friendsList); $this->checkPlayerProperties($friendsList); $this->checkPlayerClasses($friendsList); } /** @test */ public function it_gets_friend_users_in_friend_list() { $friendsList = $this->steamClient->user($this->id64)->GetFriendList('friend'); $this->assertGreaterThan(0, $friendsList); $this->checkPlayerProperties($friendsList); $this->checkPlayerClasses($friendsList); } /** @test */ public function it_throws_exception_to_invalid_relationship_types() { $expectedMessage = 'Provided relationship [nonFriend] is not valid. Please select from: all, friend'; if (method_exists($this, 'setExpectedException')) { $this->setExpectedException('InvalidArgumentException', $expectedMessage); } else { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage($expectedMessage); } $this->steamClient->user($this->id64)->GetFriendList('nonFriend'); } /** @test */ public function it_gets_the_bans_for_the_base_user() { $bans = $this->steamClient->user($this->id64)->GetPlayerBans(); $this->assertCount(1, $bans); $attributes = ['SteamId', 'CommunityBanned', 'VACBanned', 'NumberOfVACBans', 'DaysSinceLastBan', 'EconomyBan']; $this->assertObjectHasProperties($attributes, $bans[0]); } /** @test */ public function it_gets_the_bans_for_the_supplied_user() { $bans = $this->steamClient->user($this->id64)->GetPlayerBans($this->altId64); $this->assertCount(1, $bans); $attributes = ['SteamId', 'CommunityBanned', 'VACBanned', 'NumberOfVACBans', 'DaysSinceLastBan', 'EconomyBan']; $this->assertObjectHasProperties($attributes, $bans[0]); $this->assertNotEquals($bans[0]->SteamId, $this->id64); } private function checkPlayerClasses($friendsList): void { $this->assertInstanceOf(\Syntax\SteamApi\Containers\Player::class, $friendsList[0]); $this->assertInstanceOf(\Syntax\SteamApi\Containers\Id::class, $friendsList[0]->steamIds); } }