PythonでTwitterのフォローbot作った。（今更）

## 前提というか動機
私事ですが、勉強と趣味のゲームでフォロワーさん欲しいなと思ったのと、フォローbot作って、フォロワーさん増やして、ゲーム内のカスタムマッチ用の権限を貰おうという2つの魂胆からです。

## BOTさんの機能
1.認証（ログイン)
2.キーワード検索
3.いいね
4.RT
5.フォロー

## 動作環境
macOS Big Sur ver11.0.1
Python 3.9
tweepy 3.10.0

## 実装準備
上記、動作環境に書いたtweepyをインストールしましょう。
やり方はターミナルを開いて、以下の通りです。

```
pip install tweepy
```

※pipに関しては、ここでは省略します。

その次に、Twitter APIを使用するためにTOKENを取得するのですが、以下のサイトでやり方があるので、割愛します。
また、APIを使用する際に、英語で申請理由を記載しなければならないのですが、google翻訳を使って書くか、google検索でサンプルを探すのが良いかと思います。

https://techacademy.jp/magazine/51411


コーディング前の準備としては、これで終わりです。

## コーディングと説明
では、早速コーディングしていきましょう。

最初は、APIを使う上でのKEYとTOKENの設定からです。
KEYとTOKENはTwitter APIの申請が受理されれば、Developerのページにて発行できるので、そこから取得してください。
コーティングすると以下の通りです。
変数に直接、KEYやTOKENを代入してあげれば問題ないですね。
（ぶっちゃけると、変数に入れなくて直接認証のfunctionに入れてもいいです。）

```
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# tweepyの呼び出し
import tweepy

# Twitter APIのKEYとTOKENを変数にセット
API_KEY = '**************************'
API_SECRET = '**************************'
ACCESS_TOKEN = '**************************'
ACCESS_TOKEN_SECRET = '**************************'

# Twitter API認証
auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
```

次は今回、目玉でもある「キーワード検索」「いいね」「RT」「フォロー」のコーディングを一緒に見てみましょう。

```
# 認証情報を変数に格納
api = tweepy.API(auth)

# 検索用のキーワードを変数に格納
query = 'プログラミング'

# 上記のキーワードからツイートを検索する
# countは50件検索するという意味なので、ここの数値を変更すると検索件数が変わる
targets = api.search(q=query, count=50)

# 検索結果の50件から該当ツイートに対して、いいね・RT・フォローをしていく
for target in targets:

    # user.screen_nameはtwitterのID(@~~)を取得するもの
    screen_name = target.user.screen_name

    # idはツイートごとに振られているidを取得している
    # twitter.com/xxxxxxxx/status/137600217487xxxxxxx)の 13760000...のやつ
    tweet_id = target.id

    # ツイートのidからcreate_favoriteでいいねをしてあげられる
    api.create_favorite(tweet_id)　

    # ツイートのidからretweetでRTをしてあげられる
    api.retweet(tweet_id)

    # 最初に取得したscreen_nameからcreate_friendshipでフォローができる
    api.create_friendship(screen_name)
```

あとは、例外処理とかを考慮してあげると完成コードはこちら

```
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tweepy
import time

# Twitter APIのKEYとTOKENを変数にセット
API_KEY = '**************************'
API_SECRET = '**************************'
ACCESS_TOKEN = '**************************'
ACCESS_TOKEN_SECRET = '**************************'

# Twitter API認証
auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

# 認証情報を変数に格納
api = tweepy.API(auth)

# 検索用のキーワードを変数に格納
query = 'プログラミング'

# 上記のキーワードからツイートを検索する
# countは50件検索するという意味なので、ここの数値を変更すると検索件数が変わる
targets = api.search(q=query, count=50)

# 検索結果の50件から該当ツイートに対して、いいね・RT・フォローをしていく
for target in targets:

    # user.screen_nameはtwitterのID(@~~)を取得するもの
    screen_name = target.user.screen_name

    # idはツイートごとに振られているidを取得している
    # twitter.com/xxxxxxxx/status/137600217487xxxxxxx)の 13760000...のやつ
    tweet_id = target.id

    print('@' + screen_name + 'を処理中...')

    for i in range(3): #RateLimitにかかったら3回までリトライ
        try:
            # ツイートのidからcreate_favoriteでいいねをしてあげられる
            api.create_favorite(tweet_id)　
            print('いいね成功')
            
            # ツイートのidからretweetでRTをしてあげられる
            api.retweet(tweet_id)
            print('RT成功')
            
            # 最初に取得したscreen_nameからcreate_friendshipでフォローができる
            api.crea te_friendship(screen_name)
            print('フォロー成功')

        except tweepy.RateLimitError as e:
            print(e)
            time.sleep(15 * 60) #15分待機

        except tweepy.TweepError as e:
            print(e)
            break

        else:
            time.sleep(5)
            break
```

## 最後に
記事を読んでいただき、ありがとうございます。
久々に記事を書いたので、至らない点やわからない点があれば質問してください。
できる限りお答えできるように致します。
それでは。