1
1

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 3 years have passed since last update.

[Python] Tweepyモジュールで、Tweeterのツイートを自動でretweetするBOTを超簡単に作成する方法

Last updated at Posted at 2021-09-18

Tweeterで、自動リツイートするBOTを作る方法です。
(今後、徐々に肉付けしていきます。多分。。。とりあえず、R1と言う事で。)
皆様のお役に立てると嬉しいです!

<はじめに>
自分はPython使いなので、コードに関して詳しく説明しようと思ったのですが、書いている途中で、「pythonのコードを全く知らない人」でも、見よう見まねでBOTが作れる様な記事にしようと思い直し、大幅に書き直しました。
プログラムの事を知らなくても、PCヘビーユーザー以上なら設定可能と思います。
(勿論、Python学習者に人にも少しは役に立つと願いたいです。)

<全体のイメージ/状況>
私自身は、TweeterではアカウントAとBを保有しております。
Aの方が本アカウントで、現在、フォローワー1万人を目指し、活動中です。(笑)
そこで、Bの方をBOTアカウントとして、本アカのツイートをひたすらリツイートさせようと思っております。(Bは、サブアカウントです。)
イメージとしては、こんな感じです。
全体イメージ.jpg

<必要な設定>
1.まず、自分のPCにPythonをインストールして、環境設定しましょう!
Pythonと言うか、プログラミングをやった事がない人には、ここが最大の難関だと思いますが、ここを乗り越えましょう。
このProgateのサイトが、非常に丁寧です。
https://prog-8.com/docs/python-env-win

2.Twitter APIを利用しよう!(Twitter Developerを利用しよう。)
TwitterのAPIを利用して、外部プログラムから、Twitterを操作する必要があります。
外部プログラムから、Twitterを操作する為には、Twitter Developerにユーザー登録した上で、ログインして、下記を入手しないといけません。
1)Consumer Key
2)Consumer Secret Key
3)Access Token
4)Access Token secret
ここの手順は、下記サイトに詳細されております。
http://mojitoba.com/2018/10/19/lets_start_twitter_api/

3.Pythonのコードを、自分のWindows PCで走らせましょう。
コードは下記サイトに書いてある通りですが、一部、ミスを発見したので、下記に改訂コードを載せますね。
http://mojitoba.com/2018/11/06/automate_retweet_with_python/

改訂した部分は下記。(全体コードの中段です。下記コードがあります。)

1)
上記のサイトにはこういうコードがあります。

.py
# リツイートしたいIDのリスト
tweetIds = [1059129340602941440,
            1055873349899800576,
            1052058774796558336,
            1053223930591240192,
            1054020815421767681]

# リツイートしたいIDのリスト
tweetIds = [line.strip() for line in open('../data/retweetList.txt',encoding='utf-8')]

tweetIdsの定義ですが、「上の記載」or 「下の記載」と言う意味の筈です。
両方書くと、多分動かない筈。。。
私は、下の記載を取ったので、上の記載を消しました。
また、'../data/retweetList.txt' の部分は、勿論、これでも良いけど、単純に
retweetList.txtとしました。(そっちの方が分かり易いですよね?)
これなら、同じフォルダーに置けばよいです。
つまり、こうしました。

# リツイートしたいIDのリスト
tweetIds = [line.strip() for line in open('retweetList.txt',encoding='utf-8')]

全体コードの上部に下記の関数(def)が定義されております。

def retweet(tweetId):
    url = "https://api.twitter.com/1.1/statuses/retweet/%d.json"%tweetId
    res = twitter.post(url) # retweet実行
    return res

def unretweet(tweetId):
    url = "https://api.twitter.com/1.1/statuses/unretweet/%d.json"%tweetId
    res = twitter.post(url) # unretweet実行
    return res

ただ、この定義では、”TypeError: %d format: a number is required, not str”と言うエラーが、環境によっては出ます。
プレースホルダ―と言う概念になるのですが、エラーを起こさない為には、"%d"ではなく、"%s"にする必要があります。
つまり、こうです。

def retweet(tweetId):
    url = "https://api.twitter.com/1.1/statuses/retweet/%s.json"%tweetId
    res = twitter.post(url) # retweet実行
    return res

def unretweet(tweetId):
    url = "https://api.twitter.com/1.1/statuses/unretweet/%s.json"%tweetId
    res = twitter.post(url) # unretweet実行
    return res

プレースホルダ―に興味のある人は、こちらが良いと思います。
→ https://create.anigameinfo.com/2019/10/16/post-1911/

との事なので、修正後の最終コードは下記です。

import tweepy
import time
from requests_oauthlib import OAuth1Session

CK = "Your Consumer Key"
CS = "Your Consumer Secret Key"
AT = "Your Access Token"
ATS = "Your Access Token secret"
twitter = OAuth1Session(CK, CS, AT, ATS)

def retweet(tweetId):
    url = "https://api.twitter.com/1.1/statuses/retweet/%s.json"%tweetId
    res = twitter.post(url) # retweet実行
    return res

def unretweet(tweetId):
    url = "https://api.twitter.com/1.1/statuses/unretweet/%s.json"%tweetId
    res = twitter.post(url) # unretweet実行
    return res

# リツイートしたいIDのリスト
#tweetIds = [line.strip() for line in open('retweetList.txt',encoding='utf-8')]

# リツイート履歴を保存する準備
retHist = {}

from time import time
def retweetProcess():
    ### 最後にリツイートした時間が最も遠いものを選ぶ ###
    # IDと時刻のペアをリスト化
    idTimes = [(tid,retHist[tid] if tid in retHist else 0) for tid in tweetIds]

    # 最後にリツイートした時刻でソート
    idTimes = [idt for idt in sorted(idTimes, key=lambda x:x[1])]

    # 最後にリツイートした時刻が最も古いツイートを選択
    tweetId = idTimes[0][0]

    # 一度解除してからretweet
    resUnrt = unretweet(tweetId)
    resRt = retweet(tweetId)
    
    # 処理内容を表示
    print(tweetId, resUnrt, resRt)

    # 現在の時刻で辞書の値を更新
    retHist[tweetId] = time()

from time import sleep
while True:
    sleep(60*15)  # これは15分毎にリツイートです。
    retweetProcess()

最後に、retweetList.txtですが、こんな感じでひたすら、Twitter IDを上から並べましょう!

リスト1.jpg

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?