Archive for the ‘Google’ tag
Xbox Live Gamercard API
So, got decided to join most of my friends and I got an Xbox 360. Me being me though, I got interested in the way that all the information about your “Gamertag” is stored an accessible on the xbox.com website. Wouldn’t it be fun to do something with this data!
As it turns out, I was beaten to the post by Duncan MacKensie (http://duncanmackenzie.net/Blog/put-up-a-rest-api-for-xbox-gamertag-data) who hosts a webservice to retrieve gamer data from Microsoft. I could find no details about how this service works, where the data comes from or anything! Either he has a relationship with Microsoft, or he scrapes xbox.com but either way, the data seems pretty consistent and reliable. Actually it turns out this information was right there on his website… http://www.duncanmackenzie.net/Blog/if-you-are-wondering-where-i-get-my-xbox-live-info So he gets it as part of his membership to the Xbox Community Developer Program.
However, the webservice is great, and returns XML which is fine, but I thought it would be more useful to me to have a PHP API for this data. So I wrote one which retrieves data from Duncans webservice.
Then I thought wouldn’t it be great to be able to use this dynamically in a webpage, so I wrote a service frontend which will return JSON formatted data. Then I thought wouldn’t it be useful to let other people use this as well, so I modified it and it can now cope with JSONP requests with a “_callback” parameter.
OK, so what does this all mean.
The PHP
The class is called gamertag and the usage is very simple:
// include the class file
require "gamertag.php";
//instantiate
$G = new Gamertag('thechriswalker');
//get data
$data = $G->getArray();
print_r($G);
which outputs something like this:
Array
(
[Gamertag] => thechriswalker
[AccountStatus] => Silver
[State] => Valid
[ProfileUrl] => http://live.xbox.com/member/thechriswalker
[TileUrl] => http://avatar.xboxlive.com/avatar/thechriswalker/avatarpic-l.png
[AvatarFullUrl] => http://avatar.xboxlive.com/avatar/thechriswalker/avatar-body.png
[Country] => United Kingdom
[Location] => Bradninch
[Bio] =>
[Reputation] => 58.72229
[ReputationImageUrl] => http://live.xbox.com/xweb/lib/images/gc_repstars_external_12.gif
[Zone] => Recreation
[GamerScore] => 230
[PresenceInfo] => Array
(
[Valid] => true
[Info] => Last seen 12/29/09 playing Modern Warfare® 2
[Info2] =>
[LastSeen] => Tue, 29 Dec 2009 21:35:22 +0000
[Online] => false
[StatusText] => Offline
[Title] => Modern Warfare® 2
)
[RecentGames] => Array
(
[0] => Array
(
[Name] => Modern Warfare® 2
[TotalAchievements] => 50
[TotalGamerScore] => 1000
[Image32Url] => http://tiles.xbox.com/tiles/Z+/tF/12dsb2JgbA9ECgQJGgYfVl5UL2ljb24vMC84MDAwIAABAAAAAPhq63g=.jpg
[Image64Url] => http://tiles.xbox.com/tiles/CE/Vx/0Gdsb2JhbC9ECgQJGgYfVl5UL2ljb24vMC84MDAwAAAAAAAAAP9eRRc=.jpg
[LastPlayed] => Tue, 29 Dec 2009 21:32:52 +0000
[Achievements] => 9
[GamerScore] => 115
[DetailsURL] => http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3a%60m%2fl%3b%7cw&compareTo=thechriswalker
)
[1] => Array
(
[Name] => PGR 4
[TotalAchievements] => 60
[TotalGamerScore] => 1250
[Image32Url] => http://tiles.xbox.com/tiles/Y1/qn/0Gdsb2JgbA9ECgR8GgMfWSlaL2ljb24vMC84MDAwIAABAAAAAP+IWnw=.jpg
[Image64Url] => http://tiles.xbox.com/tiles/DP/ST/12dsb2JhbC9ECgR8GgMfWSlaL2ljb24vMC84MDAwAAAAAAAAAPi89BM=.jpg
[LastPlayed] => Mon, 28 Dec 2009 16:59:25 +0000
[Achievements] => 5
[GamerScore] => 115
[DetailsURL] => http://live.xbox.com/en-US/profile/Achievements/ViewAchievementDetails.aspx?tid=%09%5d%3a%15%18*iAq%0b&compareTo=thechriswalker
)
)
)
So now we can easily get at the data. The source code for the class (which is not fully tested, but the basics work!) is at http://thechriswalker.net/xbox360/gamertag.source.php (NB it requires either PHP5 (for json_encode) or the PEAR Services_JSON class if you want to use the “getJSON()” method).
The JSON
PHP is well and good but what if I want to use a JSON/JSONP (JSONP is for cross-domain information requesting and is very useful for public information services, see http://en.wikipedia.org/wiki/JSON#JSONP) request, well, that can be done at http://thechriswalker.net/xbox360/?gamertag=YOUR_GAMERTAG for the straight JSON or http://thechriswalker.net/xbox360/?gamertag=YOUR_GAMERTAG&_callback=YOUR_CALLBACK_FUNCTION_NAME for JSONP.
The first returns just JSON with a content type “application/json” and the second returns a javascript function call to your callback function with the JSON object as the only parameter and a content type of “text/javascript”.
These enabled me to build a simple Google Gadget to display a Gamercard:
What people misunderstand about Google Wave
I had heard about Google Wave, had a quick look at their UI, thought “shiny” and not really paid it much attention. Then I was reminded of it again recently and so I had another look, watched the Keynote Speech that they gave at the Google I/O 2009 and had a bit of a look around the web for related articles.
And I got really excited and really angry.
I got angry, because most people weren’t excited for the right reasons, or were dismissive / “anti” because they didn’t really see what Google has done.
But because I am so excited about Wave (not just Google Wave), I thought I’d post this to help you understand what Google Wave actually is and what it isn’t.
What Google Wave isn’t
Google Wave isn’t Wave.
Wait a second! Why have you dropped the “Google”, what’s “Wave” all about?
Firstly let’s take an analogy, with something you are no doubt familiar with. Consider the statement:
Google Mail is not email.
Imagine that email didn’t exist and Google showcased Google Mail. People might think that email was Google Mail, but we all know that isn’t the case.
The same for Wave. Google have designed a messaging system which can be run by anyone. They have designed the protocols it will use which anyone can implement. This messaging system is not Google Wave, but Wave itself.
What Google Wave is
Google have designed a UI for Wave, which is Google Wave.
Don’t get me wrong, I like their interface. It is written in HTML5 using the Google Web Toolkit and it is super slick.
However, the Wave itself is far more exciting.
What Wave is
Wave is email redesigned for the 21st century. Email was born before the internet and has been flogged and flogged into how we use it now. It is inefficient, single one-way message based, bad with files, incosistent with rich styling, non-collaborative and basically just way past it’s “sell by date”.
With Wave we no longer deal in single messages, but conversations; where content evolves over time and can be “played back” to provide the user with context. Everything email and IM can do and more. They have designed the system to be extensible and so can communicate with other systems. They also designed it to work over a federated networks model, so many people running their own Wave servers can communicate in the same rich way as if they were communicating with their people on their own server.
Amazing really, and provided we can bridge the backwards compatibility gap* (which we can, remember Wave is extensible!) then I see Wave replacing email altogether.
When Google Wave goes live, Google will also be releasing the server for anyone to run, learn, enjoy and stop using email with. I am looking forward it immensely.
[update 2009-08-06] Further developments have shown that yes “gateways” have been designed in, so Wave can replace email and any other messaging/collaboration protocols/tools if someone creates a “gateway” for it.