Использование Steam API на C#

22.07.2014 at 03:51

Получения ключа

Ключ для использования 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;
  }
}

Подсветка синтаксиса начала глючить, и пришлось навставлять в адреса методов апи пробелов. Не забудьте удалить.