Al momento non è possibile raccogliere dati sui risultati degli utenti con la "nuova" API. Tuttavia è possibile con la "vecchia" API XML.
Fondamentalmente è solo l'aggiunta di un parametro uri denominato xml
con valore 1
a un normale uri della comunità. (Quindi per una pagina della comunità di http://steamcommunity.com/profiles/XYZ
diventa http://steamcommunity.com/profiles/XYZ?xml=1
)
Questa è un'implementazione C # di esempio (solo a scopo dimostrativo!) che espone un User.Load
metodo che accetta l'ID della comunità come parametro. (L'ID sarebbe XYZ
nell'esempio precedente.)
// System.dll // System.Xml.dll // System.Xml.Linq.dll utilizzando System; utilizzando System.Collections.Generic; utilizzando System.Linq; utilizzando System.Net; utilizzando System.Xml.Linq; utilizzando System.Xml.XPath; public class Achievement {public string Name {get; impostato; } stringa pubblica Descrizione {get; impostato; } icona Uri pubblica {get; impostato; }} public class Game {public int Id {get; impostato; } nome stringa pubblica {get; impostato; } logo Uri pubblico {get; impostato; }} public class OwnedGame: Game {public User User {get; impostato; } Statistiche statistiche pubbliche {get; impostato; }} Statistiche di classe pubblica {Gioco pubblico di OwnedGame {get; impostato; } public IEnumerable<Achievement> Achievements {get; set;}} public class Utente {private const string SteamCommunityProfileUriFormat = "http://steamcommunity.com/profiles/{0}?xml=1"; stringa const privata SteamCommunityProfileGamesUriFormat = "http://steamcommunity.com/profiles/{0}/games?xml=1"; pubblico lungo Id {get; impostato; } nome stringa pubblica {get; impostato; } Avatar Uri pubblico {get; impostato; } public IEnumerable<OwnedGame> Games {get; impostato; } carico utente statico pubblico (id lungo) {XDocument profileDocument = XDocument.Load (string.Format (SteamCommunityProfileUriFormat, id));
XElement profileElement = profileDocument.Element ("profilo"); Utente user = new User () {Id = long.Parse (profileElement.Element ("steamID64"). Value), Name = profileElement.Element ("steamID"). Value, Avatar = new Uri (profileElement.Element ("avatarIcon ") .Value, UriKind.Absolute),}; XDocument gamesDocument = XDocument.Load (string.Format (SteamCommunityProfileGamesUriFormat, id)); List<OwnedGame> games = nuovo List<OwnedGame> (); foreach (XElement gameElement in gamesDocument.XPathSelectElements ("gamesList / games / game")) {OwnedGame game = new OwnedGame () {Id = int.Parse (gameElement.Element ("appID"). Value), Name = gameElement.Element ("nome"). Value, Logo = new Uri (gameElement.Element ("logo"). Value, UriKind.Absolute), User = user}; XElement statsLinkElement = gameElement.Element ("statsLink"); if (statsLinkElement! = null) {try {XDocument statsDocument = XDocument.Load (statsLinkElement.Value + "? xml = 1"); game.Stats = new Stats () {Game = game, Achievements = statsDocument .XPathSelectElements ("playerstats / realizzazioni / successi") .Where (successElement = > achievementElement.Attribute ("closed"). Value == "1"). Seleziona (achievementElement = > new Achievement () {Name = achievementElement.Element ("name"). Value,
Description = achievementElement.Element ("description"). Value, Icon = new Uri (achievementElement.Element ("iconClosed"). Value, UriKind.Absolute)})}; } cattura (WebException) {continue; }} games.Add (gioco); } user.Games = games.AsReadOnly (); utente di ritorno; }}
Esempio di utilizzo:
long id = ... User user = User.Load (id); int totalAchievementCount = user.Games.Where (game = > game.Stats! = null) .SelectMany (game = > game.Stats.Achievements) .Count ();
Spero che non ce ne siano troppe errori di battitura in là :-)
Nota:
- come indicato nei Termini dell'API Web di Steam di utilizzo "sei limitato a centomila (100.000) chiamate all'API Web di Steam al giorno."
- Tutti gli HTTP risposte di steamcommunity.com hanno un'intestazione
Cache-Control: no-cache
. - L ' API XML è "vecchio" e doveva essere completamente sostituito. Ciò significa che i dati XML potrebbero non essere validi e non disponibili per tutte le risorse. (Questo è attualmente il caso delle statistiche di Team Fortress 2)
- Non non è necessaria una chiave API come nel caso della "nuova" API.