Использование Steam API на C#
Получения ключа
Ключ для использования API получаем здесь.
Документация
Справка по апи доступна на странице для разработчиков. У нее есть один недостаток — она глючная и описаны не все методы. Вместо этого лучше использовать стороннюю справку.
JSON
Стим умеет отдавать данные как в XML, так и в JSON. Я использовал JSON. Для десериализации использовал сервис json2csharp.com. Сервису нужно скормить урл для получения данных, и он генерирует классы для десериализации.
Получение списка всех игр
Для получения списка игр используется метод GetAppList
public class App { public int appid { get; set; } public string name { get; set; } } public class Applist { public List<App> apps { get; set; } } public class RootObjectApp { public Applist applist { get; set; } } public class AppsLoader { public static List<App> Load() { var response = new WebClient().DownloadString( @"http: //api.steampowered.com/ISteamApps/GetAppList/v2?key={key}"); DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(RootObjectApp)); RootObjectApp result = (RootObjectApp)json.ReadObject( new System.IO.MemoryStream(Encoding.UTF8.GetBytes(response))); return result.applist.apps; } }
{key} — ключ, который мы получили в самом начале.
Первые три класса — это как раз сгенерированные классы для десериализации.
Получение списка друзей пользователя
Здесь используется метод GetFriendList.
public class Friend { public string steamid { get; set; } public string relationship { get; set; } public int friend_since { get; set; } } public class Friendslist { public List<Friend> friends { get; set; } } public class FriendRootObject { public Friendslist friendslist { get; set; } } public class FriendLoader { public static List<string> Load(string steamId) { string response; try { response = SteamUtils.LoadData(string.Format( @"http: //api.steampowered.com/ISteamUser/GetFriendList/v1/?key={key}&steamid={0}", steamId)); } catch { return new List<string>(); } DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(FriendRootObject)); FriendRootObject result = (FriendRootObject)json.ReadObject( new System.IO.MemoryStream(Encoding.UTF8.GetBytes(response))); return result.friendslist.friends.Select(f => f.steamid).ToList(); } }
Здесь в вызов метода добавляется еще один параметр — ИД пользователя. Обработка ошибок нужна из-за того, что у некоторых пользователей нельзя получить список друзей из-за настроек приватности.
Статистика игрока
Для получения списка игр и количества отыгранных часов используется метод GetOwnedGames.
public class Game { public int appid { get; set; } public int playtime_forever { get; set; } public int? playtime_2weeks { get; set; } } public class Response { public int game_count { get; set; } public List<Game> games { get; set; } } public class RootObject { public Response response { get; set; } } public class GamesLoader { public static List<Game> Load(string steamId) { var response = SteamUtils.LoadData(string.Format( @"http ://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key={key}&steamid={0}", steamId)); DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(RootObject)); RootObject result = (RootObject)json.ReadObject( new System.IO.MemoryStream(Encoding.UTF8.GetBytes(response))); return result.response.games; } }
Подсветка синтаксиса начала глючить, и пришлось навставлять в адреса методов апи пробелов. Не забудьте удалить.