PythonでTwitterを操作し、色々やってみようと画策中です。
今回は準備編ということで、Twitter APIの基本操作です。
TwitterのDeveloper account申請
Twitter APIデータの操作に必要なキーを入手します。必要なキーは以下の4つ。
- Consumer Key
- Consumer Secret
- Access Token
- Access Token Secret
https://developer.twitter.com/ から申請。色々なサイトで紹介されているので、ここでは割愛します。
注意が必要なのは、Callback URL。開発環境の場合は 以下の2つを使用すると良いみたいです。
- http://127.0.0.1:3000/auth/twitter/callback
- http://localhost:3000/auth/twitter/callback
管理人は以下のように登録しています。上記と、自サイト(このブログ)を利用しています。
もちろん製品段階では、適切な値に設定し直す必要があります。
Twitter APIをたたく
準備は整いました。早速 APIを触っていきましょう。
- Twitter API (Twitter公式)
- https://syncer.jp/ APIを日本語訳してくれています。感謝ッ!
前準備
取得した、4つのキーを変数に入れておきます。
1 2 3 4 |
CONSUMER_KEY = " " CONSUMER_SECRET = " " ACCESS_TOKEN = " " ACCESS_TOKEN_SECRET = " " |
投稿(ツイート)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#ツイート from requests_oauthlib import OAuth1Session import json, config #4つのキーをセット CK = CONSUMER_KEY CS = CONSUMER_SECRET AT = ACCESS_TOKEN ATS = ACCESS_TOKEN_SECRET # ツイート投稿用のURL url = "https://api.twitter.com/1.1/statuses/update.json" # パラメータ設定 params = {"status": "PythonでTwitter APIテスト中です"} # OAuth twitter = OAuth1Session(CK, CS, AT, ATS) req = twitter.post(url, params = params) # レスポンスを確認 if req.status_code == 200: print ("Done") else: print ("Error: %d" % req.status_code) |
PythonでTwitter APIテスト中です
— Gukou (@Gukou4) 2018年9月21日
メディア添付、リプライもできます。※コピペするときは、下のstatus_idを変えてください。私宛に返信が来てしまうのでw
1 2 |
#上のツイートへの返信 params = {'status': "返信テスト", 'in_reply_to_status_id' : 1043076771195678720 } |
返信テスト
— Gukou (@Gukou4) 2018年9月21日
タイムライン取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#タイムライン取得 from requests_oauthlib import OAuth1Session import json #4つのキーをセット CK = CONSUMER_KEY CS = CONSUMER_SECRET AT = ACCESS_TOKEN ATS =ACCESS_TOKEN_SECRET # タイムライン取得用のURL url = "https://api.twitter.com/1.1/statuses/home_timeline.json" # パラメータ設定 params = {'count':10, 'exclude_replies':True} #獲得数10, リプライ除外 # OAuth twitter = OAuth1Session(CK, CS, AT, ATS) req = twitter.get(url, params = params) if req.status_code == 200: # レスポンスはJSON形式なので parse する timeline = json.loads(req.text) # 各ツイートの本文を表示 for tweet in timeline: print(tweet['user']['screen_name'] + "(" + tweet['user']['name'] + ") > " + tweet['text']) print("------------------------------------------------------------------------------------------------") else: # エラーの場合 print ("Error: %d" % req.status_code) |
特定ユーザーのタイムライン取得も可能。目に入った日本マイクロソフト(@mskkpr)でトライ。
1 2 3 4 5 |
# タイムライン取得用のURL url = "https://api.twitter.com/1.1/statuses/user_timeline.json" # パラメータ設定 params = {'screen_name' : "mskkpr",'count':10, 'exclude_replies':True} #獲得数10, リプライ除外 |
検索
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# 検索 from requests_oauthlib import OAuth1Session import json #4つのキーをセット CK = CONSUMER_KEY CS = CONSUMER_SECRET AT = ACCESS_TOKEN ATS =ACCESS_TOKEN_SECRET # タイムライン取得用のURL url = "https://api.twitter.com/1.1/search/tweets.json" # パラメータ params = {'q' : "NYダウ", 'count' : 5, 'lang' : 'ja', 'result_type' : 'recent'} #検索文字「NYダウ」,獲得数5, 日本語のツイート # OAuth twitter = OAuth1Session(CK, CS, AT, ATS) req = twitter.get(url, params = params) if req.status_code == 200: search_timeline = json.loads(req.text) for tweet in search_timeline['statuses']: print(tweet['user']['screen_name'] + "(" + tweet['user']['name'] + ") > " + tweet['text']) print("------------------------------------------------------------------------------------------------") else: print("ERROR: %d" % req.status_code) |
Twitterの高度な検索も使えます。
1 2 3 |
# パラメータ params = {'q' : "#ねこ filter:media min_faves:10", 'count' : 5, 'lang' : 'ja', 'result_type' : 'recent'} # ハッシュタグ「ねこ」、メディア付き、いいね10以上 |
ちなみに一番上のツイートはこちら↓です。
尾道の猫です。 #猫 #ねこ #ネコ #neko #cat #尾道 #猫撮り屋 pic.twitter.com/By0wxZvl36
— 猫撮り屋(Nekotoriya) (@nekotoriya) 2018年9月21日
Twitterの高度な検索機能は別ブログでまとめているので、よろしければご参照ください。
色々使えそうですね!!
ただ注意点として、Twitter APIの使用条件は年々 厳格化されています。(Twitter、API使用条件を厳格化 「厳しすぎる」開発者から悲鳴も)
取得できる期間も1週間までです。※有料で全期間にアクセスできるみたいです(公式)
直近のデータを利用して、何か遊べないか考えてみます!