アプリケーション関連

本節では Twitter REST API の application 系機能について記す。と言ってはみたものの、実のところ利用するものは一つだけだ。

GET application/rate_limit_status

GET application/rate_limit_status は現在の API 利用制限状況を知る機能だ。例えばツイートを短時間に連続投稿するには限度があるわけだが、今からどのくらいの時間帯にどれだけツイートすることが可能かを具体的に知ることができる。

#!/usr/bin/env python

# Demonstration GET application/rate_limit_status
# See https://dev.twitter.com/rest/reference/get/application/rate_limit_status

from secret import twitter_instance
from json import dump
import sys

tw = twitter_instance()

# [1]
resource_families = ('lists,' 'users', 'statuses', 'search')
csv = ','.join(resource_families)

# [2]
response = tw.application.rate_limit_status(resources=csv)

# [2]
dump(response, sys.stdout, ensure_ascii=False, indent=4, sort_keys=True)
  • [1] 状況を知りたい機能の一つ上位の単位の名前をいくつかまとめる CSV 文字列を組む。欲張って全部のインターフェイスを指定するとおそらく良くないことが起こる。

  • [2] パラメーター resources として CSV 文字列を与え、リクエストを送信する。

  • [3] 受信内容を出力する。

次に実行例を示す。長くなるので一部を省略する。

bash$ ./application-rate_limit_status.py
{
    "rate_limit_context": {
        "access_token": "..."
    },
    "resources": {
        "lists": {
            "/lists/list": {
                "limit": 15,
                "remaining": 15,
                "reset": 1450622609
            },
            ...
        },
        "search": {
            "/search/tweets": {
                "limit": 180,
                "remaining": 180,
                "reset": 1450622609
            }
        },
        "statuses": {
            "/statuses/friends": {
                "limit": 15,
                "remaining": 15,
                "reset": 1450622609
            },
            ...
        },
        "users": {
            "/users/derived_info": {
                "limit": 15,
                "remaining": 15,
                "reset": 1450622609
            },
            ...
        }
    }
}

ここで reset だけがわかりにくいので説明を加える。これは利用制限の再設定がかかる時刻を POSIX 時刻表現で表した数値だ。見慣れた時刻表現にするならば、Python 標準のメソッド datetime.datetime.fromtimestamp を利用する等の方法がある。

>>> import datetime
>>> datetime.datetime.fromtimestamp(1450622609).strftime('%c')
'Sun Dec 20 23:43:29 2015'