【Twitter API】自己リツイートの自動化でフォロワー増【Python】
ツイッターでのつぶやきは1ヶ月もすると誰も覚えていないし思い出してもくれません。
せっかくつぶやいた「有益な情報」が埋もれてしまうのは勿体ない
その有益情報ってどこ?見当たらないよ?
しかも、有益な情報をつぶやくことはフォロワー増には欠かせません。
今回はTwitter APIを使って、過去の自分のつぶやきを定期的にリツイート(RT)させてみましょう。
以前の2つの記事も参照してもらえればと思います。
【Twitter API】Twitterの予約投稿を作る【Python】 | enjoyall
【Twitter API】Twitter 情報取得・返信・リツイート【Python】 | enjoyall
自分のRT(リツイート)候補を探す
まずは、リツイート対象となる「自分の有益なツイート」を探してみましょう。 最初のTwitter API利用の認証部分は同じなのでここに載せておきます。詳しくは以前の記事を参照して下さい。
Tweepy利用の固定部分
import tweepy
# ここに取得したキーを書く
CONSUMER_KEY = 'xxxxxxxxxxx'
CONSUMER_TOKEN = 'xxxxxxxxxxx'
ACCESS_KEY = 'xxxxxxxxxxxx'
ACCESS_TOKEN = 'xxxxxxxxxx'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_TOKEN)
auth.set_access_token(ACCESS_KEY, ACCESS_TOKEN)
api = tweepy.API(auth)
# ここからAPIを使った好きな処理を書く
自分のオリジナルツイート取得
自分のオリジナルツイート(RTやメンションを除く)をリストアップします。
# ここからAPIを使った好きな処理を書く
for res in tweepy.Cursor(api.user_timeline, id="<あなたのID>").items():
print("\n===={},id:{} {}\n {}".format(res.created_at,res.id,res.author.name,res.text), flush=True) if not re.match('^@.*|^RT @.*',res.text) else next
$ python3 xxxxxxx.py > my_tweet.txt
結果ファイルの加工
結果ファイルから自己リツイート候補の「メッセージID」と「日付け」をjson形式にします。(手作業。。。)
jsonファイル:
[
{ "date" : "2020-04-01 04:15:40" , "id" : "1234567890123413760"},
{ "date" : "2020-03-25 10:41:17" , "id" : "1234567890123457888"},
{ "date" : "2020-03-23 08:04:00" , "id" : "1234567890123449474"},
{ "date" : "2020-03-23 05:01:59" , "id" : "1234567890123401088"},
{ "date" : "2020-03-21 11:40:02" , "id" : "1234567890123459077"},
:
]
自動リツイートスクリプトとcron設定
自動リツイートスクリプトは以下のような流れです。
- リツイート候補のjsonファイルを読み込み
- 「一番古いもの」をリツイート
- 以前リツイートしたことがある場合は前のリツイートを削除
- リツイートしたツイート部分をリツイート日に書き換えてjson保存
このスクリプトをcronで定期的に動かします。
スクリプト起動のたびにjsonを読み込むので新しいリツイート候補の追加なども簡単にできます。
リツイートスクリプト
import tweepy
import json
from datetime import datetime
MYDATEFORMAT = "%Y-%m-%d %H:%M:%S"
def __from_json(dct):
for k, v in dct.items():
if(k=="date"):
dct[k] = datetime.strptime(v, MYDATEFORMAT )
return dct
def __to_json(x):
if isinstance(x, datetime):
return x.strftime(MYDATEFORMAT)
return x
with open("<rt候補jsonファイル>", 'r') as f:
rt_candidates = json.load(f, object_hook=__from_json)
rt_candidate = sorted(rt_candidates, key=lambda x: x['date'], reverse=False)[0]
print(rt_candidate)
if 'rt_id' in rt_candidate:
api.destroy_status(rt_candidate['rt_id'])
rt_id = api.retweet(rt_candidate["id"]).id
rt_candidate['date'] = datetime.now()
rt_candidate['rt_id'] = rt_id
with open("<rt候補jsonファイル>", 'w') as f:
json.dump(rt_candidates,f,indent=4,default=__to_json)
jsonでdatetimeを扱うために"object_hook"と"default"を利用しています。(ここの解説記事を作ったほうが良いかも。。)
一度RTしたツイートを再度RTすることができないのでRTしたときのIDを記録して、リツイート時に一旦まえのリツイートを消す処理を入れています。
cron設定
cron.confというファイルを作って読み込ませる方法で設定します。
cron.conf:
2 18 * * * python3 xxxxx.py
このファイルを
crontab cron.conf
crontab -l # 確認
crontab -r # 削除
自己リツイートはフォロワー数アップに貢献するか?
何日間か運用してみてフォロワー数増加具合を見てみようと思います。
まずはフォローしたくなるツイートしようね!