PythonとTwitterAPIを用いて自動いいねやリツイート、フォローを行う

## TwitterAPIとは？

簡単に言うと、TwitterAPIに登録すると、プログラムを介した自動いいねや自動リツイート、ツイートの投稿や、取得などのアクセスを許可しますよ。という感じである。多分・・・

[詳しくはこちらをご覧ください](https://help.twitter.com/ja/rules-and-policies/twitter-api)

## TwitterAPIに登録しよう

では早速プログラムを書く上で必要になってくるアクセスキーなどを取得するために、TwitterAPIに登録しましょう。

登録の仕方は[こちらの記事](https://qiita.com/kngsym2018/items/2524d21455aac111cdee)を参考にしてください。

## 実際にコードを書いていく前の準備

APIの認証が済んだら`tweepy`のインストールをして下さい。
<br>

~~~:ターミナル
$ pip3 install tweepy
~~~
<br>
インストールが済んだら実際にコードを書いていきましょう。

## 自動いいね

まずは、取得したキーの設定から

`API key`
`API secret key`
`Access token`
`Access token secret`

この4つのキーを、自動いいねのコードとは別ファイルに記述します。
ここでは、キーの記述用ファイルを`config.py`とします。
<br>

~~~config.py
CONFIG = {
    "CONSUMER_KEY":"自分の API key を記入",
    "CONSUMER_SECRET":"自分の API secret key を記入",
    "ACCESS_TOKEN":"自分の Access token を記入",
    "ACCESS_SECRET":"自分の Access token secret を記入",
   }
~~~
<br>
キーの設定が終わったら、自動いいねのコードを書くファイルに、キーの呼び出しをする記述を書いていきます。
<br>

~~~twitter.py
import tweepy
from config import CONFIG

CONSUMER_KEY = CONFIG["CONSUMER_KEY"]
CONSUMER_SECRET = CONFIG["CONSUMER_SECRET"]
ACCESS_TOKEN = CONFIG["ACCESS_TOKEN"]
ACCESS_SECRET = CONFIG["ACCESS_SECRET"]
~~~
<br>
先ほどインストールした`tweepy`とキーの設定を行なったファイル`config.py`から`CONFIG`を使える様にします。

そして、それぞれの変数に代入しています。

これでAPIを利用したコードを書く準備は整ったので、上記のコードに下記のコードを追記してください。
<br>

~~~twitter.py
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)

auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)

api = tweepy.API(auth)
# ↑↑↑   インスタンス作成    ↑↑↑


search_results = api.search(q="映画", count=100)
# ↑↑↑    ここでツイートの検索をしています。    ↑↑↑


for result in search_results:
    tweet_id = result.id
    try:
        api.create_favorite(tweet_id)
    except Exception as e:
        print(e)
# ↑↑↑    ここでいいねしています    ↑↑↑
~~~
<br>
上記の流れについて解説します。

まず一番上のコードで、設定したキーを用いてAPIのインスタンスを作成しています。
TwitterAPIを用いる時に必要だという認識で大丈夫かと思います。

その次に、`search`メソッドを用いて、ツイートの検索をしています。
引数の`q =`に`"映画"`というキーワードを設定して、`count = 100`で１００件という条件を指定。

つまり、映画というキーワードが含まれるツイートを１００件取得していることになります。
その結果を`search_results`に代入した後にfor文を用いて、取得したツイート１件１件に
`api.create_favorite(tweet_id)`でいいねしています。

`tweepy`には様々なメソッドが用意されているので、他のメソッドが知りたい方は[こちら](https://kurozumi.github.io/tweepy/)を参考にしてください。

`try:`及び`except Exception as e:`の例外処理についての説明は割愛させていただきますが
詳しく知りたい方は[こちらの記事](https://note.nkmk.me/python-try-except-else-finally/)を参考にしてください。

では、プログラムを実行してみましょう。
<br>

~~~:ターミナル
$ python twitter.py
~~~
<br>

実行すると、自動でいいねされます。

では、検索したツイートをいいねだけでなく、リツイートとそのツイート主をフォローする様にしてみましょう。
確認がしやすい様に、先ほどとは別のキーワードで検索してみます。
<br>

~~~twitter.py
search_results = api.search(q="エンジニア", count=100)

for result in search_results:
    tweet_id = result.id
    user_id = result.user._json['id']  # ←追記
    try:
        api.create_favorite(tweet_id)
        api.retweet(tweet_id)          # ←追記
        api.create_friendship(user_id) # ←追記
    except Exception as e:
        print(e)
~~~
<br>

上記のコードについて少し解説します。

`.retweet()`メソッドでリツイートができます。引数はツイートのidになるのでいいねの時と同様に`tweet_id`を引数に渡します。

`.create_friendship()`メソッドを使ってフォローをするわけですが、引数には`userのid`が必要です。
なので、`user_id = result.user._json['id']`でuserのidを取得しています。

これでプログラムを実行すると、キーワード検索で取得したツイートに、いいねやリツイートをして、ツイート主のフォローが自動でできているかと思います。

この様に、TwitterAPIを用いると、プログラムを介してのアクセスが簡単にできます。
他にもデータ分析などの使い道があるので興味がある方は調べてみてください。

#### 完成したコード

~~~twitter.py
import tweepy
from config import CONFIG

CONSUMER_KEY = CONFIG["CONSUMER_KEY"]
CONSUMER_SECRET = CONFIG["CONSUMER_SECRET"]
ACCESS_TOKEN = CONFIG["ACCESS_TOKEN"]
ACCESS_SECRET = CONFIG["ACCESS_SECRET"]

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)

auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)

api = tweepy.API(auth)

search_results = api.search(q="エンジニア", count=100)

for result in search_results:
    tweet_id = result.id
    user_id = result.user._json['id']  # ←追記
    try:
        api.create_favorite(tweet_id)
        api.retweet(tweet_id)          # ←追記
        api.create_friendship(user_id) # ←追記
    except Exception as e:
        print(e)
~~~
<br>

## おわりに

検索キーワードを複数指定したい場合には、リストにキーワードを複数入れるやり方もあります。
<br>

~~~twitter.py
q_list = ["映画","#アベンジャーズ","#サノス"]
count  = 50

for q in q_list:
    search_results = api.search(q=q, count=count)
    for result in search_results:
        tweet_id = status.id
        user_id  = result.user._json['id']
        try:
            api.create_favorite(tweet_id)
            api.retweet(tweet_id)
            api.create_friendship(user_id)
        except Exception as e:
            print(e)
~~~
<br>

もし、複数キーワードを設定したいという方がいたらこのやり方でやってみてください。