3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-10-04

#はじめに
●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をフォローする
    #特務機関NERVUN_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対応済み)

参考

speak.shについて
フォロー中のTwitter最新記事をしゃべらす(その2)

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?