Ich hab dir im Anhang mal das Projekt angehangen.
Ich erkläre in diesem Beispiel nur, wie man die Zeit bekommt. Sounds etc. können später hinzugefügt werden.
Schritt 1:
Für dieses Projekt benutze ich das HtmlAgilityPack.
Dazu rechtsklick auf das Projekt -> NuGet Paket verwalten (oder so ähnlich) -> den Reiter "Online" auswählen -> oben in die Suchleiste "HtmlAgilityPack" eingeben -> suchen und installieren.
Schritt 2:
Code:
public partial class Form1 : Form
{
private readonly Timer _refreshTimer;
public Form1()
{
InitializeComponent();
_refreshTimer = new Timer(TimeSpan.FromSeconds(5).TotalMilliseconds);
_refreshTimer.Elapsed += UpdateLastSeen;
_refreshTimer.Start();
}
.
.
.
Hier hab ich erstmal den System.Timers.Timer deklariert und initialisiert.
Im Konstruktur kannst du bereits das Interval in Millisekunden festlegen.
Hier habe ich einmal als Beispiel ein Interval von 5 Sekunden gewählt.
Das Elapsed-Event wird ausgelöst, wenn das Interval abgelaufen ist.
Im Konstruktor habe ich eine Methode registriert, die beim Auslösen des Events ausgelöst wird. Dazu später mehr.
Am Ende noch den Timer starten und fertig.
Schritt 3:
Nun gehts zum Eingemachten.
Code:
private void UpdateLastSeen(object sender, EventArgs e)
{
_refreshTimer.Stop();
var doc = new HtmlDocument();
var webclient = new WebClient();
// Load html into document.
doc.LoadHtml(webclient.DownloadString("http://www.elitepvpers.com/forum/members/3931150-tommygremy.html"));
var lastSeenNode = doc.DocumentNode.SelectSingleNode("//*[@id=\"last_online\"]/span[2]");
var lastSeen = lastSeenNode.InnerHtml;
_refreshTimer.Start();
}
Zunächst sei gesagt, dass _refreshTimer.Start() und _refreshTimer.Stop() optional sind. Ich habe dies hier nur gemacht, damit der Timer bei der kurzen Intervaldauer nicht mehrfach auslöst, sollte der Code was länger brauchen.
Als erstes deklariere ich zwei Variablen:
Ein HtmlAgilityPack.HtmlDocument und ein WebClient.
Zunächst lade ich mit Hilfe des WebClient die Webseite als String in das HtmlDocument.
Danach brauch ich nur noch das Element, welches die Zeit enthält.
Dieses Element bekomme ich per XPath.
Wenn man das Element hat, kann man die Zeit einfach über InnerHtml auslesen.
Achtung: Wenn du in der UpdateLastSeen Methode irgendwelche Elemente auf deiner GUI änderst, musst du dies via Control.Invoke tun, da UpdateLastSeen in einem separaten Thread ausgeführt wird (falls die Methode von dem Timer aufgerufen wird).
Bitte beachten: Ich habe hier keinerlei Fehlerchecks drin. Du musst also noch prüfen, ob überhaupt die Daten richtig geladen wurden und das Element mit der Zeit gefunden wurde.
Hoffe das hat geholfen