One of the features I'm trying to integrate in my game is the ability to render a Kongregate user's avatar in the game itself. For this tutorial, I will be using Kongregate's JSON REST API to fetch user data.
After skimming through the Kongregate API documentation, I found the page about the user-info REST call.
The url for a user-info call is formatted as follows: http://www.kongregate.com/api/user_info.json?username=<username> where username is obviously the username for the user account you're searching for.
This provides you with a response such as the following:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
{
"friends":[],
"muted_users":[],
"friend_ids":[],
"muted_user_ids":[],
"user_id":3590097,
"username":"agnt666",
"private":false,
"page_num":1,
"num_pages":1,
"success":true,
"user_vars":{
"username":"agnt666",
"level":3,
"points":165,
"avatar_url":"http://cdn4.kongcdn.com/assets/resize-image/50x50/assets/avatars/defaults/ant.png",
"chat_avatar_url":"http://cdn4.kongcdn.com/assets/resize-image/16x16/assets/avatars/defaults/ant.png",
"developer":false,
"moderator":false,
"admin":false,
"gender":"Male",
"age":25,
"game_title":"Typocalypse 3D",
"game_url":"http://www.kongregate.com/games/agnt666/typocalypse-3d"
}
}
And the above response provides me with what I needed; the avatar url:
1
"avatar_url" : "http://cdn4.kongcdn.com/assets/resize-image/50x50/assets/avatars/defaults/ant.png"

Getting the avatar url in C#
Getting the username of the current Kongregate logged-in user is beyond the scope of this post (TODO: maybe in another one), so for this code I'm assuming you already have it.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
public UITexture kongregateTexture;
IEnumerator FetchUserDetails(string username) {
// Build the url for the REST call
var detailsUrl = String.Format("/api/user_info.json?username={0}", username);
// Do the call
var www = new WWW(detailsUrl);
// ...and wait until we get back a response
yield return www;
// Get the JSON response text
var responseText = www.text;
// Deserialize it into a statically typed object to read to be able to read it's contents
// For this demo, I'm using this JSON deserializer script: https://raw.github.com/gist/1411710/MiniJSON.cs
var deserialized = MiniJSON.Json.Deserialize(responseText) as Dictionary<string,object>;
//// TODO: a null check would be nice here
// Get the user_vars object
var userVars = deserialized["user_vars"] as Dictionary<string,object>;
// Read the avatar url
var avatar_url = user_vars["avatar_url"].ToString(); // http://cdn4.kongcdn.com/assets/resize-image/50x50/assets/avatars/defaults/ant.png
//// Do the same routine to fetch the image
var wwwAvatar = new WWW(avatar_url);
yield return wwwAvatar;
// And now we have the texture!
Texture2D avatarTexture = wwwAvatar.texture;
// Render the texture (I'm using an NGUI SimpleTexture widget)
kongregateTexture.mainTexture = avatarTexture;
}
And this is the result with a shitty border I made around it:
Possible exception: Security Exception: No valid crossdomain policy available to allow access
Notice that in the above code, to build the url of the REST call, I used Kongregate's relative url: "/api/user-info.json...".If I had used this instead String.Format("http://www.kongregate.com/api/user_info.json?username={0}", username);, I would have received this exception when running the game and looking at the debug log (console):
This error is thrown when reading the text field of the WWW instance (get_text).
So be very careful about that when doing the REST calls; always use relative urls! ...and this of course works because the game is hosted on http://www.kongregate.com.
Kongregate Kreds · 618 weeks ago
Elmar · 570 weeks ago
Andreas Grech 47p · 569 weeks ago
Thom Denick · 569 weeks ago
Thom Denick · 569 weeks ago
4.3.4 and 4.3.3 have the bug.
4.3.1 does not.
Not sure about 4.3.2
Andreas Grech 47p · 569 weeks ago
Thom Denick · 569 weeks ago
Hopefully we'll get a fix soon! Will update when it is fixed.
Thom Denick · 569 weeks ago
Andreas Grech 47p · 540 weeks ago
blogginglife707 1p · 402 weeks ago