Мне нужно взять онлайн сервера и зделать так чтобы он обновлялся при кажном входе в приложения , и чтобы ето всё было в label , и на xpatch;(Site https://www.advance-rp.ru/)/
Asked
Active
Viewed 72 times
1 Answers
1
Создадим такой класс для сбора данных
class AdvanсеRoleplayInfo
{
public string Players { get; set; }
public string Servers { get; set; }
public DateTime WhenLoaded { get; }
public string ErrorMessage { get; set; }
public AdvanсеRoleplayInfo()
{
WhenLoaded = DateTime.Now;
}
}
Установим такие пакеты
Создадим такой класс для работы с сайтом
class InfoWebService
{
public const string _address = "https://www.advance-rp.ru/";
public async Task<AdvanсеRoleplayInfo> GetInfoAsync()
{
//готовим результат
var result = new AdvanсеRoleplayInfo();
result.ErrorMessage = "Не удалось загрузить данные.";
//конфигурация для загрузки
var config = Configuration.Default.WithDefaultLoader().WithXPath();
try
{
//асинхронно загружаем страницу
var document = await BrowsingContext.New(config).OpenAsync(_address);
//игроки
var playersCellSelector = @"*[xpath>'//section//div[3]//div[2]//div[1]//p[2]']";
var playersCell = document.QuerySelector(playersCellSelector);
result.Players = playersCell.TextContent;
//сервера
var serversCellSelector = @"*[xpath>'//section//div[3]//div[2]//div[2]//p[2]']";
var serversCell = document.QuerySelector(serversCellSelector);
result.Servers = serversCell.TextContent;
result.ErrorMessage = String.Empty;
}
catch (Exception ex)
{
result.ErrorMessage += $"\n{ex.Message}";
}
return result;
}
}
Набросаем на форму лейблы, дадим им названия и напишем след.код
public partial class FormMain : Form
{
private BindingSource _bs;
public FormMain()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen;
this.Text = "Пример";
SetBindings();
this.Load += FormMain_Load;
}
private void SetBindings()
{
_bs = new BindingSource();
_bs.DataSource = new AdvanсеRoleplayInfo();
_labelDate.DataBindings.Add("Text", _bs, nameof(AdvanсеRoleplayInfo.WhenLoaded));
_labelPlayers.DataBindings.Add("Text", _bs, nameof(AdvanсеRoleplayInfo.Players));
_labelServers.DataBindings.Add("Text", _bs, nameof(AdvanсеRoleplayInfo.Servers));
_labelError.DataBindings.Add("Text", _bs, nameof(AdvanсеRoleplayInfo.ErrorMessage));
}
private async void FormMain_Load(object sender, EventArgs e)
{
var service = new InfoWebService();
_bs[0] = await service.GetInfoAsync();
}
}
Bulson
- 9,411

