Twitter Developer + Tweepy でpythonからつぶやく

Twitter Developerの登録はこちらを参照：[2度目のTwitter Developer登録で苦労した話](https://qiita.com/harus2rock/items/ad50c927e103f0302885)
初めての登録なら苦労はしないはず．

## アクセストークンを手に入れよう

### プロジェクト作成

Twitter Developerに申請済みのアカウントにログイン後，[ダッシュボード](https://developer.twitter.com/en/portal/dashboard)にアクセス．
まだProjectがなくまっさらの状態なので，**+ Create Project** からプロジェクトを作成する．
![dashbord](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890590/3acca07e-a6c3-d3a6-6717-f613bfac2d98.png)

この後入力する情報は以下の通り．
1. プロジェクト名（自由入力）
2. 自分の立場（選択式）
3. プロジェクトの説明（自由入力）
4. App名（自由入力）

プロジェクト名とは別にアプリ名も決める必要がある．
例：プロジェクト名は「TestProject」，アプリ名は「MyTestApp」のような命名にするなど

自分の立場は，Twitter Developerに登録する際と同じ選択肢．
今回のプロジェクトに最も見合う立場を選択しよう．
![choose](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890590/b705f0cf-1968-0a1f-01a6-6c181837d861.png)



またアプリ名は既に存在するアプリとかぶると使用できない．
![error](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890590/74d6a23b-bf13-25a3-7bc0-8208d477267b.png)

無事アプリ名が決まると以下の画面に遷移する．
これらの情報は後から確認できるので，まずは **App settings** から設定に移ろう．
![accesstoken](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890590/c8e856e2-35bd-64e8-d642-ecad3927b399.png)

### 権限の設定
App settingsをクリックすると，作成したプロジェクトのページに遷移する．
ここからTweepyで使用するtokenを手に入れるための設定を行う．
まずはAppsの作成したアプリにある歯車をクリック．
![project](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890590/fb51d638-1fad-c001-9df5-87af5b922c7a.png)

アプリの画面に遷移するので，**App permissions**の**Edit**からアプリの権限を変更する．
![apps](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890590/3d7457d2-678d-59eb-6345-3435584ffe19.png)

Tweepyからつぶやくためには**Write**の権限が必要であるため，**Read and Write**もしくは**Read + Write + Direct Messages**を選択する．セーブも忘れずに．
![permission](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890590/6abc2614-ce87-b7da-c7d8-f5a1685ec8c4.png)

### トークンの取得
次にアプリの画面の**Keys and tokens**に移動する．
![key_and_tokens](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890590/94e43294-fbde-663e-a93e-2446fdf03acf.png)
**API key & secret**は，**View Keys**から何度でも確認できる．
しかしセキュリティの問題で約1年経過すると確認できなくなるため，手元にメモを残すのを忘れずに．
![apikey](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890590/6ee7342d-cc4f-3a99-57a0-7dff8930c841.png)
**Access token & secret**は1度生成したあと確認し直すことはできないので注意．
メモを取り忘れた／なくした場合，無効化もしくは再生成しかできない．
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890590/0474ecf4-e89e-dac3-dd02-91c01d345693.png)

## Tweepyでpythonからつぶやく
ここからはpythonに移行する．
**pip install tweepy** でtweepyをインストールしておく．

```python:tweet.py
import tweepy

Consumer_key = '取得したApi key'
Consumer_secret = '取得したAPI Key secret'
Access_token = '取得したAccess token'
Access_secret = '取得したAccess token secret'

# OAuth handler を作成する
auth = tweepy.OAuthHandler(Consumer_key, Consumer_secret)
# OAuth handler にアクセストークンを伝える
auth.set_access_token(Access_token, Access_secret)
# APIを作成する
api = tweepy.API(auth_handler=auth)

# ツイート
api.update_status('APIでツイートしています。')
```
これだけ！

## tokenのベタ書きは危なくない？
もしこのプログラムをGitにあげるとなると，秘密にすべきトークンが全世界に筒抜けになってしまう．
かといってコードが複雑になるとGit管理もしたくなるもの……。

解決策の1つとして，**環境変数にトークンを書き込んでしまおう！**がある．

Windowsの場合は設定から環境変数の追記が可能．
macの場合，bashを使用しているなら.bashrcに，zshを使用しているなら.zshrcに，以下の4行を書き込む．
（xxxxは各自のkeyに変更．'(クォーテーション)や"(ダブルクォーテーション)は必要ない．）
その後ターミナル上で **source ~/.bashrc** もしくは **source ~/.zshrc**で設定を反映させる．

```shell:.bashrc/.zshrc
export TWITTER_CK=xxxx
export TWITTER_CS=xxxx
export TWITTER_AT=xxxx
export TWITTER_AS=xxxx
```

無事環境変数に反映できたら，先程のプログラムを以下のように書き換える．


```python:tweet2.py
import tweepy
import os

Consumer_key = str(os.getenv('TWITTER_CK'))
Consumer_secret = str(os.getenv('TWITTER_CS'))
Access_token = str(os.getenv('TWITTER_AT'))
Access_secret = str(os.getenv('TWITTER_AS'))

# OAuth handler を作成する
auth = tweepy.OAuthHandler(Consumer_key, Consumer_secret)
# OAuth handler にアクセストークンを伝える
auth.set_access_token(Access_token, Access_secret)
# APIを作成する
api = tweepy.API(auth_handler=auth)

# ツイート
api.update_status('APIでツイートしています。')
```
これで公開しても安全！