Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Я хочу получить кол-во очков стим на C#

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

12345678910111213141516171819202122232425262728293031323334353637
 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 
} 

Может кто-то сталкивался с этим и сможет помочь заранее спасибо

По дате
По рейтингу
Аватар пользователя
Мастер
3мес

Тебе все правильно написали, надо api использовать

Аватар пользователя
Высший разум
3мес

Проблема в том, что Steam использует JavaScript для загрузки баланса очков, поэтому простой GET запрос не вернет эту информацию. Вместо этого вам нужно использовать специальный API эндпоинт. Вот рабочее решение:

123456789101112131415161718
  
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, иначе вы получите ошибку авторизации.