カーソルのチュートリアル

このチュートリアルでは、Cursorオブジェクトによるページネーションの詳細について説明します。

イントロダクション

Twitter APIの開発では、ページネーションを多く使用しています。タイムライン、ユーザリスト、ダイレクトメッセージなどを繰り返し処理するページングを実行するには、リクエストごとにページ/カーソルパラメータを指定する必要があります。ここでの問題は、ページネーションループを管理するために多くのボイラープレートコードが必要になることです。ページ番号を簡単にし、必要なコードを少なくするためにTweepyにはCursorオブジェクトがあります。

古い方法とカーソル

最初に認証されたユーザーのタイムラインのツイートを繰り返し表示する方法を示します。Cursorオブジェクトが導入される前に、「古い方法」とする方法は次のとおりです。

page = 1
while True:
    statuses = api.user_timeline(page=page)
    if statuses:
        for status in statuses:
            # process status here
            process_status(status)
    else:
        # All done
        break
    page += 1  # next page

ご覧のとおり、ページネーションループをするためには「page」パラメータを管理する必要があります。次に、Cursorオブジェクトを使用したコードを示します。

for status in tweepy.Cursor(api.user_timeline).items():
    # process status here
    process_status(status)

今それははるかに良く見えます!カーソルはシーンの背後にある私たちのすべてのページ分割作業を処理するので、コードは結果を処理することに集中することができます。

APIメソッドにパラメータを渡す

APIメソッドにパラメータを渡す必要がある場合は以下のようにします。

api.user_timeline(id="twitter")

callableをCursorに渡すときパラメータを直接メソッドに渡すことはできません。代わりに、パラメータをCursorコンストラクタメソッドに渡します。:

tweepy.Cursor(api.user_timeline, id="twitter")

Cursorはリクエストがあったときにパラメータをメソッドに渡します。

Items or Pages

これまでは、アイテムごとにページネーションの反復処理を実演しました。代わりに結果のページごとに処理したい場合は pages()メソッドを使用します。

for page in tweepy.Cursor(api.user_timeline).pages():
    # page is a list of statuses
    process_page(page)

Limits

n個のアイテムやページだけが返されるようにしたい場合は、items()メソッドまたはpages()メソッドに制限を渡します。

# Only iterate through the first 200 statuses
for status in tweepy.Cursor(api.user_timeline).items(200):
    process_status(status)

# Only iterate through the first 3 pages
for page in tweepy.Cursor(api.user_timeline).pages(3):
    process_page(page)