Jump to content

mrrix32

Members
  • Posts

    2
  • Joined

Posts posted by mrrix32

  1. fbcmd is a command line interface for Facebook (Probably deserves a segment!). Yesterday I saw the HakTip about Festival, a free TTS engine for Linux. I knew the two needed to be combined, so I made a bash script that reads out the latest post from your Facebook stream!

    (Skip to the bottom for the completed script)

    You Will Need:

    Festival

    fbcmd

    Getting Festival

    $ sudo apt-get install festival

    Getting FBCMD

    Follow the instructions here http://fbcmd.dtompkins.com/installation

    How I started (aka the one line version)

    fbcmd stream 0 1 | grep -v [#] | cut -d "]" -f 2- | festival --tts --pipe

    fbcmd stream 0 1

    "fbcmd stream" gives you the latest 10 updates from your stream. The first argument is the "importance" level of the updates to be output, 0 means show all. The second argument is the number of updates to show.

    It also outputs a header row with column labels, we don't need this so....

    grep -v [#]

    grep -v outputs everything except lines that contain the argument. In this case "[#]". If you look at the usual output of "fbcmd stream" it is a numbered list with a header row, the header row contains [#], which is unlikely to appear in anyone's status.

    cut -d "]" -f 2-

    In this case, cut is being used to take off the first few characters of the output (The numbering column). I don't think this is strictly the way cut is meant to be used, if anyone has a better way, let me know!

    festival --tts --pipe

    Uses TTS to read out everything that is piped into it!

    But I've already heard that update! (aka. the long version)

    After I got all this working, I thought it would be better to only read out the update if it hadn't been read before (So it could be used on a timer, to give updates once a minute for example, but only if there is a new one)

    #!/bin/bash
    # Gets latest update from Facebook stream
    echo `fbcmd stream 0 1 | grep -v [#]` >> .facebook1
    
    # Check to see if script has been run before
    if [ -a .facebook2 ]	
    	then
    # If it has it checks to see if this status is different	
    	FILE1=`cat .facebook1`	
    	FILE2=`cat .facebook2`	
    	if [ "$FILE1" == "$FILE2" ]	
         then	
         festival --tts .facebook1
    	fi
    else	
    	festival --tts .facebook1
    fi
    # Moves status to a secondary file to be checked next time
    mv .facebook1 .facebook2
    

    Ending stuff

    I'm not very advanced at bash script writing, so creative criticism is welcomed!

    Have a look at what you can do with fbcmd, the script could easily be modified to read out notifications etc instead.

×
×
  • Create New...