カーソルのチュートリアル¶
このチュートリアルでは、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)