TaillookTech

フルスタックエンジニアになる

MacのsayコマンドとPythonでツイート読み上げスクリプト書いた

経緯

知り合いのオタクがVOCALOID?のゆかり?にツイート読み上げさせてたのでやってみたかった.

実装

ツイッターのストリーミングAPIを使って取得したツイートの内容をPyhtonのsubprocessモジュールでbashのsayコマンドで読み上げさせる.
sayコマンドはOS X独自のコマンドでLinuxとかではGoogleとかの読み上げ機能を使うといいみたい.
sayコマンドで使える音声は色々あってデフォルトではKyokoという女の声.

ha1f-blog.blogspot.jp
ツイッターのストリーミングはこのページのコードを参考にしました.
qiita.com
sayコマンドの使い方はここを参考にしました,

動作

こんな感じの出力が出てKyokoさんが喋ってくれる.
f:id:taillook:20170304185116p:plain

コード

# -*- coding: utf-8 -*-
import tweepy
import subprocess
from datetime import timedelta

#CK = 'XXXXXXXXXXXXXXXXXXXXXX'                             # Consumer Key
#CS = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'         # Consumer Secret
#AT = 'XXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' # Access Token
#AS = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'         # Accesss Token Secert

class Listener(tweepy.StreamListener):
    def on_status(self, status):
        status.created_at += timedelta(hours=9)

        print('------------------------------')
        print(status.text)
        print(status.author.name + status.author.screen_name +  unicode(status.created_at) + status.source)
        subprocess.call('say ' + '"' + status.author.name + 'さんのツイート"'.decode('utf-8'), shell=True)
        subprocess.call('say ' + '"' + status.text + '"', shell=True)
        return True

    def on_error(self, status_code):
        print('Got an error with status code: ' + str(status_code))
        return True

    def on_timeout(self):
        print('Timeout...')
        return True

auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)

listener = Listener()
stream = tweepy.Stream(auth, listener)
stream.userstream()