#自己紹介
じゅんじゅんというニックネームで、関西を拠点に活動しているフロントエンドエンジニアです。
HAL大阪の新2回生です👍 (2016.4.25現在)
よくstart up系イベントに行くので、大阪らへんの方は会いましょう!
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のアプリケーション登録のサイトで登録しましょう
こんなページが出てくると思います。
他にアプリの登録をしたことがある人は、ここを飛ばしても大丈夫です。
次に、Create New Appというボタンを押して、
必要事項を記入していきます。
詳細はよくわかんないですが、Callback URLは
http://サイト名/_oauth/twitter
にすると、通ります。(普通にしてみて通らなければこれで設定してみてください)
ちなみに、このTwitterアプリケーションの登録ですが、携帯番号で認証されたアカウントでないとここで弾かれてしまいます。(2016/4/25現在)
登録し終わったら、Keys and Access Tokensというタブを開いてください。
その下にYour Access Tokenという場所があるので、
Create my access tokenを押して、アクセストークンを作ってください。
これで、アプリケーションを登録した時のコンシューマキーとコンシューマシークレット、今さっき登録したアクセストークンとアクセストークンシークレットが手に入りました。
普段、WEBサービスなどではアクセストークンは、ユーザーに認証してもらいます。
ですが、今回は自分のアカウントを動かすのでちゃちゃっと作ってしまいました。
では、本題
##Tweetを取得しよう
では、自分のタイムラインのデータを取得しましょう。
Twitterのデベロッパーページを見て開発を進めていきます。
この中のhome_timeline
が今回扱うものです。
https://dev.twitter.com/rest/reference/get/statuses/home_timeline
GET status/home_timeline
と書いています。
これはGETメソッドで以下のエンドポイントを指定しなさいというものです。
ページの見方もさらえたところで、早速書いていきましょう。
まず何回も書き換えるのが面倒なので、settings.py
というファイルを作り、キーを登録しておきましょう。
CONSUMER_KEY = "xxxxxxxxxxxxxxxx"
CONSUMER_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
ACCESS_TOKEN = "xxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxx"
ACCESS_TOKEN_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
では、本体のファイルを作っていきましょう!
なお、今回は他のものにインポートされることを考えずに書くのでif __name__ == '__main__'
は使いません。
そのまま書きます。
#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
です。
では、早速コード書きましょう!
#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
ホームページ Hello,World