こんにちはショウです
ツイッターのAPIを使ったアプリ開発
~面白いことをいろいろやってみよう~シリーズです
今日は第2章の APIの実行です
実際にAPIを使用してタイムラインの取得、検索、つぶやいてみるをやってみます
前回はAPI実行に必要なCONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRETの取得を行いました
初心者でもわかるように説明していきますので、みなさん挑戦してみてください
ソースコード
早速ソースコードです
用意した仮想環境のフォルダにtwpyView.pyという名前で保存しています
# -*- coding:utf-8 -*-
import json, config
from requests_oauthlib import OAuth1Session
def oath_session():
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
return OAuth1Session(CK, CS, AT, ATS)
def timeLine(twitter):
url = "https://api.twitter.com/1.1/statuses/user_timeline.json"
params ={'count' : 5}
req = twitter.get(url, params = params)
if req.status_code == 200:
timeline = json.loads(req.text)
for tweet in timeline:
print(tweet['user']['name'])
print(tweet['text'])
print(tweet['created_at'])
print('----------------------------------------------------')
else:
print("ERROR: %d" % req.status_code)
return
def serchTewwt(twitter):
url = "https://api.twitter.com/1.1/search/tweets.json"
print("調べるキーワードを入力してください")
keyword = input('>> ')
print('----------------------------------------------------')
params = {'q' : keyword, 'count' : 5}
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']['name'])
print(tweet['text'])
print(tweet['created_at'])
print('----------------------------------------------------')
else:
print("失敗[%d]" % req.status_code)
return
def Tewwt(twitter):
url = "https://api.twitter.com/1.1/statuses/update.json"
print("ツイートする内容を入力してください")
tweet = input('>> ')
params = {"status": tweet}
req = twitter.post(url, params = params)
if req.status_code == 200:
print("完了")
else:
print("失敗[%d]" % req.status_code)
return
def main():
twitter = oath_session()
while True:
print("なにをしますか?")
print("1:タイムラインを取得する")
print("2:検索する")
print("3:つぶやく")
mode = input('>> ')
print('----------------------------------------------------')
if mode == "1":
timeLine(twitter)
elif mode == "2":
serchTewwt(twitter)
elif mode == "3":
Tewwt(twitter)
else:
print("終了します")
break
pass
if __name__ == "__main__":
main()
requests_oauthlibのインポート
twitterではOAuth認証を採用していますので、
requests_oauthlibを使います
今回の開発用に準備した仮想環境(twipyView)にpipでインストールします
(twipyView)…> pip install requests requests_oauthlib
仮想環境やpipが分からない場合はこちらの過去記事を参考にしてください
twpyView.pyではfrom requests_oauthlib import OAuth1Sessionで
requests_oauthlibをインポートします
OAuth認証用のCONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRETは別ファイル(config.py)に記述して
twpyView.pyと同じ階層に保存しておきます
CONSUMER_KEY = "****"
CONSUMER_SECRET = "****"
ACCESS_TOKEN = "***-***"
ACCESS_TOKEN_SECRET = "****"
import json, configにてconfig.pyをインポートします
oath_session ()
OAuth認証を行う関数です
def oath_session():
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
return OAuth1Session(CK, CS, AT, ATS)
config.pyから読み込んだCONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRETを使ってOAuth認証を行います
timeLine(twitter)
タイムラインを取得する関数です
引数にOAuth認証の戻り値を設定
url = "https://api.twitter.com/1.1/statuses/user_timeline.json"
urlにuser_timelineのエンドポイントを設定します
エンドポイントについてはこちらの公式サイトをを参考にしてください
エンドポイントとはAPIにアクセスするためのURLのことです
params ={'count' : 5}
paramsには設定するパラメータを指定します
‘count’ : 5でタイムラインから5件取得することができます
設定できるパラメータは他にもあるのでこちらの公式サイトを参考にしてください
req = twitter.get(url, params = params)
getメソッドで設定したエンドポイントのデータをリクエストします
if req.status_code == 200:
timeline = json.loads(req.text)
getメソッドが正常に完了した(status_codeが200)場合、
timelineに習得してきたテキストを読み込みます
for tweet in timeline:
print(tweet['user']['name'])
print(tweet['text'])
print(tweet['created_at'])
print('----------------------------------------------------')
習得できたタイムラインの数だけループして表示します
1行目にユーザネーム
2、3行目に内容を表示します
serchTewwt(twitter)
検索を実行する関数です
引数にOAuth認証の戻り値を設定
url = "https://api.twitter.com/1.1/search/tweets.json"
urlにsearchのエンドポイントを設定します
print("調べるキーワードを入力してください")
keyword = input('>> ')
ユーザからの入力を受け付けます
入力された文字列をkeywordに格納します
params = {'q' : keyword, 'count' : 5}
paramsに検索ワードと取得する数を設定します
req = twitter.get(url, params = params)
getメソッドで設定したエンドポイントのデータをリクエストします
あとはタイムラインの取得と同じです
Tewwt(twitter)
検索を実行する関数です
引数にOAuth認証の戻り値を設定
url = "https://api.twitter.com/1.1/statuses/update.json"
urlにupdateのエンドポイントを設定します
print("ツイートする内容を入力してください")
tweet = input('>> ')
ユーザからの入力を受け付けます
入力された文字列をtweetに格納します
params = {"status": tweet}
paramsにつぶやく内容を設定します
req = twitter.post(url, params = params)
postメソッドで設定したエンドポイントのデータをリクエストします
メイン処理
最初に実行される関数です
def main():
twitter = oath_session()
最初にOAuth認証を行います
while True:
print("なにをしますか?")
print("1:タイムラインを取得する")
print("2:検索する")
print("3:つぶやく")
mode = input('>> ')
print('----------------------------------------------------')
if mode == "1":
timeLine(twitter)
elif mode == "2":
serchTewwt(twitter)
elif mode == "3":
Tewwt(twitter)
else:
print("終了します")
break
pass
ユーザから入力された数値により呼び出す関数を分岐しています
1,2,3以外の数値が入力されたら終了します
プログラムの実行
仮想環境で下記コマンドを実行する
>python twpyView.py
どの処理を実行するか尋ねられるので、選択する
今回は「1:タイムラインを取得する」を選択
タイムラインの内容が表示されました
表示が終わると最初の処理選択に戻ります
次に「2:検索する」を選択すると検索キーワードの入力待ちとなります
Pythonと入力してみると検索結果が表示されました
最後に「3:つぶやく」を選択して、つぶやく内容を入力してみた
ツイッターでみてもちゃんとつぶやけていますね
やさしい方たちが「いいね」してくれています
まとめ
今日はTwitterAPIを使用してみました
意外と簡単にできておもしろかったですね
もう少し機能追加して画面をつければツイッタークライアントができそうです
質問や相談あればドシドシご連絡ください!!
次はこんなことやってみて等の依頼も募集中です