Comment regarder le flux rss pour les nouvelles entrées du script bash?


10

J'ai besoin de regarder un flux RSS de notre serveur hudson ci. Chaque fois qu'une nouvelle entrée est disponible, je veux jouer un son en appelant #>play sound.wav.

Est-ce que quelqu'un connaît un outil qui peut regarder un flux rss et lancer une commande chaque fois qu'une nouvelle entrée apparaît?

J'ai jeté un coup d'œil rsstailmais il obtient toutes les entrées du flux et pas les dernières ou seulement celles qui sont nouvelles depuis la dernière recherche.


Vous pouvez peut-être modifier bashpodder.shell? ( lincgeek.org/bashpodder )
Johan

Êtes-vous sûr que vous utilisez rsstailcorrectement? Sa page de manuel indique que l'intervalle par défaut de vérification des nouveaux flux est de 15 minutes et il peut être modifié par le -iparamètre. (N'oubliez pas que par conception RSS, vous n'obtiendrez jamais les informations de mise à jour instantanément, vous devez interroger.)
rozcietrzewiacz

1
l'enfer ouais. rsstail -i 3 -u example.com/rss.xml -n 0 c'est tout. Merci beaucoup!
martin

Réponses:


10

Vous pouvez essayer d'utiliser Newsbeuter qui a une option pour exécuter une commande externe (voir notify-program dans la documentation ).

Canto possède également des crochets personnalisables, bien que l'ensemble du système de configuration semble un peu plus compliqué à première vue.

Avec rsstail+ shell, vous pouvez également appeler des commandes externes. Commencez avec ce que vous avez déjà compris:

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

et diriger la sortie vers une while readboucle:

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

4

C'est la solution:

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

Ainsi, chaque fois qu'un nouveau sujet est publié dans le fil, le son est lu. le jeu est emballé dans sox


Je comprends que cela résout la partie rafraîchissante, mais ce n'est pas (encore) un moyen de jouer du son (la partie principale que vous avez demandée). Si vous l'avez également résolu, veuillez écrire comment.
rozcietrzewiacz

tu as raison. juste mise à jour ...
martin

1

Tu pourrais essayer:

#!/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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.