2013-06-21 13 views
5

Sto usando twython (libreria API di Twitter per python) per connettermi all'API di streaming, ma sembra che il flusso di Twitter pubblico venga filtrato solo da parole. Non c'è un modo per ottenere un flusso in tempo reale della cronologia utente o di @mentions utente autenticato?Come ottenere menzioni e DM tramite l'API di flusso twitter 1.1? (Utilizzo di twython)

Ho fatto il looping delle chiamate ritardate all'API REST per ottenere quelle citazioni, ma a Twitter non piace che io faccia così tante richieste.

La documentazione di Twython non mi sta aiutando molto, né il documento Twitter ufficiale.

Se esiste un'altra libreria Python che può funzionare meglio di twython per lo streaming (per l'API di Twitter v1.1). Apprezzerei il suggerimento ... Grazie.

risposta

3

All'inizio della mia ricerca ho pensato che python-twitter è la libreria di Twitter per Python. Ma finalmente, sembra che lo Python Twitter Tools siano più popolari e supportano anche lo streaming di Twitter.

È un po 'complicato, l'API di streaming e l'API REST non sono uguali per i messaggi diretti. Questo piccolo script di esempio dimostra come è possibile utilizzare il flusso di utente per ottenere i messaggi diretti:

import twitter # if this module does not 
       # contain OAuth or stream, 
       # check if sixohsix' twitter 
       # module is used! 
auth = twitter.OAuth(
    consumer_key='...', 
    consumer_secret='...', 
    token='...', 
    token_secret='...' 
) 

stream = twitter.stream.TwitterStream(auth=auth, domain='userstream.twitter.com') 

for msg in stream.user(): 
    if 'direct_message' in msg: 
     print msg['direct_message']['text'] 

Questo script stampa tutti i nuovi messaggi - non quelle già ricevute prima di avviare lo script.

0

Non c'è modo di trasmettere messaggi diretti.

Tuttavia, esiste un modo per trasmettere in streaming la timeline di un utente. Controlla la documentazione su Twitter qui: https://dev.twitter.com/docs/streaming-apis/streams/user

from twython import TwythonStreamer 


class MyStreamer(TwythonStreamer): 
    def on_success(self, data): 
     if 'text' in data: 
      print data['text'].encode('utf-8') 
     # Want to disconnect after the first result? 
     # self.disconnect() 

    def on_error(self, status_code, data): 
     print status_code, data 

# Requires Authentication as of Twitter API v1.1 
stream = MyStreamer(APP_KEY, APP_SECRET, 
        OAUTH_TOKEN, OAUTH_TOKEN_SECRET) 

stream.user() 

Fino a quando una nuova versione di requests (https://github.com/kennethreitz/requests) viene rilasciato, tuttavia, i tweet dei tuoi seguaci saranno un post dietro. Questo dovrebbe essere risolto relativamente presto però! :)

+2

Questo sembra essere sbagliato. Lo streaming diretto dei messaggi è menzionato qui: https://dev.twitter.com/docs/streaming-apis/streams/user#Direct_messages – lumbric

+0

Oh, mi dispiace; Non ho mai visto quella documentazione. –

+0

Aggiorna o elimina la risposta per riflettere lo streaming DM. – Sheharyar