Как посмотреть 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

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.