TwitterをSoftalkのゆっくりボイスでしゃべらせる | クレコ
では、python-twitterというライブラリを使っていたわけですが、そもそもタイムライン、メンションを読むだけなら、そこまで高機能なのはいらない!それに、導入するのが面倒!ってわけで、簡単お気軽に導入できるようにしてみた。
ソース
# -*- coding: utf-8 -*-
import feedparser, os, nkf, re, time
# config
userName = "USERNAME"
passWord = "PASSWORD"
softalkPath = "C:\softalk\softalk.exe"
softalkSpeed = "120"
lastSinceId = 1
lastGetTime = 0
# convert string
def convertString(string):
# remove HTML entity
string = re.sub('&.+;', ' ', string)
# remove URL
string = re.sub('(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)', u'ウェブ', string)
# remove quote
string = re.sub('"', ' ', string)
string = re.sub("'", ' ', string)
string = re.sub('\/', ' ', string)
# remove my username
string = re.sub('@' + userName , u'あなた', string)
# convert unicode to sjis using nkf module
string = nkf.nkf("-sX", string.encode("utf8"))
return string
# get twitter timeline
def getTimeline():
global lastSinceId
rss = feedparser.parse('https://' + userName + ':' + passWord + '@twitter.com/statuses/mentions.rss?since_id=' + str(lastSinceId) )
# rss = feedparser.parse('https://' + userName + ':' + passWord + '@twitter.com/statuses/friends_timeline.rss?since_id=' + str(lastSinceId) )
if len(rss.entries) > 0:
lastSinceId = re.search('\d+$', rss.entries[0].guid).group()
reversed(rss.entries)
for i in rss.entries[::-1]:
print "%s" % (convertString(i.title))
os.system('"' + softalkPath + '" /V:60 /S:'+softalkSpeed+' /T:3 /W:' + convertString(i.title))
while True:
# time span of get timeline
if time.time() > lastGetTime + 60:
lastGetTime = time.time()
getTimeline()
else:
time.sleep(5)解説
導入するもの
- Python実行環境
- feedparser
- nkf
- SofTalk ver0151(複数起動ができるバージョン)
やっていること
今回は、feedparser使ってRSSで取得をしています。since_idで最新のものだけを取得しますが、20件以上あった場合のページ処理はしていませんので注意!20件以上あると読み上げが追いつかなくなりそうですけど。
あとは取得した本文をフィルタかけて読み上げるだけ。前はURLとかも全部読ませていたけど、URLなんて読み上げられたところでどうしようもないので、省略して「ウェブ」とだけ読み上げるようにしました。
これも、適当にカスタマイズして使ってもらえればうれしいです。ではでは!

