Voraussetzung: Das perl Modul XML::Simple muss installiert sein!
use XML::Simple;
use HttpUtils;
sub tagesschau {
my ($lines) = shift;
$lines //= 10;
my ($i,$nachrichten,$response,@ticker,$ua,$url,$xml);
$i = 0;
$url = "http://www.tagesschau.de/xml/rss2";
$response = GetFileFromURLQuiet($url,3,undef,1);
$xml = new XML::Simple;
$nachrichten = $xml->XMLin($response, ForceArray => ['item']);
while ($i < $lines) {
my $h = latin1ToUtf8($nachrichten->{channel}{item}[$i]{title});
last unless $h;
push (@ticker,$h);
$i++;
}
return join("\n", @ticker);
}
Aufgerufen wird die Funktion einfach mit
tagesschau(<anzahlZeilen>)
Wird <anzahlZeilen> weggelassen, werden 10 Zeilen zurückgegeben.
Beispiel:
In der Eingabezeile des fhem Frontend eingeben:
{tagesschau}
liefert als Ergebnis:
Angriffe aus islamkritische Künstler - ein Überblick
Boko Haram überfällt Großstadt in Nigeria
Schüsse in Kopenhagen bei Veranstaltung mit Karikaturisten
Fußball-Bundesliga: Torfestivals in München und Leverkusen
Bundesliga-Liveticker: Bayern empfängt den HSV
Chronologie der Krise: Februar 2015
Neuseeland: Hoffnung für 60 der 200 gestrandeten Wale
Waffenruhe in Ostukraine: Hält sie oder hält sie nicht?
Ratingagentur Fitch stuft Österreich herab
Der Libanon am zehnten Jahrestag des Attentats auf Hariri
Vielen Dank, super Codeschnipsel!
Funktioniert das bei euch noch?
Ich bekomme seit kurzen immer:
No value specified for 'KeyAttr' option in call to XMLin() at /usr/local/FHEM/share/fhem/FHEM/99_myUtils.pm line 358.
Leider konnte ich nicht nachvollziehen was sich bei mir geändert hat.
Ersetze/ändere die Zeile so:
$nachrichten = $xml->XMLin($response, ForceArray => ['item'], KeyAttr => []);
Sollte dann wieder gehen.
Gruß
Hans
Super vielen Dank!
Nur interessehalber, wieso ist die Änderung nötig geworden?
Nett! Aber wie setzt ihr die Headlines ein? Habt ihr Anwendungsbeispiele? Ich könnte mir vorstellen, dass ich eine TabletUI-Seite baue in der die letzten entgangenen Anrufe, die Termine für den Tag, die Fahrzeit zur Arbeit, eine große Uhr und eben die Tagesschau-Headlines dargestellt werden. So als Einstieg in den Tag. Allerdings kann es sein, dass man zu einer Headline noch weitere Infos haben möchte, weil das Thema so spannend ist. Also ein Link?
Ich habe die Funktion noch um html-Tags erweitert und zeige sie dann folgendermaßen an:
define tagesschau.headlines weblink htmlCode { tagesschau("html",20) }
Und hier die Änderungen:
################################################################
### Tagesschau-Headlines
################################################################
# 1. optionaler Parameter: "html"/"text" für html-Liste oder Text-Liste (Standard)
# 2. optionaler Parameter: Anzahl der Listeneinträge (Standard = 10)
use XML::Simple;
use HttpUtils;
sub tagesschau (;$$) {
my ($list, $lines) = @_;
$list //= "text";
$lines //= 10;
my ($i,$l,$nachrichten,$response,@ticker,$url,$xml);
$url = "http://www.tagesschau.de/xml/rss2";
$response = GetFileFromURLQuiet($url,3,undef,1);
$xml = new XML::Simple;
$nachrichten = $xml->XMLin($response, ForceArray => ['item'], KeyAttr => []);
$l = ($list ne "text");
push (@ticker,"<ul>") if $l;
$i = 0;
while ($i < $lines) {
my $h = latin1ToUtf8($nachrichten->{channel}{item}[$i]{title});
last unless $h;
$h = "<li>".$h."</li>" if $l;
push (@ticker,$h);
$i++;
}
push (@ticker,"</ul>") if $l;
return join("\n", @ticker);
}
PS: es gibt übrigens noch einen Thread zum Anzeigen/Wiedergeben auf Sonos der 100-Sekunden-Tagesschau: https://forum.fhem.de/index.php/topic,45384.0.html
Zitat von: hartenthaler am 27 April 2016, 19:05:34
Nett! Aber wie setzt ihr die Headlines ein? Habt ihr Anwendungsbeispiele?
Ich nutze die Headlines in Infopanel (http://fhem.de/commandref.html#InfoPanel). Das hat eine eingebaute Ticker-Funktion um so was anzuzeigen.
Aus dieser einfachen Idee heraus ist übrigens das Modul rssFeed (http://fhem.de/commandref_DE.html#rssFeed) entstanden ;D
Genialer Schnipsel, Danke dafür.
Ich würde die Headlines gerne mit nem Link versehen, kann mir jemand Hilfestellung geben?
Endlich kam ich zum Spielen, hier die angepasste Funktion mit Links :)
sub tagesschau (;$$) {
my ($list, $lines) = @_;
$list //= "text";
$lines //= 10;
my ($i,$l,$nachrichten,$response,@ticker,$url,$xml);
$url = "http://www.tagesschau.de/xml/rss2";
$response = GetFileFromURLQuiet($url,3,undef,1);
$xml = new XML::Simple;
$nachrichten = $xml->XMLin($response, ForceArray => ['item'], KeyAttr => []);
$l = ($list ne "text");
push (@ticker,"<ul>") if $l;
$i = 0;
while ($i < $lines) {
my $h = latin1ToUtf8($nachrichten->{channel}{item}[$i]{title});
my $l = latin1ToUtf8($nachrichten->{channel}{item}[$i]{link});
last unless $h;
$h = "<li><a href=\"" . $l . "\" target=\"_blank\">" .$h."</a></li>" if $l;
push (@ticker,$h);
$i++;
}
push (@ticker,"</ul>") if $l;
return join("\n", @ticker);
}