Como assistir rss feed para novas entradas do script bash?

10

Preciso assistir a um feed RSS do nosso servidor hudson ci. Cada vez que uma nova entrada está disponível, eu quero tocar um som ligando #>play sound.wav.

Alguém conhece uma ferramenta que pode assistir a um feed RSS e disparar um comando cada vez que uma nova entrada aparece?

Eu dei uma olhada, rsstailmas ele obtém todas as entradas do feed e não as mais recentes ou apenas as que são novas desde a última pesquisa.

Martin
fonte
Talvez você possa modificar o bashpodder.shell? ( Lincgeek.org/bashpodder )
Johan
Tem certeza de que está usando rsstailcorretamente? Sua página de manual diz que o intervalo padrão de verificação de novos feeds é de 15 minutos e pode ser alterado pelo -iparâmetro. (Lembre-se que por design RSS, você nunca vai conseguir as informações de atualização imediatamente, você tem que poll.)
rozcietrzewiacz
1
Isso aí. rsstail -i 3 -u example.com/rss.xml -n 0 é isso. Muito obrigado!
martin

Respostas:

10

Você pode tentar usar o Newsbeuter, que tem uma opção para executar um comando externo (consulte notify-program a documentação ).

O Canto também possui alguns ganchos personalizáveis, embora todo o sistema de configuração pareça um pouco mais complicado à primeira vista.

Com rsstail+ shell, você também pode chamar comandos externos. Comece com o que você já descobriu:

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

e canalize a saída para um while readloop:

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

Essa é a solução:

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

portanto, toda vez que um novo tópico for lançado no feed, o som será reproduzido. jogo é empacotado em sox

Martin
fonte
Entendo que isso resolve a parte da atualização, mas ainda não é uma maneira de reproduzir som (a parte principal solicitada). Se você também resolveu, por favor, escreva como.
rozcietrzewiacz
você está certo. apenas atualizando ...
martin
1

Você poderia tentar:

#!/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
fonte