🐤

仕方ないからTwitter APIの基本的な使い方を教えてあげる。

2021/04/09に公開2

はじめに

株式会社DOKOSOREエンジニアのタカギです。
Twitterを自由自在に操るためには、Twitter APIをマスターする必要があります。しかし、Twitter APIは人によって書き方が大きく異なるため、初学者は戸惑うことが多いと思います。僕自身も素人寄りなのですが、最近「あれ?この書き方を守ったら、ずっと綺麗に書けるやん」という書き方が見えてきたので記事にしたいと思います。書くモチベーションになるので、いいねとかコメントとかいただければありがたいです。

言語はPythonを使います。
Twitter APIの申請とかは他でわかりやすく記事にまとめられているので、そちらを参考にしてください。

OAuth認証オブジェクトの作成

まずはOAuth認証オブジェクトを作成します。(ここの書き方は改善の余地があると思います。)

config.py
CONFIG = {
    "CONSUMER_KEY": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "CONSUMER_SECRET": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "ACCESS_TOKEN": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "ACCESS_SECRET": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx3",
}
define_client.py
#! /usr/bin/python3
# -*- coding: utf-8 -*-
from config import CONFIG
from requests_oauthlib import OAuth1Session
# --------------------------------------------------------------------
def define_client_proc():
    CONSUMER_KEY = CONFIG["CONSUMER_KEY"]
    CONSUMER_SECRET = CONFIG["CONSUMER_SECRET"]
    ACCESS_TOKEN = CONFIG["ACCESS_TOKEN"]
    ACCESS_TOKEN_SECRET = CONFIG["ACCESS_SECRET"]
    # OAuthの認証オブジェクトの作成
    twitter = OAuth1Session(
        CONSUMER_KEY,
        CONSUMER_SECRET,
        ACCESS_TOKEN,
        ACCESS_TOKEN_SECRET)
    return twitter

config.pyで認証キーを設定して、define_client.pyで認証オブジェクトを作成しています。
以降は別ファイルでdefine_client_proc()を呼び出して、認証オブジェクトを使用します。

xxxx.py
from define_client import define_client_proc
twitter = define_client_proc()

ぼくのかんがえたさいきょうの書き方

ここからはお好きなファイルを用意してください。(今回はmain.pyに書きます)
まずは認証オブジェクトの呼び出しをして、twitterという変数に格納します。

main.py
#! /usr/bin/python3
# -*- coding: utf-8 -*-
from define_client import define_client_proc

# OAuthの認証オブジェクトの作成
twitter = define_client_proc()

次に使用したいURLを用意します。
URLとは、Twitter APIのドキュメントに出てくるResourceURLのことです。
このURLは
Tweetを検索したいときは(SearchAPI)

https://api.twitter.com/1.1/search/tweets.json

Tweetを投稿したいときは(UpdateAPI)

https://api.twitter.com/1.1/statuses/update.json

のように、用途によって異なります。
都度、Twitter APIのドキュメントから持ってきてください。
https://developer.twitter.com/en/docs/twitter-api/v1/tweets/search/api-reference/get-search-tweets
まずはツイートを投稿するAPIを使ってみます。

main.py
#! /usr/bin/python3
# -*- coding: utf-8 -*-
from define_client import define_client_proc

# OAuthの認証オブジェクトの作成
twitter = define_client_proc()
tweetUrl = 'https://api.twitter.com/1.1/statuses/update.json'

次にツイートする内容を変数に格納します。

main.py
#! /usr/bin/python3
# -*- coding: utf-8 -*-
from define_client import define_client_proc

# OAuthの認証オブジェクトの作成
twitter = define_client_proc()
tweetUrl = 'https://api.twitter.com/1.1/statuses/update.json'
# --------------------------------------------------------------------
def tweet():
    # ツイートする内容を記述
    tweet_text = "Pythonを使ってTwitterAPIからツイートします。"
    # params変数に格納する
    params = {
        "status": tweet_text,
    }

