2012-06-10 5 views
6

Attualmente sto riscontrando problemi nell'ottenere codice di esempio per l'utilizzo di tweepy per accedere all'API di streaming di Twitter per funzionare correttamente (err ... o almeno come mi aspetto che funzioni). Sto usando un recente clone di tweepy da GitHub (etichettato versione 1.9) e Python 2.7.1.Utilizzo di tweepy per accedere all'API di streaming di Twitter

ho provato codice di esempio da tre fonti, in ogni caso l'utilizzo di "Twitter" come termine di prova per il monitoraggio:

  1. O'Rilley Risposte Codice: blog How to Capture Tweets in Real-time with Twitter's Streaming API

  2. Andrew Robinson : Using Tweepy to access the Twitter Stream

  3. Tweepy repository su GitHub esempi (che, come ha fatto Andrew Robinson, può essere facilmente modificato per supportare l'autenticazione OAuth): streamwatcher.py

In tutti e tre i casi si ottiene lo stesso risultato: l'autenticazione ha esito positivo, non vengono prodotti errori e il ciclo del programma principale sembra essere in esecuzione senza problemi. Vedo l'utilizzo della rete passare a circa 200 KB/s, e il processo Python salta a quasi il 100% di utilizzo della CPU, quindi penso che i dati vengano ricevuti. Tuttavia, non viene emesso nulla sulla console.

Sospetto che la classe Stream di tweepy non stia chiamando il metodo di callback personalizzato per qualche motivo. Ho provato a riscrivere i metodi di callback in ogni esempio per produrre l'output ogni volta che vengono chiamati, il che sembra confermarlo. Questo è uno molto semplice po 'di codice di prova sulla base di blog di Andrew Robinson (con le chiavi della mia app rimosso, ovviamente):

# -*- coding: utf-8 -*- 

import tweepy 

consumer_key = '' 
consumer_secret = '' 

access_token_key = '' 
access_token_secret = '' 

auth1 = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth1.set_access_token(access_token_key, access_token_secret) 

class StreamListener(tweepy.StreamListener): 
    def on_status(self, tweet): 
     print 'Ran on_status' 

    def on_error(self, status_code): 
     print 'Error: ' + repr(status_code) 
     return False 

    def on_data(self, data): 
     print 'Ok, this is actually running' 


l = StreamListener() 
streamer = tweepy.Stream(auth=auth1, listener=l) 
#setTerms = ['hello', 'goodbye', 'goodnight', 'good morning'] 
setTerms = ['twitter'] 
streamer.filter(track = setTerms) 

Che cosa sto facendo di sbagliato?

risposta

10

mi sono imbattuto in questo pure e fissato sulla mia cassa locale modificando la linea 160 in streaming.py per

if delimited_string.strip().isdigit(): 

Questo sembra essere un problema noto/bug nel Tweepy - dovrebbe avere controllato i problemi lista prima di fare tutto ciò che il debug :) -

https://github.com/tweepy/tweepy/pull/173 https://github.com/tweepy/tweepy/pull/182

+0

Grazie !!! Ha funzionato come un fascino. Inoltre, grazie per il suggerimento di controllare la lista dei problemi su GitHub - probabilmente è quello che dovevo assolutamente sapere ;-) –