Przesyłanie strumieniowe z Tweepy

Tweepy ułatwia używanie API Twittera do przesyłania strumieniowego poprzez obsługę uwierzytelniania i połączenia, tworzenia i niszczenia nadchodzących wiadomości oraz częściowe przekierowywanie wiadomości.

Celem tej strony jest objaśnienie pierwszych kroków na temat rozpoczęcia przesyłania strumieniowego Twittera używając Tweepy. Niektóre funkcje przesyłania strumieniowego Tweepy nie są tu wyjaśnione. Po więcej informacji sprawdź streaming.py w kodzie źródłowym Tweepy.

Uwierzytelnienie API jest wymagane by uzyskać dostęp do strumienia Twittera. Sprawdź Poradnik uwierzytelniania jeżeli potrzebujesz pomocy z uwierzytelnianiem.

Podsumowanie

API przesyłania strumieniowego Twittera jest używane do pobierania wiadomości z Twittera w czasie rzeczywistym. Jest to przydatne do zdobywania dużej ilości tweetów lub do tworzenia przekazu na żywo używając strumienia strony lub strumienia użytkownika. Zobacz Dokumentację API przesyłania strumieniowego Twittera.

API przesyłania strumieniowego różni się od REST API ponieważ REST API używane jest do ściągania danych z Twittera a API przesyłania strumieniowego wypycha wiadomości do trwałej sesji. Pozwala to API przesyłania strumieniowego do pobrania większej ilości danych w czasie rzeczywistym niż jest to możliwe używając REST API.

W Tweepy, instancja tweepy.Stream ustanawia sesję przesyłania strumieniowego i przekierowywuje wiadomości do instancji StreamListener. Metoda on_data odbiornika strumienia otrzymuje wszystkie wiadomości i nazywa funkcje według typu wiadomości. Domyślny StreamListener może sklasyfikować większość prostych wiadomości z Twittera i przekierować je do odpowiednio nazwanych metod, jednak metody te są tylko pniami.

Używanie API przesyłania strumieniowego zawiera się w trzech krokach.

  1. Utwórz klasę dziedziczącą od StreamListener
  2. Używając tej klasy stwórz obiekt Stream
  3. Połącz się z Twitter API używając Stream.

Krok 1: Tworzenie StreamListener

Ten prosty odbiornik strumienia wyświetla tekst statusu. Metoda on_data używana przez StreamListener Tweepy wygodnie przekazuje dane ze statuu do metody on_status. Stwórz klasę MyStreamListener* dziedziczącą od **StreamListener i nadpisującą on_status.:

import tweepy
#override tweepy.StreamListener to add logic to on_status
class MyStreamListener(tweepy.StreamListener):

    def on_status(self, status):
        print(status.text)

Krok 2: Tworzenie Stream

Do przesyłania strumieniowego potrzebne jest API. Zajrzyj do Poradnik uwierzytelniania by dowiedzieć się jak zdobyć obiekt API. Gdy masz już API oraz odbiornik statusu, możesz stworzyć własny obiekt strumienia.:

myStreamListener = MyStreamListener()
myStream = tweepy.Stream(auth = api.auth, listener=myStreamListener)

Krok 3: Uruchamianie strumienia

W Tweepy dostępne są różne strumienie Twittera. W większości przypadków będą one używać filtrów user_stream lub sitestream. Po więcej informacji na temat możliwości i ograniczeń poszczególnych strumieni zajrzyj do Dokumentacji API przesyłania strumieniowego Twittera.

W tym przykładzie użyty zostanie filter do przesłania strumieniowego wszystkich tweetów zawierających słowo python. Parametr track jest szykiem wyszukiwanych pojęć.

myStream.filter(track=['python'])

W tym przykładzie pokazane zostanie jak użyć filter do przesyłania strumieniowego tweetów wybranego użytkownika. Parametr follow jest szykiem zawierającym ID.

myStream.filter(follow=["2211149702"])

Prostym sposobem na znalezienie pojedyńczego ID jest użycie jednej z wielu stron internetowych do konwersji: szukaj «jakie jest moje twitter ID».

Kilka innych wskaźników

Przesyłanie strumieniowe asynchroniczne

Strumienie nie zatrzymują się dopóki połączenie nie zostanie zamknięte, co zablokuje nić. Tweepy oferuje wygodny parametr is_async w filter co pozwala strumieniowi działać na nowej nici. Na przykład:

myStream.filter(track=['python'], is_async=True)

Obsługa błędów

Używając API przesyłania strumieniowego Twittera należy być świadomym niebezpieczeństw związanych z limitowaniem współczynników. Jeżeli klient przekroczy liczbę prób połqczenia w określonym czasie z API przesyłania strumieniowego to zwrócony zostanie błąd 420. Czas oczekiwania na ponowną próbę połączenia po otrzymaniu błędu 420 będzie gwałtownie zwiększał się za każdą kolejną nieudaną próbą.

Stream Listener Tweepy przekazuje kod błędu do pnia on_error. Domyślne ustawienie zwraca False dla wszytkich kodów, jednak możliwe jest nadpisanie ustawień tak by umożliwiły one Tweepy ponowne połączenie się po otrzymaniu części lub wszystkich kodów. Możliwe jest to używając strategii rekomendowanych w Dokumentacji łączenia z API przesyłania strumieniowego Twittera.:

class MyStreamListener(tweepy.StreamListener):

    def on_error(self, status_code):
        if status_code == 420:
            #returning False in on_error disconnects the stream
            return False

        # returning non-False reconnects the stream, with backoff.

Po więcej informacji na temat kodów błędów z API Twittera zajrzyj do Dokumentacji kodów odpowiedzi Twittera.