Jak oglądać kanał rss dla nowych wpisów ze skryptu bash?

10

Muszę obejrzeć kanał RSS z naszego serwera Hudson CI. Za każdym razem, gdy dostępny jest nowy wpis, chcę odtworzyć dźwięk dzwoniąc #>play sound.wav.

Czy ktoś zna narzędzie, które może oglądać kanał rss i uruchomić polecenie za każdym razem, gdy pojawi się nowy wpis?

Spojrzałem na, rsstailale pobiera wszystkie wpisy z kanału, a nie najnowsze lub tylko te, które są nowe od ostatniego wyszukiwania.

jaskółka oknówka
źródło
Może możesz zmodyfikować bashpodder.shell? ( lincgeek.org/bashpodder )
Johan
Czy na pewno używasz rsstailpoprawnie? Na stronie podręcznika podano, że domyślny odstęp czasu sprawdzania nowych kanałów wynosi 15 minut i można go zmienić za pomocą -iparametru. (Pamiętaj, że dzięki projektowi RSS nigdy nie otrzymasz od razu informacji o aktualizacji, musisz sondować.)
rozcietrzewiacz
1
o tak. rsstail -i 3 -u example.com/rss.xml -n 0 to jest to. Wielkie dzięki!
martin

Odpowiedzi:

10

Możesz spróbować użyć Newsbeuter, który ma opcję uruchomienia zewnętrznego polecenia (patrz notify-program dokumentacja ).

Canto ma również pewne konfigurowalne zaczepy , choć na pierwszy rzut oka cały system konfiguracji wygląda na nieco bardziej skomplikowany.

Za pomocą rsstail+ shell możesz także wywoływać zewnętrzne polecenia. Zacznij od tego, co już wymyśliłeś:

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

i potokuj wyjście do while readpętli:

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

Takie jest rozwiązanie:

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

więc za każdym razem, gdy w kanale pojawi się nowy temat, dźwięk będzie odtwarzany. gra jest zapakowana w sox

jaskółka oknówka
źródło
Rozumiem, że to rozwiązuje problem odświeżania, ale nie jest (jeszcze) sposobem odtwarzania dźwięku (główna część, o którą prosiłeś). Jeśli to rozwiązałeś, proszę napisz jak.
rozcietrzewiacz
masz rację. właśnie aktualizuję ...
martin
1

Możesz spróbować:

#!/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
źródło