72 lines
2.7 KiB
C#
72 lines
2.7 KiB
C#
using System.Net.Http;
|
|
using System.Threading.Tasks;
|
|
using Newtonsoft.Json.Linq;
|
|
using SteamStorefrontAPI.Classes;
|
|
|
|
namespace SteamStorefrontAPI
|
|
{
|
|
/// <summary>
|
|
/// Endpoint returning details for an application in the steam store.
|
|
/// </summary>
|
|
public static class AppDetails
|
|
{
|
|
private static HttpClient client = new HttpClient();
|
|
private const string steamBaseUri = "http://store.steampowered.com/api/appdetails";
|
|
|
|
/// <summary>
|
|
/// Retrieves details for the specified application via an asynchronous operation.
|
|
/// </summary>
|
|
/// <param name="AppId">Steam App ID.</param>
|
|
public static async Task<SteamApp> GetAsync(int AppId)
|
|
{
|
|
return await GetAsync(AppId, "", "");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieves details for the specified application via an asynchronous operation.
|
|
/// </summary>
|
|
/// <param name="AppId">Steam App ID.</param>
|
|
/// <param name="CountryCode">
|
|
/// Two letter country code to customise currency and date values.
|
|
/// </param>
|
|
public static async Task<SteamApp> GetAsync(int AppId, string CountryCode)
|
|
{
|
|
return await GetAsync(AppId, CountryCode, "");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieves details for the specified application via an asynchronous operation.
|
|
/// </summary>
|
|
/// <param name="AppId">Steam App ID.</param>
|
|
/// <param name="CountryCode">
|
|
/// Two letter country code to customise currency and date values.
|
|
/// </param>
|
|
/// <param name="Language">
|
|
/// Full name of the language in english used for string localization e.g. title,
|
|
/// description, release dates.
|
|
/// </param>
|
|
public static async Task<SteamApp> GetAsync(int AppId, string CountryCode, string Language)
|
|
{
|
|
string steamUri = $"{steamBaseUri}?appids={AppId}";
|
|
steamUri = string.IsNullOrWhiteSpace(CountryCode)
|
|
? steamUri
|
|
: $"{steamUri}&cc={CountryCode}";
|
|
|
|
steamUri = string.IsNullOrWhiteSpace(Language)
|
|
? steamUri
|
|
: $"{steamUri}&l={Language.ToLower()}";
|
|
|
|
var response = await client.GetAsync(steamUri);
|
|
if (!response.IsSuccessStatusCode) { return null; }
|
|
|
|
var result = await response.Content.ReadAsStringAsync();
|
|
|
|
// The actual payload is wrapped, drill down to the third level to get to it
|
|
var jsonData = JToken.Parse(result).First.First;
|
|
if (!bool.Parse(jsonData["success"].ToString())) { return null; }
|
|
|
|
return jsonData["data"].ToObject<SteamApp>();
|
|
}
|
|
}
|
|
}
|