Compass note

未踏の地へ踏み出すコンパス的エンジニアノート

Python&Tweepyで遊ぶ【その1】 特定のキーワードを含むツイートにいいねする方法

"Python&Tweepy【その1】 特定のキーワードを含むツイートにいいねする方法"

Twitter API を Python で扱う時に便利なのが Tweepy という Twitter API をラッピングしたライブラリです。

この Tweepy を使い特定のキーワードを含むツイートにいいねする方法を解説します。

特定のキーワードを含むツイートにいいねする Python コード

"特定のキーワードを含むツイートにいいねする Python コード"


import tweepy
import time
import random

CONSUMER_KEY="XXXXXXXXXX"
CONSUMER_SECRET="XXXXXXXXXX"
ACCESS_TOKEN="XXXXXXXXXX"
ACCESS_SECERET="XXXXXXXXXX"

# consumer 第一引数に(consumer key) 第二引数に(consumer secret) #
auth = tweepy.OAuthHandler(CONSUMER_KEY,CONSUMER_SECRET)
# ACCESS_TOKEN_KEY 第一引数に(Access token) 第二引数に(Access token secret) #
auth.set_access_token(ACCESS_TOKEN,ACCESS_SECERET)

# wait_on_rate_limit = レート制限が補充されるのを自動的に待つかどうか #
# wait_on_rate_limit_notify = Tweepyがレート制限の補充を待っているときに通知を出力するかどうか #
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)


# screen name (@name)を取得
my_name = api.me()
my_screen_name = my_name.screen_name


# 取得したいキーワード #
search_list = ['AAAAA', 'BBBBB']
# ツイート数10件 #
tweet_count = 10

#自動フォローと判定されにくいようにフォロー間隔 sleep をダンダム値とする
random_min_time = 4 #sleepでとり得る最小値
random_max_time = 15 #sleepでとり得る最大値



def main():
    for search in search_list:
        liked_count = 0 #いいねカウンター
        
        print(my_screen_name,': ','------------------------------')
        print(my_screen_name,': ','Searching... {}' .format(search))
        # サーチ結果を格納 #
        search_result = api.search(q=search, count=tweet_count)

        for tweet in search_result:
            tweet_id = tweet.id
            user_name = tweet.user._json['name']
            user_screen_name = tweet.user._json['screen_name']
            tweet_status = api.get_status(tweet_id)
            tweet_favorite_status = tweet_status.favorited

            check_status = 'False'
            tweet_favorite_status_01 = str(tweet_favorite_status)


            if tweet_favorite_status_01 == check_status:
                try:
                    api.create_favorite(id=tweet_id)   # いいねの処理
                except tweepy.TweepError as e:
                    print(e.reason)
                except StopIteration:
                    continue
                tweet_status = api.get_status(tweet_id)
                tweet_favorite_status = tweet_status.favorited
                print(my_screen_name,': ',user_name,'(',user_screen_name,")","いいねしました(STATUS =",tweet_favorite_status,")")
                liked_count += 1
                sleep_random_time = random.randint(random_min_time,random_max_time)
                print(my_screen_name,': ',' 次のいいねまで' ,sleep_random_time,'秒待ちます')
                time.sleep(sleep_random_time)
            else:
                print(my_screen_name,': ',user_name,'(',user_screen_name,')','はいいね済み(',tweet_favorite_status,')なのでスキップしました')

        print(my_screen_name,": ","search =",search,"で",liked_count,"人いいねしました。終了します。")


main()

解説 1. 事前準備|Tweepy の ACCESS TOKEN、SECRET KEY をセット

"解説 1. 事前準備|Tweepy の ACCESS TOKEN、SECRET KEY をセット"

import tweepy
import time
import datetime
import random

CONSUMER_KEY="XXXXXXXXXX"
CONSUMER_SECRET="XXXXXXXXXX"
ACCESS_TOKEN="XXXXXXXXXX"
ACCESS_SECERET="XXXXXXXXXX"


auth = tweepy.OAuthHandler(CONSUMER_KEY,CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN,ACCESS_SECERET)

api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
  • 必要なライブラリの読み込みを行います。
