Tuesday, March 14, 2017

voice reading RSS feeds with Python

Here is a small Python script that can read arbitrary RSS feed and later read it to you by voice. As an example I have RSS feeds from two websites: yandex.ru and news.ycombinator.com loaded in Russian and English language respectively.
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from time import gmtime, strftime
import locale
import feedparser
from gtts import gTTS
from time import sleep
import os
import pyglet
pyglet.lib.load_library('avbin')
pyglet.have_avbin=True
def read_text(text):
tts = gTTS(text=text, lang='ru')
filename = 'tmp_32654269357_temp.mp3'
tts.save(filename)
music = pyglet.media.load(filename, streaming=False)
music.play()
sleep(music.duration)
os.remove(filename)
def run_intro():
intro_time = strftime("%A, %d %b %H:%M", gmtime())
intro_text = 'Привет, я ридер RSS. Сейчас'
read_text(intro_text)
read_text(intro_time)
class Reader(object):
'class for reading RSS-feeds'
def __init__(self, rss_path, title, lang='ru'):
self.lang = lang
self.rss_path = rss_path
self.title = title
#print self.__dict__
def get_feed(self):
d = feedparser.parse(self.rss_path)
return d['entries']
def read(self, itemsLength=5):
self.read_text(self.title)
sleep(2)
f = self.get_feed()
for i, item in enumerate(f):
if (i <= itemsLength):
real_number = (i+1)
str = '%s - %s' % (real_number, item['title'])
print str
self.read_text('%s -' % real_number)
sleep(0.3)
self.read_text(item['title'])
sleep(1)
def read_text(self, text):
tts = gTTS(text=text, lang=self.lang)
filename = 'tmp_32654269357_temp.mp3'
tts.save(filename)
music = pyglet.media.load(filename, streaming=False)
music.play()
sleep(music.duration)
os.remove(filename)
# ///////////////////////////////
locale.setlocale(locale.LC_TIME, 'ru_RU')
#run_intro()
#sleep(2)
yn = Reader('https://news.yandex.ru/index.rss', 'Новости топа Яндекс')
yn.read(10)
sleep(2)
hn = Reader('https://news.ycombinator.com/rss', 'Hackernews top', 'en')
hn.read(20)
It has following dependencies: gTTS (google text to speach module, core function) also pyglet and feedparser.

1 comment: