text: .. _streaming-api:
  
  Streaming API
  =============
  
  This section will cover how to use Twython and interact with the Twitter Streaming API.
  
  Streaming Documentation: https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types
  
  .. important:: The Streaming API requires that you have OAuth 1 authentication credentials. If you don't have credentials, head over to the :ref:`authentication section <oauth1>` and find out how!
  
  Setting Up Your Streamer
  ------------------------
  
  .. note:: When stream data is sent back to Twython, we send the data through signals (i.e. ``on_success``, ``on_error``, etc.)
  
  Make sure you import ``TwythonStreamer``
  
  .. code-block:: python
  
      from twython import TwythonStreamer
  
  Now set up how you want to handle the signals.
  
  .. code-block:: python
  
      class MyStreamer(TwythonStreamer):
          def on_success(self, data):
              if 'text' in data:
                  print(data['text'])
  
          def on_error(self, status_code, data):
              print(status_code)
  
              # Want to stop trying to get data because of the error?
              # Uncomment the next line!
              # self.disconnect()
  
  More signals that you can extend on can be found in the Developer Interface section under :ref:`Streaming Interface <streaming_interface>`
  
  Filtering Public Statuses
  -------------------------
  
  .. code-block:: python
  
      stream = MyStreamer(APP_KEY, APP_SECRET,
                          OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
      stream.statuses.filter(track='twitter')
  
  With the code above, data should be flowing in.
  
  