paramsには、TwitterAPIドキュメントに書かれているパラメータを入れます。
今回使用しているstatuses/updateのページには、次のようなパラメータが書かれています。

https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-update

あとはOAuthの認証オブジェクトを呼び出して、postしてあげるだけです。

main.py
#! /usr/bin/python3
# -*- coding: utf-8 -*-
from define_client import define_client_proc

# OAuthの認証オブジェクトの作成
twitter = define_client_proc()
tweetUrl = 'https://api.twitter.com/1.1/statuses/update.json'
# --------------------------------------------------------------------
def tweet():
    # ツイートする内容を記述
    tweet_text = "Pythonを使ってTwitterAPIからツイートします。"
    # params変数に格納する
    params = {
        "status": tweet_text,
    }
    # OAuth認証オブジェクトを呼び出して、postする。
    response = twitter.post(url=tweetUrl, data=params)

    # エラーを検知出来るように
    if response.status_code < 200 or response.status_code > 299:
        print("ツイート失敗")

実行結果↓

ツイートを投稿することが出来ました。
この書き方の良いところは、目的ごとにURLとparamsを書き換えてあげるだけなので可読性が高く、メンテナンスしやすいところにあります。
紹介したい書き方は以上になります。
せっかくなので色々試してます。

色々試してみる

main.py
#! /usr/bin/python3
# -*- coding: utf-8 -*-
from define_client import define_client_proc

# OAuthの認証オブジェクトの作成
twitter = define_client_proc()
tweetUrl = 'https://api.twitter.com/1.1/statuses/update.json'
showUrl = 'https://api.twitter.com/1.1/statuses/show.json'
timelineUrl = "https://api.twitter.com/1.1/statuses/user_timeline.json"
# --------------------------------------------------------------------
# ツイートを投稿する。
def post_tweet():
    # ツイートする内容を記述
    tweet_text = "Pythonを使ってTwitterAPIからツイートします。"
    # params変数に格納する
    params = {
        "status": tweet_text,
    }
    # OAuth認証オブジェクトを呼び出して、postする。
    response = twitter.post(url=tweetUrl, data=params)

    # エラーを検知出来るように
    if response.status_code < 200 or response.status_code > 299:
        print("ツイート失敗")
	
# リプライを投稿する
def post_reply():
    # ツイートする内容を記述
    reply_text = "Pythonを使ってTwitterAPIからツイートします。"
    # params変数に格納する
    params = {
        "status": tweet_text,
	# リプライしたいツイートのTweetIDを記入
	"in_reply_to_status_id": tweet_id
    }
    # postする。
    twitter.post(url=tweetUrl, data=params)
    
# ツイートの基本情報を取得
def get_tweet_info():
    getInfoParams = {
        "id": tweet_id
    }
    # paramsを指定してgetする
    tweetInfo_response = twitter.get(url=showUrl, params=getInfoParams)
    tweetInfo = tweetInfo_response.json()
    print(tweetInfo)
    
# 自分のタイムラインを取得
def getTargetTimeline():
    getTimelineParams = {
	# だれのタイムラインを取得するか
        "screen_name": screen_name,
	# 何個集めるか
        "count": 100
    }
    twitter.get(url=timelineUrl, params=getTimelineParams)

こんな感じで色々と書くことが出来ます。
今回はここまで。
反応が多ければ、他にもTwitterAPIを使って遊んでみようと思うので、ぜひコメントください。

株式会社DOKOSOREのプロダクト紹介

せっかくなので、プロダクトの紹介
Yondle(ヨンドル) スマホで読書が出来るようになる電子書籍リーダー(開発中)
https://yondle.jp/
GOTSUGO(ゴツゴー) あなたのカレンダーから空いている時間を自動抽出します。日程調整の際に使ってください
https://chrome.google.com/webstore/detail/gotsugo/chkfpbeliinnfbkjcmicaoooopkhnpcc

Discussion