【Python】Tweepyを使ってTwitterで自動いいね

#Python
 Pythonの勉強として、今回はTwitterいいねbotを作ってみました。Pythonは豊富なライブラリをが揃っていますのでとても魅力的です。

#目的
Pythonのライブラリであるtweepyを使って、Twitterで自動いいねができるプログラムを作る。
#環境
- MacOS
- Python 3.8.0
- Tweepy（ライブラリ）

#Twitter API
まずTwitterAPIを使うために開発者の登録が必要です。登録は以下のURLから可能です。
https://developer.twitter.com/

登録手順に関しては、ここでは省略します。
今回の開発で必要なのは、consumer_key,  consumer_secret＿key,  access_token_key,  access_token_secret_key の４つです。登録手順は以下の記事を参考にするといいです。写真付きでわかりやすいです。
https://qiita.com/kngsym2018/items/2524d21455aac111cdee

#Tweepyをインストール

以下のコマンドでTweepyのインストールをおこなってください。

```
$ pip3 install tweepy
```

#コード
インストールが完了した後、コードを書くためのファイルを作成します。今回は`tweepy`というディレクトリーを作成します。その中に`tweet_liked.py`というファイルを作成し、以下のコードを書いてください。

```python:tweepy/tweet_liked.py

import tweepy
import time

# 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_key, access_token_secret)

# 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)


# '#ブログ, #旅行'をそれぞれ３件ずついいね #
# 取得したいキーワード #
search_list = ['#ブログ', '#旅行']
# ツイート数３件 #
tweet_count = 3

for search in search_list:
    print('Searching... {}' .format(search))
    # サーチ結果 #
    search_result = api.search(q=search, count=tweet_count)
    for tweet in search_result:
        tweet_id = tweet.id
        try:
            # いいねの処理 #
            api.create_favorite(id=tweet_id)
            print('Tweet_liked')
            time.sleep(4)
        except tweepy.TweepError as e:
            print(e.reason)
        except StopIteration:
            break


##########################################################################
# いいねは２４時間で１０００件まで。１０００件以上いいねをするとペナルティを受けます。 #
##########################################################################
```
#解説

###インポート
```python:tweepy/tweet_liked.py
import tweepy
import time
```

まず、先ほどインストールしたtweepyと今回はtimeをインポートし有効化します。

###APIの設定
```python:tweepy/tweet_liked.py
# 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_key', 'access_token_secret')

# 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)
```


次にAPIを使用できるように設定します。

最初の２行は、開発者用アカウントの登録時に取得した4つのキー(consumer_key,  consumer_secret＿key,  access_token_key,  access_token_secret_key)をそれぞれ書き換えてください。 

３行目は Twitterオブジェクトを生成しています。第２引数、第３引数は `rate limits (アクセス制限)`についての設定です。Trueにすることで適用されます。

###自動いいね
```python:tweepy/tweet_liked.py
# '#ブログ, #旅行'をそれぞれ３件ずついいね #
# 取得したいキーワード #
search_list = ['#ブログ', '#旅行']
# ツイート数３件 #
tweet_count = 3

for search in search_list:
    print('Searching... {}' .format(search))
    # サーチ結果 #
    search_result = api.search(q=search, count=tweet_count)
    for tweet in search_result:
        tweet_id = tweet.id
        try:
            # いいねの処理 #
            api.create_favorite(id=tweet_id)
            print('Tweet_liked')
            time.sleep(4)
        except tweepy.TweepError as e:
            print(e.reason)
        except StopIteration:
            break
```

最後がメインの部分です。

```python:tweepy/tweet_liked.py
# 取得したいキーワード #
search_list = ['#ブログ', '#旅行']
# ツイート数３件 #
tweet_count = 3
```
まず、`search_list = ['#ブログ', '#旅行']`のように取得したいキーワードをリストを使って、変数を指定します。`tweet_count = 3`は今回取得したいツイート数です。

```python:tweepy/tweet_liked.py
for search in search_list:
    print('Searching... {}' .format(search))
    # サーチ結果 #
    search_result = api.search(q=search, count=tweet_count)
    for tweet in search_result:
        tweet_id = tweet.id
        try:
            # いいねの処理 #
            api.create_favorite(id=tweet_id)
            print('Tweet_liked')
            time.sleep(4)
        except tweepy.TweepError as e:
            print(e.reason)
        except StopIteration:
            break
```
上記のコードの流れは、
- 変数 `search_list`をfor文で繰り返し処理。
- `api.search(q=search, count=tweet_count)`の`q=search`は取得したいキーワードを指定。`count=tweet_count`は先ほど指定したツイート数を指定。
- 上記の結果を繰り返し処理。
- twitterのIDを取得し、それを使っていいねをする。 `api.create_favorite(id=tweet_id)`がいいねをする処理
- いいねが成功すると、`Tweet_liked`と表示され、４秒後同じ処理を開始（時間をあけないと検知される可能性）。
- ２個目の繰り返し文が終わると１回目のfor文が実行され同じプロセスを開始。

`except`の部分は処理が失敗した時にエラーメッセージが吐き出される処理です。

#実行結果


```
$ python tweet_liked.py
```
上記のコマンドを実行し。以下の結果が出れば成功です。あとは自分おTwitterの登録したアカウントでいいねがされているか確認してください。

```
Searching... #ブログ
Tweet_liked
Tweet_liked
Tweet_liked
Searching... #旅行
Tweet_liked
Tweet_liked
Tweet_liked
```
#注意
TwitterのAPIの使用には制限があります。それを超えてしまうと、ペナルティーを受けることになるので気をつけてください。

#まとめ
###プログラムの手順
- Twitterの開発者用に登録し４つのキーを取得
- tweepyをインストール
- TwitterのAPIを使うために４つのキーを使って設定　twitterオブジェクトも生成
- 自動いいねのプログラムを書く


今回は、いいねの自動化を実装しましたが、フォローの自動化やフォロー解除などいろいろ試すことができます。tweppyについて詳しく知りたい方は、以下のURLのドキュメント読んでみてください。

http://docs.tweepy.org/en/latest/

Pythonはスクレイピングで知られていると思いますが、`Django`というフレームワークを使用すれば、 Webアプリケーションも作ることができます。

この記事をきっかけにPythonistaが増えてくれると嬉しいです。