Currently seeking new career opportunities in web development, particularly with Laravel, Hire Me

Display Xbox live data with xboxapi and cache it

David Carr

Demos Tutorials PHP & MySQL

Table of Contents

Xbox does not provide an official API for anyone to use. Their are a few sites that provide an API one of which is https://xboxapi.com/v1 xboxapi makes it very easy to pull your Xbox API data.

In this tutorial I'll show you how to display your Xbox Live data and then cache it, this will enable the page to load faster and avoid going over xboxapi's API Limit which is set to 350 requests an hour.

Demo

Download source files

Cache

In order to cache the data we need to build a cache system, but I've chosen to use a prebuilt one from https://github.com/gilbitron/PHP-SimpleCache

The SimpleCache class is very easy to use, download simpleCache.php and save that in your project root, I've called the file cache.php

Next create a cache folder, this folder will hold all the cache data.

Finally create a php file called index.php.

Open index.php, then include cache.php create a new instance of the SimpleCache class and pass in 2 parameters the first is the label for the cache. The second is the url to be cached.

the url to be called is https://xboxapi.com/v1/json/profile/ followed by your gamertag this will return a json object containing your Xbox Live API Data. Once called the cache will download the json object and store it as a text file inside the cache folder, next time the url is requested the cache version will be returned if the call is within the cache time, I've set the cache time to 600 ms which is 10 minutes. The cache time can be changed by editing cache.php.

Once the json object is returned pass it through a json_decode call to be able to use the data.

require('cache.php'); 
$cache = new SimpleCache();
$json = $cache->get_data('gamester247', 'https://xboxapi.com/v1/json/profile/gamester247');
$obj = json_decode($json);

The raw json object will return like this:

{
"Success": true,
"API_Limit": "0/350",
"Player": {
"Gamertag": "gamester247",
"Status": {
"Valid": true,
"Tier": "Gold",
"Online": false,
"Online_Status": "Last seen 16 hours ago playing Dead Spaceâ„¢ 3",
"Cheater": false
},
"Launch_Team": {
"X360": false,
"NXE": false,
"Kinect": false
},
"Avatar": {
"Gamertile": {
"Small": "https://avatar-ssl.xboxlive.com/global/t.fffe07d1/tile/0/11016",
"Large": "https://avatar-ssl.xboxlive.com/global/t.fffe07d1/tile/0/21016"
},
"Gamerpic": {
"Small": "https://avatar-ssl.xboxlive.com/avatar/gamester247/avatarpic-s.png",
"Large": "https://avatar-ssl.xboxlive.com/avatar/gamester247/avatarpic-l.png"
},
"Body": "https://avatar-ssl.xboxlive.com/avatar/gamester247/avatar-body.png"
},
"Gamerscore": 25905,
"Reputation": 300,
"Name": "David Carr",
"Motto": null,
"Location": "Hull, England",
"Bio": "raptr-fee8c3d8"
},
"RecentGames": [
{
"ID": 1161890205,
"Name": "Dead Spaceâ„¢ 3",
"MarketplaceURL": "http://marketplace.xbox.com/en-US/Title/1161890205",
"BoxArt": {
"Small": "http://catalog.xboxapi.com/image/66acd000-77fe-1000-9115-d8024541099d/boxartsm.jpg",
"Large": "http://catalog.xboxapi.com/image/66acd000-77fe-1000-9115-d8024541099d/boxartlg.jpg"
},
"CatalogLink": "http://catalog.xboxapi.com/1161890205"
},
{
"ID": 1096157351,
"Name": "[PROTOTYPE®2]",
"MarketplaceURL": "http://marketplace.xbox.com/en-US/Title/1096157351",
"BoxArt": {
"Small": "http://catalog.xboxapi.com/image/66acd000-77fe-1000-9115-d802415608a7/boxartsm.jpg",
"Large": "http://catalog.xboxapi.com/image/66acd000-77fe-1000-9115-d802415608a7/boxartlg.jpg"
},
"CatalogLink": "http://catalog.xboxapi.com/1096157351"
},
{
"ID": 1414793383,
"Name": "Grand Theft Auto V",
"MarketplaceURL": "http://marketplace.xbox.com/en-US/Title/1414793383",
"BoxArt": {
"Small": "http://catalog.xboxapi.com/image/66acd000-77fe-1000-9115-d802545408a7/boxartsm.jpg",
"Large": "http://catalog.xboxapi.com/image/66acd000-77fe-1000-9115-d802545408a7/boxartlg.jpg"
},
"CatalogLink": "http://catalog.xboxapi.com/1414793383"
},
{
"ID": 1096157269,
"Name": "Call of Duty Black Ops",
"MarketplaceURL": "http://marketplace.xbox.com/en-US/Title/1096157269",
"BoxArt": {
"Small": "http://catalog.xboxapi.com/image/66acd000-77fe-1000-9115-d80241560855/boxartsm.jpg",
"Large": "http://catalog.xboxapi.com/image/66acd000-77fe-1000-9115-d80241560855/boxartlg.jpg"
},
"CatalogLink": "http://catalog.xboxapi.com/1096157269"
},
{
"ID": 1161890256,
"Name": "Titanfall",
"MarketplaceURL": "http://marketplace.xbox.com/en-US/Title/1161890256",
"BoxArt": {
"Small": "http://catalog.xboxapi.com/image/66acd000-77fe-1000-9115-d802454109d0/boxartsm.jpg",
"Large": "http://catalog.xboxapi.com/image/66acd000-77fe-1000-9115-d802454109d0/boxartlg.jpg"
},
"CatalogLink": "http://catalog.xboxapi.com/1161890256"
}
],
"API_Links": {
"Friends": "https://xboxapi.com/v1/json/friends/gamester247",
"Games": "https://xboxapi.com/v1/json/games/gamester247",
"JSON": {
"Friends": "https://xboxapi.com/v1/json/friends/gamester247",
"Games": "https://xboxapi.com/v1/json/games/gamester247"
},
"XML": {
"Friends": "https://xboxapi.com/v1/xml/friends/gamester247",
"Games": "https://xboxapi.com/v1/xml/games/gamester247"
},
"PHP": {
"Friends": "https://xboxapi.com/v1/php/friends/gamester247",
"Games": "https://xboxapi.com/v1/php/games/gamester247"
},
"Development": {
"Friends": "https://xboxapi.com/v1/dev/friends/gamester247",
"Games": "https://xboxapi.com/v1/dev/games/gamester247"
}
}
}

