Headlines aus Tagesschau RSS extrahieren

Begonnen von betateilchen, 14 Februar 2015, 19:42:52

Vorheriges Thema - Nächstes Thema

betateilchen

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
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ptigges


Thargor

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.

Hans Franz

Ersetze/ändere die Zeile so:
$nachrichten = $xml->XMLin($response, ForceArray => ['item'], KeyAttr => []);
Sollte dann wieder gehen.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Thargor


Super vielen Dank!
Nur interessehalber, wieso ist die Änderung nötig geworden?

hartenthaler

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?
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

hartenthaler

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
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

Benni

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. Das hat eine eingebaute Ticker-Funktion um so was anzuzeigen.

Aus dieser einfachen Idee heraus ist übrigens das Modul rssFeed entstanden ;D


gbomacfly

Genialer Schnipsel, Danke dafür.
Ich würde die Headlines gerne mit nem Link versehen, kann mir jemand Hilfestellung geben?
FHEM auf Debian Server, LogDB, MAX!-HT, Yeelight, Sonoff-Tasmota, IT, Signalduino434, nanoCUL868
FHEM-Keller auf RPI Zero mit OBIS (FHEM2FHEM)
FHEM-WZ auf RPI Zero - BT auf Alexa
Diverse Eigenbausensoren mit Arduino/MQTT

gbomacfly

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);
}
FHEM auf Debian Server, LogDB, MAX!-HT, Yeelight, Sonoff-Tasmota, IT, Signalduino434, nanoCUL868
FHEM-Keller auf RPI Zero mit OBIS (FHEM2FHEM)
FHEM-WZ auf RPI Zero - BT auf Alexa
Diverse Eigenbausensoren mit Arduino/MQTT