PythonでTwitterしてみた

#自己紹介

じゅんじゅんというニックネームで、関西を拠点に活動しているフロントエンドエンジニアです。

HAL大阪の新2回生です👍 (2016.4.25現在)

よくstart up系イベントに行くので、大阪らへんの方は会いましょう！

Pythonの基本的な構文等は、前の記事

[Pythonの基礎の基礎の基礎](http://qiita.com/konojunya/items/e01b139fe76f1da7c185)

をご覧ください。

#PythonでTwitterしてみた

今回はPythonを使ってTwitterのAPIをいじいじしてみました。

超簡単です。

今回はTwitterのAPIの使い方を軽くさらいたいので、Twitterのライブラリは使いません。

ただし、OAuthだけは、めんどくさいのでライブラリに頼ることにします！

使うライブラリは*requests_oauthlib*です。

Githubは[requests-oauthlib](https://github.com/requests/requests-oauthlib)

まずはこいつをinstallします。

##インストール

pipを使ってインストールします。

`$ pip install requests requests_oauthlib`

インストールできればこっちのものです（）

##認証キーの作成

TwitterのAPIをいじいじするには、Twitterにアプリケーションを登録しないといけません。

まずはTwitterのアプリケーション登録のサイトで登録しましょう

[https://apps.twitter.com](https://apps.twitter.com)

![スクリーンショット 2016-04-25 0.48.13.png](https://qiita-image-store.s3.amazonaws.com/0/90347/6324e4d4-9c9f-28af-0b42-73b1a920817e.png)

こんなページが出てくると思います。

他にアプリの登録をしたことがある人は、ここを飛ばしても大丈夫です。

次に、Create New Appというボタンを押して、

![スクリーンショット 2016-04-25 0.49.00.png](https://qiita-image-store.s3.amazonaws.com/0/90347/033d35ef-3909-aab6-1bf8-5f8297c51728.png)

必要事項を記入していきます。

詳細はよくわかんないですが、Callback URLは

`http://サイト名/_oauth/twitter`

にすると、通ります。（普通にしてみて通らなければこれで設定してみてください）

ちなみに、このTwitterアプリケーションの登録ですが、携帯番号で認証されたアカウントでないとここで弾かれてしまいます。(2016/4/25現在)

登録し終わったら、Keys and Access Tokensというタブを開いてください。

![スクリーンショット 2016-04-25 0.49.47.png](https://qiita-image-store.s3.amazonaws.com/0/90347/fc48444f-b1ac-9251-2058-543c705341f2.png)

その下にYour Access Tokenという場所があるので、

Create my access tokenを押して、アクセストークンを作ってください。

これで、アプリケーションを登録した時の**コンシューマキー**と**コンシューマシークレット**、今さっき登録した**アクセストークン**と**アクセストークンシークレット**が手に入りました。

普段、WEBサービスなどではアクセストークンは、ユーザーに認証してもらいます。

ですが、今回は自分のアカウントを動かすのでちゃちゃっと作ってしまいました。

では、本題

##Tweetを取得しよう

では、自分のタイムラインのデータを取得しましょう。

Twitterのデベロッパーページを見て開発を進めていきます。

[https://dev.twitter.com](https://dev.twitter.com)

この中の`home_timeline`が今回扱うものです。

[https://dev.twitter.com/rest/reference/get/statuses/home_timeline](https://dev.twitter.com/rest/reference/get/statuses/home_timeline)

![スクリーンショット 2016-04-25 1.21.27.png](https://qiita-image-store.s3.amazonaws.com/0/90347/348b71db-df99-7de4-f8a0-aef6c5da6920.png)

`GET status/home_timeline`と書いています。

これは**GETメソッドで以下のエンドポイントを指定しなさい**というものです。

ページの見方もさらえたところで、早速書いていきましょう。

まず何回も書き換えるのが面倒なので、`settings.py`というファイルを作り、キーを登録しておきましょう。

```settings.py
CONSUMER_KEY = "xxxxxxxxxxxxxxxx"
CONSUMER_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
ACCESS_TOKEN = "xxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxx"
ACCESS_TOKEN_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
```

では、本体のファイルを作っていきましょう！

なお、今回は他のものにインポートされることを考えずに書くので`if __name__ == '__main__'`は使いません。

そのまま書きます。

```timeline.py
#coding: UTF-8
from requests_oauthlib import OAuth1Session
import json
import settings

twitter = OAuth1Session(settings.CONSUMER_KEY, settings.CONSUMER_SECRET, settings.ACCESS_TOKEN, settings.ACCESS_TOKEN_SECRET)

params = {}
req = twitter.get("https://api.twitter.com/1.1/statuses/home_timeline.json", params = params)

timeline = json.loads(req.text)

for tweet in timeline:
  print tweet["text"]
```

これで、20件のデータを取得することができると思います。

解説していきます。

import周りはライブラリを読み込んだり、さっきのsettings.pyを読み込んだりしています。

`twitter = OAuth1Session(settings.CONSUMER_KEY, settings.CONSUMER_SECRET, settings.ACCESS_TOKEN, settings.ACCESS_TOKEN_SECRET)`

この行は、OAuthを使いtwitterにインスタンスを返しています。

`params = {}`

APIを使うのに、パラメータを与えることもできるんですが、まずはなしにするためこの記述をしています。

`req = twitter.get("https://api.twitter.com/1.1/statuses/home_timeline.json", params = params)`

インスタンスされたtwitterを使い、getメソッドで第一引数にURL、第二引数にパラメータを渡しています。

その結果がreqに代入されている感じです。

`timeline = json.loads(req.text)`

ここで、timelineの情報だけにjsonを整形しています。

```
for tweet in timeline:
  print tweet["text"]
```

timelineには様々な情報（locationやuserの情報）も含まれていて、配列になっているので、forで回します。

一つ一つがtweetに入って行って

その中のtextがtweet本文になるので`tweet["text"]`とすることで、tweetを取得できます。

ここを`tweet["user"]["screen_name"]`にすることで[@konojunya](http://twitter.com/konojunya)のkonojunyaという文字列が取得できたりします。

何が入っているかは、[https://dev.twitter.com](https://dev.twitter.com)にも書いているので、

参考にしてみましょう。

##Tweetする

では、投稿もしましょう

使うのは`statuses/update`で、メソッドは`POST`です。

![スクリーンショット 2016-04-25 1.51.45.png](https://qiita-image-store.s3.amazonaws.com/0/90347/fbe77086-6d99-fd94-2d0a-6b0777c143ed.png)

では、早速コード書きましょう！

```tweet.py
#coding: UTF-8
from requests_oauthlib import OAuth1Session
import json
import settings

twitter = OAuth1Session(settings.CONSUMER_KEY, settings.CONSUMER_SECRET, settings.ACCESS_TOKEN, settings.ACCESS_TOKEN_SECRET)

params = {"status": "Hello, World!"}
req = twitter.post("https://api.twitter.com/1.1/statuses/update.json",params = params)
```

これで、Hello, World!とつぶやけると思います。

先ほどはパラメータを空にしていましたが、今回は本文になる"status"が絶対必要なので、`{"status": "ツイート本文"}`

があります。

reqには様々なデータが返ってきますが、見るとすれば`req.status_code`が`200`だと正常終了しているので、その辺りになるかと思います。

retweetやfav、followなどもPOSTですね。APIを使って、面白いものをどんどん開発してみましょう！

#あとがき

間違い等ございましたら、コメント欄でご指摘していただければと思います。

Twitter [@konojunya](http://twitter.com/konojunya)

ホームページ [Hello,World](http://konojunya.com)