Looking through the data xboxapi provide other API calls for Friends and Games, I won't be using them in this article.

To use the data first check their is data to use by checking if their is a success property equal to 1

if($obj->Success == 1){

To display the data, call the object then specify the property you want followed by any subsequent properties:

echo $obj->Player->Gamertag;

A more complete examples:

<?php
    //if success
    if($obj->Success == 1){
        echo 'API Hourly Limit: '.$obj->API_Limit.'<br>';
        echo 'Gamertag: '.$obj->Player->Gamertag.'<br>';
        echo 'Membership: '.$obj->Player->Status->Tier.'<br>';
        
        //checl if user is online
        if($obj->Player->Status->Online == 1){
            echo 'Online<br>';
        } else {
            echo 'Offline<br>';
        }

        echo $obj->Player->Status->Online_Status.'<br>';
        echo "<img src='".$obj->Player->Avatar->Gamertile->Large."' alt=''><br>";
        echo 'Gamerscore: '.$obj->Player->Gamerscore.'<br>';
        echo 'Reputation: '.$obj->Player->Reputation.'<br>';
        echo $obj->Player->Name.'<br>';
        echo $obj->Player->Location.'<br>';

        echo "<p>";
        //loop through all recent games and display image
        foreach($obj->RecentGames as $row){
            echo "<img src='".$row->BoxArt->Small."' alt='$row->Name' title='$row->Name'> ";    
        }
        echo "</p>";
    } else {
        //display the error from the API
        echo $obj->Error;
    }
    ?>

 

Laravel Modules Your Logo Your Logo Your Logo

Become a sponsor

Help support the blog so that I can continue creating new content!

Sponsor

My Latest Book

Modular Laravel Book - Laravel: The Modular way

Learn how to build modular applications with Laravel Find out more

Subscribe to my newsletter

Subscribe and get my books and product announcements.

Learn Laravel with Laracasts

Faster Laravel Hosting

© 2006 - 2024 DC Blog. All code MIT license. All rights reserved.