#目標
こちらが指定した人が英語でツイートをした時、すぐに本文をGoogle翻訳で日本語に翻訳して自分のアカウントでツイートする。
#動機
あるスポーツの最新情報をTwitterで発信しているジャーナリストの方がいる。日本を含む世界中で注目度の高い方だが、ツイートは英語。日本人がもっとパッと読みやすい形でタイムラインに流れてくればいいのに、という思いから。
#必要な準備
###TwitterAPIの取得
Twitterにログインして以下のURLからAPIを取得する。必要なのは「APIキー」「APIシークレットキー」「アクセストークン」「アクセスシークレットトークン」の4つ。
https://developer.twitter.com/en/apps/
###Google翻訳のライブラリのインストール
pipコマンドを以下のように使う。「pip install googletrans」だとバージョンが古く、翻訳の部分でエラーが起きるので注意。
###tweepy
無ければtweepyもインストールしておく。
#インポート
まずTwitterに関するライブラリ
次にAPI認証の際に使うライブラリ
時間に関するもの
最後に翻訳に使うもの
#APIの認証
取得したキーとトークンを入れる
API_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_TOKEN_SECRET = ''
認証
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
#ツイートに必要な関数の定義
ネット上の他の方のものを参考にしました。「translated」が翻訳した文章の入ったリストで、頭に*をつけることでカッコなど不要なものが外れる。
def main():
makeAPI().update_status(*translated)
def makeAPI():
return tweepy.API(auth)
#検知の仕組みと事前準備
検知には各ツイートに振られるIDを使う。つまり、1番上のツイートのIDが変わったら「更新された」と考える仕組み。そのためにまず準備として現在の1番上のツイートのIDを知っておく必要がある。
最新のツイートのIDを持ってくる
id_form = state[0].id
#実行
while True:
state = api.user_timeline(screen_name="相手のツイッターのID(@は不要)")
if state:
id_now = state[0].id
if id_now != id_form:
new_text = state[0].text
translator = Translator()
translated = [translator.translate(new_text ,dest="ja").text] #翻訳
if __name__ == "__main__":
main() #ツイートする
id_form = id_now #新しいidを設定
else:
continue
time.sleep(60)
「while True」 で無限ループ
「if state」でstateに中身があるか確認。たまに空のリストになっている(バグ?)
「dest="ja"」は翻訳先が日本語になるような設定
更新時間は60秒で設定したが、1秒でも回る。
#完成
目的の人が半日経ってもツイートしないので、しびれを切らして別の公式アカウントでテスト。うまくいったものの日本語訳が微妙なため、見やすさの観点では当初の理想は叶わず。