-1

Мне нужно взять онлайн сервера и зделать так чтобы он обновлялся при кажном входе в приложения , и чтобы ето всё было в label , и на xpatch;(Site https://www.advance-rp.ru/)/

SimonC
  • 33

1 Answers1

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

Установим такие пакеты

загрузка nuget пакетов

Создадим такой класс для работы с сайтом

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