/// <summary> /// Retrieves a list of featured items, grouped by category. Some of the data in response /// may vary for a given country code and language. /// </summary> /// <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. name, /// description. /// </param> /// <param name="token">Propogates notification that operation should be cancelled.</param> /// <returns>A list of featured items, grouped by category, in the steam store.</returns> public async Task <FeaturedCategories> GetFeaturedCategoriesAsync(CountryCode countryCode, Language language, CancellationToken token = default) { var queryParameters = new QueryParametersBuilder(); if (countryCode != CountryCode.Unknown) { queryParameters.AppendParameter( "cc", CountryCodeConverter.GetCountryCodeStringValue(countryCode) ); } if (language != Language.Unknown) { queryParameters.AppendParameter("l", language.ToString().ToLower()); } using (var response = await GetRetryPolicy().ExecuteAsync( () => _httpClient.GetAsync(_config.SteamStoreBaseUrl + "/api/featuredcategories" + queryParameters.ToString(), token))) { response.EnsureSuccessStatusCode(); var result = await response.Content.ReadAsStringAsync(); var jsonData = JObject.Parse(result); if (jsonData["status"].ToString() != "1") { throw new SteamApiBadRequestException( "Bad request status. Check if you specified right parameters." ); } return(jsonData.ToObject <FeaturedCategories>()); } }
/// <summary> /// Retrieves news data for the specified application. /// </summary> /// <param name="request">A set of parameters for request.</param> /// <param name="token">Propogates notification that operation should be cancelled.</param> /// <returns>News for specified steam application.</returns> public async Task <SteamAppNews> GetAppNewsAsync(GetNewsRequest request, CancellationToken token = default) { var queryParameters = new QueryParametersBuilder(); queryParameters.AppendParameter("format", "json"); queryParameters.AppendParameter("key", _config.ApiKey); queryParameters.AppendParameter("appid", request.AppId.ToString()); if (request.EndDate.HasValue) { queryParameters.AppendParameter( "enddate", request.EndDate.Value.ToUnixTimeSeconds().ToString() ); } if (request.Count.HasValue) { queryParameters.AppendParameter("count", request.Count.Value.ToString()); } using (var response = await GetRetryPolicy().ExecuteAsync( () => _httpClient.GetAsync(_config.SteamPoweredBaseUrl + "/ISteamNews/GetNewsForApp/v0002/" + queryParameters.ToString(), token))) { response.EnsureSuccessStatusCode(); 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; return(jsonData.ToObject <SteamAppNews>()); } }
/// <summary> /// Retrieves reviews data for the specified application. /// </summary> /// <param name="request">A set of parameters for request.</param> /// <param name="token">Propogates notification that operation should be cancelled.</param> /// <returns>Reviews data for specified steam application.</returns> public async Task <ReviewsResponse> GetReviewsAsync(GetReviewsRequest request, CancellationToken token = default) { // Another option: https://partner.steamgames.com/doc/store/getreviews var queryParameters = new QueryParametersBuilder(); queryParameters.AppendParameter("json", "1"); queryParameters.AppendParameter("filter", request.Filter.ToString().ToLower()); queryParameters.AppendParameter("language", request.Language); queryParameters.AppendParameter("review_type", request.ReviewType.ToString().ToLower()); queryParameters.AppendParameter( "purchase_type", request.PurchaseType.ToString().ToLower() ); if (request.DayRange.HasValue) { queryParameters.AppendParameter("day_range", request.DayRange.Value.ToString()); } if (request.StartOffset.HasValue) { queryParameters.AppendParameter( "start_offset", request.StartOffset.Value.ToString() ); } using (var response = await GetRetryPolicy().ExecuteAsync( () => _httpClient.GetAsync(_config.SteamStoreBaseUrl + $"/appreviews/{request.AppId}" + queryParameters.ToString(), token))) { response.EnsureSuccessStatusCode(); var result = await response.Content.ReadAsStringAsync(); var jsonData = JToken.Parse(result); if (jsonData["success"].ToString() != "1") { throw new SteamApiBadRequestException( "Bad request status. Check if you specified rigth parameters." ); } return(jsonData.ToObject <ReviewsResponse>()); } }
/// <summary> /// Retrieves details for the specified package. Some of the data in response may vary for /// a given country code and language. /// </summary> /// <param name="packageId">Steam package 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> /// <param name="token">Propogates notification that operation should be cancelled.</param> /// <returns>Details for a package in the steam store.</returns> public async Task <PackageInfo> GetPackageInfoAsync(int packageId, CountryCode countryCode, Language language, CancellationToken token = default) { var queryParameters = new QueryParametersBuilder(); queryParameters.AppendParameter("packageids", packageId.ToString()); if (countryCode != CountryCode.Unknown) { queryParameters.AppendParameter( "cc", CountryCodeConverter.GetCountryCodeStringValue(countryCode) ); } if (language != Language.Unknown) { queryParameters.AppendParameter("l", language.ToString().ToLower()); } using (var response = await GetRetryPolicy().ExecuteAsync( () => _httpClient.GetAsync(_config.SteamStoreBaseUrl + "/api/packagedetails" + queryParameters.ToString(), token))) { response.EnsureSuccessStatusCode(); 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())) { throw new SteamApiBadRequestException( "Bad request status. Check if you specified right PackageID." ); } var package = jsonData["data"].ToObject <PackageInfo>(); package.SteamPackageId = packageId; return(package); } }