Использование 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;
}
}
Подсветка синтаксиса начала глючить, и пришлось навставлять в адреса методов апи пробелов. Не забудьте удалить.
