Wie kann ich den RSS-Feed nach neuen Einträgen aus dem Bash-Skript durchsuchen?

10

Ich muss mir einen RSS-Feed von unserem Hudson CI-Server ansehen. Jedes Mal, wenn ein neuer Eintrag verfügbar ist, möchte ich einen Ton abrufen, indem ich anrufe #>play sound.wav.

Kennt jemand ein Tool, das bei jedem Erscheinen eines neuen Eintrags einen RSS-Feed beobachten und einen Befehl auslösen kann?

Ich habe es mir angesehen, rsstailaber es werden alle Einträge aus dem Feed abgerufen und nicht die neuesten oder nur die, die seit der letzten Suche neu sind.

Martin
quelle
Vielleicht können Sie bashpodder.shell ändern? ( lincgeek.org/bashpodder )
Johan
Sind Sie sicher, dass Sie rsstailrichtig verwenden? Die Manpage gibt an, dass das Standardintervall für die Suche nach neuen Feeds 15 Minuten beträgt und durch den -iParameter geändert werden kann. (Denken Sie daran, dass Sie durch RSS-Design die Update-Informationen nie sofort erhalten,
sondern
1
Hölle ja. rsstail -i 3 -u example.com/rss.xml -n 0 das ist es. Vielen Dank!
Martin

Antworten:

10

Sie können versuchen, Newsbeuter zu verwenden, mit dem Sie einen externen Befehl ausführen können (siehe notify-program Dokumentation ).

Canto hat auch einige anpassbare Hooks , obwohl das gesamte Konfigurationssystem auf den ersten Blick etwas komplizierter aussieht.

Mit rsstail+ shell können Sie auch externe Befehle aufrufen. Beginnen Sie mit dem, was Sie bereits herausgefunden haben:

rsstail -i 3 -u example.com/rss.xml -n 0

und leiten Sie den Ausgang an eine while readSchleife weiter:

rsstail -i 3 -u example.com/rss.xml -n 0 | while read line
  do
    aplay /some/sound/file.wav
    echo "$line"
  done
rozcietrzewiacz
quelle
4

Das ist die Lösung:

rsstail -i 3 -u example.com/rss.xml -n 0 | while read x ; do play fail.ogg ; done

Jedes Mal, wenn ein neues Thema im Feed veröffentlicht wird, wird der Sound abgespielt. Spiel ist in Sox verpackt

Martin
quelle
Ich verstehe, dass dies den Teil über das Erfrischen löst, aber (noch) keine Möglichkeit ist, Sound zu spielen (der Hauptteil, nach dem Sie gefragt haben). Wenn Sie es auch gelöst haben, schreiben Sie bitte wie.
Rozcietrzewiacz
Ihr Recht. gerade aktualisieren ...
Martin
1

Du könntest es versuchen:

#!/bin/bash
last=""
while true
do
    now="$(curl http://yourdomain/feed.rss 2> /dev/null | grep pubDate | head -1)"
    test "$last" != "$now" && play mysound.wav
    last="$now"
    sleep 1m
done
k.parnell
quelle