Send updates to live cycling news reports to the speech synth

The BBC coverage of the UCI Women Road Race World Championship wasn’t starting until 3pm, BBC Radio 5 Live had football and Sports Extra was playing an advert loop (really BBC?), Eurosport wasn’t covering the race at all, RAI Sport 2 had coverage which was fine while I was watching the TV, but my Italian isn’t good enough to follow the commentary and I wanted to get some other stuff done.

So the obvious thing is to have the computer watch for changes to the great http://live.cyclingnews.com/ ticker and read them out, right? Well, it was to me. Here’s the script I used:

#!/usr/bin/rc
# Send updates to live cycling news reports to the speech synth

# initialise
url=http://live.cyclingnews.com/
if (~ $1 *:*) {
  url=$1
}
last=""

while (true) {
    # download the update and strip html - if you don't have html2text try
    # sed -e '1,/<ol/d;s/<br[^>]*>/n/g;s/<[^>]*>//g;s/ / /g;s/[[:space:]]*$//'
    next=``(){curl -s $url | html2text -width 9999 | sed -e 's/^ *[0-9]*. //' }
    # look for some added lines in the update section - timezone will need changing for non-European races
    say=``(){diff -u <{echo $last} <{echo $next} 
      | sed -ne '/^+/!d;s///;s/**//g;/ CES*T/,/^ *$/p' | head -9 }
    # feed them to the speech synth in reverse order
    echo $say '
      Race Update' | tac | spd-say -e
    # update variables, pause and loop
    last=$next
    # set this to a prime number over 60, like 61, 67, 71, 73, 79, 83, 89
    sleep 67
}

Any questions, comments or improvements? I could have done more, like not saying “Race Update” even when there was no update, but I wanted to start listening as soon as possible!

This entry was posted in GNU/Linux. Bookmark the permalink.