Как посмотреть RSS-канал для новых записей из скрипта Bash?

10

Мне нужно смотреть RSS-канал с нашего сервера Hudson. Каждый раз, когда появляется новая запись, я хочу воспроизвести звук, позвонив #>play sound.wav.

Кто-нибудь знает инструмент, который может смотреть rss-ленту и запускать команду каждый раз, когда появляется новая запись?

Я посмотрел, rsstailно он получает все записи из ленты, а не последние или только те, которые являются новыми с момента последнего поиска.

Мартин
источник
Может быть, вы можете изменить bashpodder.shell? ( lincgeek.org/bashpodder )
Йохан,
Вы уверены, что используете rsstailправильно? На его странице сказано, что интервал проверки новых каналов по умолчанию составляет 15 минут, и его можно изменить с помощью -iпараметра. (Помните, что благодаря дизайну RSS вы никогда не получите информацию об обновлениях мгновенно, вам придется опросить.)
rozcietrzewiacz
1
черт возьми да rsstail -i 3 -u example.com/rss.xml -n 0 вот и все. Большое спасибо!
Мартин

Ответы:

10

Вы можете попробовать использовать Newsbeuter, у которого есть опция для запуска внешней команды (см. notify-program Документацию ).

Canto также имеет несколько настраиваемых хуков , хотя на первый взгляд вся система конфигурации выглядит немного сложнее.

С rsstail+ shell вы также можете вызывать внешние команды. Начните с того, что вы уже поняли:

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

и направить вывод в while readцикл:

rsstail -i 3 -u example.com/rss.xml -n 0 | while read line
  do
    aplay /some/sound/file.wav
    echo "$line"
  done
rozcietrzewiacz
источник
4

Вот решение:

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

поэтому каждый раз, когда в ленте появляется новая тема, будет воспроизводиться звук. игра упакована в сокс

Мартин
источник
Я понимаю, что это решает часть, касающуюся обновления, но не является (пока) способом воспроизведения звука (основная часть, которую вы просили). Если вы тоже решили, напишите как.
rozcietrzewiacz
твое право. просто обновление ...
Мартин
1

Вы можете попробовать:

#!/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
источник