Hauptmenü

Website parsen

Begonnen von tentaclejoe, 10 August 2021, 21:48:44

Vorheriges Thema - Nächstes Thema

tentaclejoe

Hallo, ich mache meine ersten Gehversuche mit FHEM und vorallem Perl und muss eingestehen dass ich selbst, trotz googeln, nicht weiterkomme.

Ich möchte ein Script schreiben dass mit die Kalenderwoche und Feiertage von der Website https://kwheute.de ausliest und in einer Datenstruktur für weitere Verarbeitung speichert.
Das abrufen das HTML Quelltextes funktioniert soweit schon, nur das parsen nicht, Perl meckert hier "Global symbol "$td" requires explicit package name (did you forget to declare "my $td"?)" was ich nicht verstehe denn ich habe doch bei dem foreach ein "my" davor geschrieben.

Um zu verstehen was ich überhaupt vor habe: Auf der Website gibt es eine Tabelle in der die ganzen Kalenderwochen und Feiertage stehen und diese möchte ich aus den "td" HTML Elementen auslesen um mir die Daten später auf einem Display anzeigen zu lassen.

Mein Code bisher:

use strict;
use warnings;
use LWP::Simple;
use HTML::TreeBuilder;

my $html = get("https://kwheute.de");
my $tree = HTML::TreeBuilder->new;
$tree->parse($html)

# ab hier gehts nicht mehr
foreach my $td ($tree->find("td")) {
    print($td->as_text, "\n");
}


Sorry schonmal für die Noob Frage

steffen83

Mit httpmod schon mal probiert? Oder wäre dir das zu aufwendig
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

tentaclejoe

Danke für den Tipp, ich werds mir mal anschauen  :)

betateilchen

Warum brauchst Du eine Webseite, um ein paar Datumsinformationen zu finden? Das kann perl doch selbst.
Und Feiertage gibt es in FHEM im holiday-Modul.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Damian

Hier ein Einzeiler für die Kalenderwoche:

defmod di_week DOIF init {[00:00];;set_State($week)}

Im Status von di_week steht immer die aktuelle Kalenderwoche.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tentaclejoe

Ok da hab ich wohl etwas zu kompliziert gedacht wenn Perl und FHEM dafür schon fertige Module haben, schonmal vielen Dank!