Twitter APIを触ってみたくなったら最初に見る記事

# はじめに

この記事ではプログラミングの初心者が、Twitter APIの申請を行いPythonでツイートを取得するまでを記録します。
Twitter APIは申請が必要なため、2020年7月時点の申請にかかる時間の参考としてもお使いください。

**結論、私の場合は24時間以内に受理されました。**

金曜の夜に申請して、土曜の午後には使うことができました。
途中、メールでTwitter社とのやりとりが発生してしまったため、レアケースかもしれません。

# Twitter APIの申請方法
[他の記事](https://qiita.com/kngsym2018/items/2524d21455aac111cdee)でも詳しく紹介されているので、こちらでは簡潔に2020年7月時点の情報をまとめます。

## Developerサイトでログイン
[Developer](https://developer.twitter.com/en)サイトにアクセスします。残念ながら英語を読み解く必要があります。

<img width="800" alt="スクリーンショット 2020-07-22 0.45.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303716/e9f90f55-ef80-8775-7afb-ff95d4736501.png">

右上の「Sign in」ボタンをクリックし、TwitterアカウントのID, PWでログインします。裏アカウントを持っている人は間違えないように注意しましょう 笑
もちろん、裏アカで情報収集したい方は裏アカウントで申請を続けましょう。そこが申請に関わるかは不明です。

## Apply
ログイン後、右上に表示される「Apply」ボタンをクリックすると応募フォームに進みます。

後は手順に沿うことで申請は完了しますが、どのような項目があるのかざっくり解説します。

### What is your primary reason for using Twitter developer tools?
APIの利用用途について答えます。趣味のプログラミング活動で使う場合、「Hobbyist」の「Exploring the API」を選択します。

### This is you, right?
認証の手続きに進みます。Twitterアカウントにて電話番号の登録が必要です。

### Tell us about your organization
チーム名、組織名などを入力します。個人名で大丈夫でした。URLも入力しなくてOKです。

### How will you use the Twitter API or Twitter data?
APIの利用用途や分析方法について聞かれます。
英語で200文字以上、100文字以上など大変ですが、日本語で書いたものをGoogle翻訳するのが良いと思います。

オプションとなっているものは、該当するものがもしあれば追記しましょう。

### Is everything correct?
確認画面です。問題なければ「Looks Good!」をクリックします。

### Please review and accept
最後に、契約に同意すれば申請されます。

## メールの確認
申請して数時間後、Twitter社さんからメールでメールが届きます。

わたしの場合は申請理由の欄に「将来はこんなビジネスをしたい！」みたいな野望をつらつらと書いた結果、追加質問されました。

<img width="850" alt="スクリーンショット 2020-07-23 23.01.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303716/380c2d75-8944-47e9-4a3c-db3045f58fec.png">

ちゃんと日本語で来るあたり、優しいですね。
日本語で返信すれば大丈夫です。

概ね以下のような内容で返信しました。

- APIは趣味で利用する。自動的に重要な情報のみを収集できるようにしたい
- ツイート、いいね数などを利用して重要度を分析したい
- コンテンツはFlaskなどを利用して、ローカル上で処理する

## 受理
メールに返信して数時間後、今度は「受理されたよ」というメールが英語で届きました。
![スクリーンショット 2020-07-23 23.12.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303716/4b22508c-3b96-0fed-2959-257425fcf502.png)

これで、[Developer Poral](https://developer.twitter.com/en/portal/dashboard)が使えるようになりました。

## アクセスキーの取得
（プロジェクト）→アプリ→APIキーの順番で作成していきます。

ポータルの「Dashboard」にアクセスすると、アプリの一覧が表示されるようになっています。
左カラムから「Projects & Apps」の「Overview」を選択すると、プロジェクトの一覧が表示されます。
下の方にある「＋Create App」ボタンをクリックすると以下の画面になります。

![スクリーンショット 2020-07-23 23.24.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303716/db45768c-73d0-ce47-b623-ba6f7020f224.png)
名前は既存のアプリとかぶらないようにしなければなりません。

「Complete」ボタンを押すとアプリが作成され、API Key、Access Tokenが表示されるので大切に保管しましょう。

## Pythonでツイートの取得
API Key, Access Tokenが取得できれば、準備完了です。
Pythonでツイートが取得できます。

以下ではtweepyというモジュールを使用し、私がフォローしているユーザさんの直近10個のツイートの中から、最もいいね数の多かったツイートをリストアップし、csvファイルとして出力しています。

```Python
import tweepy
import csv

Consumer_key = 'YOUR_API_KEY'
Consumer_secret = 'YOUR_API_SECRET'
Access_token = 'YOUR_ACCESS_TOKEN'
Access_secret = 'YOUR_ACCESS_SECRET'

auth = tweepy.OAuthHandler(Consumer_key, Consumer_secret)
auth.set_access_token(Access_token, Access_secret)
api = tweepy.API(auth)

# フォロー数を取得
num_friends = api.me().friends_count - 1
# API制限に引っかからないよう200人以下に抑える。そのうちsleepなどを入れて全部取れるようにしたい
if num_friends > 200:
  num_friends = 200

screen_names = []
user_names = []
max_fav_tweets = []
max_fav_favs = []

# api.friendsでフォロワーの情報が取れる！
for user in api.friends(count=num_friends):
  screen_names.append(user.screen_name)
  user_names.append(user.name)

for screen_name in screen_names:
  tweets_data = api.user_timeline(screen_name=screen_name, count=10)
  favs = [td.favorite_count for td in tweets_data]
  max_fav_data = tweets_data[favs.index(max(favs))]
  max_fav_tweet = max_fav_data.text
  max_fav_tweets.append(max_fav_tweet)
  max_fav_favs.append(max_fav_data.favorite_count)

# 以降はcsv整形の処理
output_list = [["no.", "名前", "id", "いいね！数",  "メッセージ"]]
numbering_list = list(range(1, len(max_fav_tweets) + 1))

for num, name, id, n_fav, fav in zip(numbering_list, user_names, screen_names, max_fav_favs,  max_fav_tweets):
  output_list.append([num, name, id, n_fav, fav])

with open("tweets.csv", "w", encoding="utf-8") as f:
  writer = csv.writer(f, lineterminator="\n")
  writer.writerows(output_list)
```

## さいごに
Twitterは身近なサービスなので、API学習の入口としてとても良いです。
ぜひチャレンジしてみてください！