フォロー中のTwitter最新記事をしゃべらす

#はじめに
●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)

``` javascript
    #下記の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で改行のあるテキストでも問題なし    
●３分周期で処理しているので、連続投稿があると処理が抜けます(2021/11/19対応済み)

# 参考
[speak.shについて](https://my-scribble.net/raspberrypi%E3%81%A7%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%9B%E3%83%BC%E3%83%A0-%E3%80%9Casterisk%E3%81%A7%E5%AE%B6%E5%BA%AD%E5%86%85%E9%9B%BB%E8%A9%B1-%E3%81%9D%E3%81%AE2-%E8%87%AA%E5%8B%95/)
[フォロー中のTwitter最新記事をしゃべらす(その２)](https://qiita.com/kobbeko/items/3104c6f2417b9057dc88)