リプライのお話

リプライはPythonのtweepyというモジュールを使えば簡単に実装できます。

APIの各種KeyをTwitter developerで取得したのちPythonでこのように書いてAPIを取得します。

import tweepy

consumer_key = "取得したkeyを入れてください"
consumer_secret = "取得したkeyを入れてください"
access_token = "取得したkeyを入れてください"
access_token_secret = "取得したkeyを入れてください"

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

その後

status = api.mentions_timeline(count = 好きな数)

と書いてリプライを (好きな数) 取得し、

for mention in status:
    reply_text = "@"+str(mention.user.screen_name)+" "+"ツイートしたい内容"
    api.update_status(status = reply_text, in_reply_to_status_id = mention.id)

とやればリプライができます。試しにこのコードを2回ほど回してみると

画像1

はい、このように二重でリプライが送られてしまいます。



二重リプライを避けるために


今回の本題です。私もこれに悩まされていました。ここでは二重リプライを避ける為の2つのやり方を紹介します。


① 一度送ったツイートIDをリスト化する

一度リプライを送ったツイートIDリストを別ファイル等に保存し、それを参照する方法です。これにより一度送ったツイートであるか否かを分けることが可能です。この方法のメリットは返しもれが起きないことです。ただリストに保存し続けるとリストが大きくなり過ぎてしまうので、上手く消す方法が必要です。


② 時間で制限を設ける

私のやり方はこっちです。10分以内来たリプライを10分ごとに返すことによって、二重リプライを避けています。まず、

mentionTime = mention.created_at.timestamp()

でツイートされた時間を取得し、

import time

nowTime = time.time()

で現在時間を取得します。そしてnowTime - mentionTime が10分以内ならリプライを返すようにすれば良いです。コード的にはこんな感じです。

 if nowTime - mentionTime < 33000.0:
    reply_text = "@"+str(mention.user.screen_name)+" "+"ツイートしたい内容"
    api.update_status(status = reply_text, in_reply_to_status_id = mention.id)

ここで33000.0と書いたのは、実は取得したmentionTimeが本初子午線の時刻で取得されており、9時間(32400秒)遅れております。その為、この32400秒に10分(600秒)を足して33000秒となります。あとはこれを10分ごとに回せば二重リプライを避けることができます。



最後まで読んでいただきありがとうございました。