コード 意味
import tweepy Tweepy を読み込む
import time いいねの間隔を設定する sleep で利用する
import random sleep 間隔をランダム秒にするために利用する
コード 意味
CONSUMER_KEY="XXXXXXXXXX" 自分の CONSUMER_KEY をセット
CONSUMER_SECRET="XXXXXXXXXX" 自分のCONSUMER_SECRET をセット
ACCESS_TOKEN="XXXXXXXXXX" 自分の ACCESS_TOKEN をセット
ACCESS_SECERET="XXXXXXXXXX" 自分の ACCESS_SECERET をセット
  • Tweepy コマンド定義
コード 意味
wait_on_rate_limit レート制限が補充されるのを自動的に待つかどうか
wait_on_rate_limit_notify Tweepyがレート制限の補充を待っているときに通知を出力するかどうか

解説 3. 初期パラメータセット|Tweepy で「いいね」するための設定値

"解説 3. 初期パラメータセット|Tweepy で「いいね」するための設定値"

  • screen name (@name)を取得
my_name = api.me()
my_screen_name = my_name.screen_name
  • 取得したいキーワードをセット(AAAAAとBBBBBという2つのキーワードに「いいね」する)

search_list = ['AAAAA', 'BBBBB']

  • 1 キーワード毎の取得ツイート数

tweet_count = 10

  • 自動フォローと判定されにくいようにフォロー間隔 sleep をダンダム値とする
random_min_time = 4 #sleepでとり得る最小値
random_max_time = 15 #sleepでとり得る最大値

解説 4. メイン処理|Tweepy で「いいね(favorite)」処理実行

"解説 4. メイン処理|Tweepy で「いいね(favorite)」処理実行"

  • api.search() で特定のキーワード、設定した数、のツイートを取得し、search_result へ格納する
for search in search_list:
    liked_count = 0 #いいねカウンター
    
    # サーチ結果を格納 #
    search_result = api.search(q=search, count=tweet_count)
  • search_result からツイートを 1 つ取り出し、tweet へ格納。ツイート毎の情報を取得する。
for tweet in search_result:
    tweet_id = tweet.id #ツイートIDを取得
    user_name = tweet.user._json['name'] #ユーザ名を取得
    user_screen_name = tweet.user._json['screen_name'] #スクリーン名(@aaa)を取得

  • 「いいね」していない場合だけ「いいね」をするための判定
tweet_status = api.get_status(tweet_id) # ツイートIDからツイートステータスを取得
tweet_favorite_status = tweet_status.favorited # ツイートのいいね状態を取得

check_status = 'False' # いいね判定値をセット
tweet_favorite_status_01 = str(tweet_favorite_status) # 文字列へ変換

if tweet_favorite_status_01 == check_status: # False ステータスなら
  • 「いいね」処理とエラーハンドリング
try:
    api.create_favorite(id=tweet_id)  
except tweepy.TweepError as e: 
    print(e.reason) 
except StopIteration:
    continue 
  • 「いいね」コマンド実行後のステータス確認と「いいね」カウンターアップ
tweet_status = api.get_status(tweet_id) 
tweet_favorite_status = tweet_status.favorited 
liked_count += 1 
  • なるべくスパム判定されないために「いいね」と「いいね」の間にランダムスリープを入れます
sleep_random_time = random.randint(random_min_time,random_max_time) 
time.sleep(sleep_random_time) 

Tweepy で特定のキーワードを含むツイートにいいねする Python コード のまとめ

"Tweepy で特定のキーワードを含むツイートにいいねする Python コード のまとめ"

Python Tweepy を利用して「いいね」を大量に行うときは、

  • アカウント凍結リスク
  • スパム判定

に気をつけましょう。

すでに「いいね」しているにもかかわらず「いいね」コマンドを実行したり、短時間で「いいね」を大量につけたり、1 日に 500 件以上「いいね」しようとすると、以下のように Twitter API エラーメッセージが返ってきます。

{'code': 283, 'message': "This request looks like it might be automated. To protect our users from spam and other malicious activity, we can't complete this action right now. Please try again later."}

フォロワー数が 2,000 人を超えると凍結しにくくなりますが、Twitter 社側もユーザ保護のために「いいね」を無条件で行うスパムに対しては、どんどん厳しい処置をしてきます。

なので、最初は Python Tweepy のプログラミングを試すアカウントを作って運用してみることをおすすめします。

間違ってもメインアカウントでいきなり始めると、凍結された時に悲劇ですので。。。(体験者は語る・・・)

    Amazonチャージ