#はじめに
●IFTTTとfirebaseを使用して、ツイートをしゃべらしていたのですが、Twitterでテキストに改行があるとIFTTTでエラーになるので、Twitter APIを使用してしゃべらすようにしました。
【変更1】2021/11/19 連続投稿に対応するようにしました。
【変更2】2022/11/10 pushbulletでスマフォに通知するようにしました。
ただし、継続的に使用するにはPushbullet Proの契約が必要です。
#環境
●Windows10 HOMEのPCにWSLのubuntuをインストールして使用してます。
●ubuntuでpython,tweepyなどをインストールする
●WSLのubuntuでpulseaudioでPCのスピーカを使うようにする
●Windows側でpulseaudioサーバのインストールが必要です
https://www.cendio.com/thinlinc/download の 「Client Bundle」のリンクからダウンロードできます
●音声出力はGoogle Translate Text to Speechを使用しています。
#プログラム(python)
#下記のTwitteをフォローする
#特務機関NERV:UN_NERV
#気象庁防災:JMA_bousai
#官邸災害:Kantei_Saigai
#tenki地震情報:tenki_jishin
#地震速報:eew_jp
import tweepy
import datetime
import time
import subprocess
from pushbullet import Pushbullet #【変更2】
#しゃべる対象のユーザ名
chkuser = ['UN_NERV','JMA_bousai','Kantei_Saigai','tenkijp_jishin','eew_jp','honkeasari_eew']
#しゃべらない文字列
chksay = ['諏訪之瀬島','最大震度1','士別','宗谷','紋別','上川','留萌','NHKニュース速報','中の人','RT @']
#python で Twitter APIを使用するためのConsumerキー、アクセストークン設定
Consumer_key = 'XXXXXXXXXXXXXXXXXXXXXXX'
Consumer_secret = 'XXXXXXXXXXXXXXXXXXXXXXX'
Access_token = 'XXXXXXXXXXXXXXXXXXXXXXX'
Access_secret = 'XXXXXXXXXXXXXXXXXXXXXXX'
#認証
auth = tweepy.OAuthHandler(Consumer_key, Consumer_secret)
auth.set_access_token(Access_token, Access_secret)
api = tweepy.API(auth)
tweetold = ["","","","","","","","","",""]
i = 0
while True:
public_tweets = api.home_timeline()
tweet = public_tweets #最新のタイムラインを取得
kk = 9
for j in range(10):
k = 0
for j in range(10):
if tweet[kk] != tweetold[k]: #同じ内容でないか古い記事からチェック
samechk = 1
tweet1 = tweet[kk]
k += 1
else:
samechk = 0
break
print(samechk,kk,tweet[kk].text)
kk -= 1
if samechk == 1 and i != 0: #同じ内容ではない/初回起動時はしゃべらない
say = tweet1.text;
#しゃべる対象のユーザかチェック
syori =0
for w in chkuser:
if w == tweet1.user.screen_name:
syori = 1
#しゃべらない文字列かチェック
syori2 =1
for w in chksay:
if w in say:
syori2 = 0
#テキストを整形する
say = say.replace('\n',' ') #文字列の置換(改行を全角空白)
say = say.replace(' ',' ') #文字列の置換(半角空白を全角空白)
say = say.split('#NHK')[0] #文字列(#NHK)以降を削除
say = say.split('https')[0] #文字列(https)以降を削除
say = say.split('#いのち')[0] #文字列(#いのち)以降を削除
say = say.split('龍ケ崎の予想震度')[0] #文字列(#いのち)以降を削除
say = say.replace('RT @JMA_kishou:','') #文字列の置換)
dt = datetime.datetime.now()
print(say)
if i == 0:
tweet2 = public_tweets[1]
if syori == 0 or syori2 ==0 : #無処理か?
print("無処理")
else:
apikey = "XXXXXXXXXXXXXXXXXXXXXXXXX" #【変更2】
pb = Pushbullet(apikey) #【変更2】
push = pb.push_note("緊急通知", say) #【変更2】
#Twitterのテキストをしゃべる
cmd = "/home/XXXXXX/speak.sh" + ' ' + say;
subprocess.run(cmd, shell=True)
tweetold = tweet #前回のデータを保存
i=999
time.sleep(180) #3分周期で処理
#speak.sh
sudo perl googletts-cli.pl -l ja -s 1.3 -t $1
まとめ
●Twitterで改行のあるテキストでも問題なし
●3分周期で処理しているので、連続投稿があると処理が抜けます(2021/11/19対応済み)