


Я хочу получить кол-во очков стим на C#
Я хочу получить кол-во очков стим при гет запросе через http client с использованием куков но html файл который я получаю обрезан и на нем нет той информации которая мне нужна

using (HttpClient client = new HttpClient(handler))
{
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0");
client.DefaultRequestHeaders.Add("Accept", "application/json, text/plain, */*");
client.DefaultRequestHeaders.Add("Origin", "https://steamcommunity.com");
client.DefaultRequestHeaders.Add("Connection", "keep-alive");
var req = await client.GetStringAsync("https://store.steampowered.com/account/");
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(req);
var elements = htmlDoc.DocumentNode.SelectNodes($"//*[contains(@class, 'youraccount_steamid')]");
string id = elements[0].InnerText.Substring(10);
Console.WriteLine(id);
var balance = htmlDoc.GetElementbyId("header_wallet_balance");
Console.WriteLine(balance.InnerText.Trim());
var reqst = await client.GetStringAsync($"https://steamcommunity.com/profiles/{id}");
var Doc = new HtmlDocument();
Doc.LoadHtml(reqst);
string level = Doc.DocumentNode.SelectNodes($"//*[contains(@class, 'friendPlayerLevelNum')]")[0].ToString();
int ir = 0;
foreach (var item in Doc.DocumentNode.SelectNodes($"//*[contains(@class, 'count_link_label')]"))
{
var valu = Doc.DocumentNode.SelectNodes($"//*[contains(@class, 'profile_count_link_total')]")[ir].InnerText.Trim();
Console.WriteLine(item.InnerText.Trim() + " " + valu);
ir++;
}
var reqste = await client.GetStringAsync($"https://store.steampowered.com/points/shop/");
var Docs = new HtmlDocument();
Docs.LoadHtml(reqste);
Console.WriteLine(reqste);
//_3U0OMqu4rjQDjuwd0A-h_5
}
Может кто-то сталкивался с этим и сможет помочь заранее спасибо
Тебе все правильно написали, надо api использовать
Проблема в том, что Steam использует JavaScript для загрузки баланса очков, поэтому простой GET запрос не вернет эту информацию. Вместо этого вам нужно использовать специальный API эндпоинт. Вот рабочее решение:
using (HttpClient client = new HttpClient(handler))
{
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0");
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("Origin", "https://store.steampowered.com");
client.DefaultRequestHeaders.Add("Referer", "https://store.steampowered.com/points/shop");
// Используем правильный API эндпоинт для получения баланса очков
var response = await client.GetStringAsync("https://store.steampowered.com/points/ajaxgetpointssummary");
// Ответ приходит в формате JSON
// Можно использовать System.Text.Json или Newtonsoft.Json для парсинга
using JsonDocument document = JsonDocument.Parse(response);
var pointsBalance = document.RootElement.GetProperty("points_balance").GetInt32();
Console.WriteLine($"Points Balance: {pointsBalance}");
}
Ключевые изменения:
1. Использован специальный API эндпоинт `/points/ajaxgetpointssummary`
2. Установлен заголовок Referer
3. Ответ приходит в JSON формате
4. Используется JsonDocument для парсинга ответа
Этот метод вернет актуальное количество очков в магазине Steam. Убедитесь, что вы правильно установили куки авторизации в handler перед выполнением запроса.
Также важно отметить, что для работы с этим API необходимо быть авторизованным в Steam, иначе вы получите ошибку авторизации.