PythonでTwitterしてみた

  • 48
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

自己紹介

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

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

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

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

Pythonの基礎の基礎の基礎

をご覧ください。

PythonでTwitterしてみた

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

超簡単です。

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

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

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

Githubはrequests-oauthlib

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

インストール

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

$ pip install requests requests_oauthlib

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

認証キーの作成

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

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

https://apps.twitter.com

スクリーンショット 2016-04-25 0.48.13.png

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

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

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

スクリーンショット 2016-04-25 0.49.00.png

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

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

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

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

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

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

スクリーンショット 2016-04-25 0.49.47.png

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

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

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

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

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

では、本題

Tweetを取得しよう

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

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

https://dev.twitter.com

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

https://dev.twitter.com/rest/reference/get/statuses/home_timeline

スクリーンショット 2016-04-25 1.21.27.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のkonojunyaという文字列が取得できたりします。

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

参考にしてみましょう。

Tweetする

では、投稿もしましょう

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

スクリーンショット 2016-04-25 1.51.45.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_code200だと正常終了しているので、その辺りになるかと思います。

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

あとがき

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

Twitter @konojunya

ホームページ Hello,World