Twitter APIを使ったアプリ開発【Python】第2章 APIの実行

ショウ
ショウ

こんにちはショウです

ツイッターの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が分からない場合はこちらの過去記事を参考にしてください

https://sho10case.com/programingschol-1-3-browser/

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

ツイッターAPIアプリ実行画面
twapi2-1

どの処理を実行するか尋ねられるので、選択する
今回は「1:タイムラインを取得する」を選択

モード選択状態
twapi2-2

タイムラインの内容が表示されました
表示が終わると最初の処理選択に戻ります

タイムライン取得の実行画面
twapi2-3

次に「2:検索する」を選択すると検索キーワードの入力待ちとなります

検索の実行画面
twapi2-4

Pythonと入力してみると検索結果が表示されました

検索の実行画面
twapi2-5

最後に「3:つぶやく」を選択して、つぶやく内容を入力してみた

つぶやく内容の入力待ち画面
twapi2-6

ツイッターでみてもちゃんとつぶやけていますね
やさしい方たちが「いいね」してくれています

まとめ

今日はTwitterAPIを使用してみました
意外と簡単にできておもしろかったですね

もう少し機能追加して画面をつければツイッタークライアントができそうです

質問や相談あればドシドシご連絡ください!!
次はこんなことやってみて等の依頼も募集中です