Poradnik na temat kursorów

Ten poradnik wyjaśnia szczegóły dotyczące stronnicowania używając obiektów kursora.

Wprowadzenie

Stronnicowanie jest często używane w rozwoju Twitter API. Używa się go do iterowania osi czasu, listy użytkowników, bezpośrednich wiadomości itd. Aby wykonać stronnicowanie, musisz dostarczyć stronie lub kursorowi parametr z każdym ze swoich żądań. Problemem tego rozwiązania jest duża ilość boiler plate code wymaganego do zarządzania pętlą stronnicowania. Tweepy używa obiektu kursora by usprawnić stronnicowanie i zmniejszyć objętość kodu.

Stary sposób vs sposób kursora

Na początku zademonstrujemy iterowanie statusów na osi czasu uwierzytelnionego użytkownika. W taki sposób robiło się to „starą metodą” zanim wprowadzony został obiekt kursora.

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

Jak widać musimy manualnie zarządzać parametrem „page” w naszej pętli stronnicowania. A teraz zaprezentujemy wersje kodu, która używa obiektu kursora:

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

Wygląda to dużo lepiej! Kursor załatwia za nas całą sprawę stronnicowania, co pozwala nam skupić się wyłącznie na przetwarzaniu rezultatów.

Przekazywanie parametrów do metody API

Co zrobić jeżeli muszę przekazać parametry do metody API?

api.user_timeline(id="twitter")

Jako że przekazujesz kursorowi obiekt wywoływany, nie możesz przekazać parametrów prosto do metody. Zamiast tego parametry są przekazywane do metody konstruktora kursora:

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

Kursor przekaże parametry do metody gdy tylko stworzy żądanie.

Obiekty czy strony

Do tej pory zademonstrowaliśmy iteracje stronnicowania dla obiektu. Co jeżeli zamiast tego chcesz przetworzyć rezultaty dla strony? Użyj do tego metody pages():

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

Limity

Co jeżeli chcesz by zwrócone zostało n obiektów lub stron? Musisz wtedy przekazać do metod items() lub pages() limit, który chcesz nałożyć.

# 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)