Talking devices are the in thing at the moment with the Amazon Echo and the newer Google Home, so I thought I would try to get my raspberry pi to read out the news.
Here's what you need to do:
1, Install mplayer (audio player) on your raspberry pi
2. Setup a script to invoke Google Translates text to speech engine
3. Create a Python Script to pull the latest headlines from the BBC rss feed and then read them out
4. Add the script as a cron job to run every hour
Below is the detail behind each step
1. Install mplayer on your raspberry pi
(The below instructions are based on http://elinux.org/RPi_Text_to_Speech_(Speech_Synthesis))
a. First you will need to update Raspian (this can take up to an hour if not run in some time)
sudo apt-get update sudo apt-get upgrade
b. Add sound utilities
sudo apt-get install alsa-utils
c. Edit the follow file with the line
sudo nano /etc/modules
to have line
snd_bcm2835
d. Install mplayer
sudo apt-get install mplayer
2. Setup a script to invoke Google Translates text to speech engine
a. Create a file call speech.sh with the following content:
#!/bin/bash
say() { local IFS=+;/usr/bin/mplayer -volume 100 -ao alsa -really-quiet -noconsolecontrols "http://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&q=$*&tl=En-us"; }
say $*
b. Add execute permissions to the script
chmod u+x speech.sh
c. Test it out
./speech.sh Hello I can talk
Remember you will need speakers plugged into your raspberrypi to hear anything!
3. Create a Python Script to pull the latest headlines from the BBC rss feed and then read them out
a, Install feedparser which is a python libararyto read RSS feeds. Follow the instructions from the below link:
https://pypi.python.org/pypi/feedparser#downloads
b. Create a file getNews.py with the following content
##!/usr/bin/env python import subprocess import feedparser import time d = feedparser.parse('http://feeds.bbci.co.uk/news/rss.xml?edition=uk') introMessage = "BBC News Headlines at " + time.strftime("%H:%M") subprocess.call(["/home/pi/Documents/speech.sh", introMessage]) maxItems = 3 itemCounter = 0 for post in d.entries: print post.title subprocess.call(["/home/pi/Documents/speech.sh", post.title]) itemCounter = itemCounter + 1 if itemCounter == maxItems: break
Remember to change the location to where you saved speech.sh
Also change maxItems if you want the script to read out more than 3 headlines.
You could change the link to another news website of your choice as long as they provide a rss feed.
python getNews.py
You should hear the top 3 headlines read out
4. Add the script as a cron job to run every hour (or how every frequently you want)
a. Open crontab with:
crontab -e
b. Add the line
@hourly python /home/pi/Documents/getNews.py > /dev/null 2>&1
http://www.howtogeek.com/101288/how-to-schedule-tasks-on-linux-an-introduction-to-crontab-files/
And there you go, you now have a news reading speaking rasperberry pi. You could adapt this to read out any other type of site which uses rss feeds.
The following files can be downloaded from the links below:
getNews.py
speech.sh