2012-06-10 22 views
6

Tôi hiện đang gặp sự cố khi lấy mã mẫu để sử dụng tweepy để truy cập API phát trực tuyến của Twitter để chạy đúng (err ... hoặc ít nhất là cách tôi mong đợi nó chạy). Tôi đang sử dụng một bản sao gần đây của tweepy từ GitHub (có nhãn phiên bản 1.9) và Python 2.7.1.Sử dụng tweepy để truy cập API truyền trực tuyến của Twitter

Tôi đã thử mã ví dụ từ ba nguồn khác nhau, trong từng trường hợp sử dụng "twitter" như một thuật ngữ kiểm tra để theo dõi:

  1. O'Rilley câu trả lời mã: viết blog How to Capture Tweets in Real-time with Twitter's Streaming API

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

  3. Kho lưu trữ ví dụ Tweepy trên GitHub (trong đó, như Andrew Robinson đã thực hiện, có thể dễ dàng sửa đổi để hỗ trợ xác thực OAuth): streamwatcher.py

Trong cả ba trường hợp, tôi nhận được kết quả tương tự: Xác thực thành công, không có lỗi nào được tạo và vòng lặp chương trình chính dường như đang thực thi bất kỳ sự cố nào. Tôi thấy việc sử dụng mạng nhảy lên khoảng 200KB/s và quá trình python nhảy tới gần 100% mức sử dụng CPU, vì vậy tôi nghĩ rằng dữ liệu đang được nhận. Không có gì là đầu ra cho giao diện điều khiển, tuy nhiên.

Tôi nghi ngờ rằng lớp Luồng của tweepy không gọi phương thức gọi lại tùy chỉnh vì một số lý do. Tôi đã thử viết lại các phương thức gọi lại trong mỗi ví dụ để tạo ra đầu ra bất cứ khi nào chúng được gọi, dường như để xác nhận điều này. Đây là một đoạn mã thử nghiệm rất đơn giản dựa trên mục blog của Andrew Robinson (tất nhiên, với khóa ứng dụng của tôi đã bị xóa):

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

Tôi làm gì sai?

Trả lời

10

Tôi chạy vào này là tốt và cố định nó trên kiểm tra địa phương của tôi bằng cách thay đổi dòng 160 trong streaming.py để

if delimited_string.strip().isdigit(): 

Điều này dường như là một vấn đề được biết đến/lỗi trong Tweepy - nên đã kiểm tra các vấn đề danh sách trước khi làm tất cả những gì gỡ lỗi :) -

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

+0

Cảm ơn !!! Làm việc như người ở. Ngoài ra, cảm ơn cho đề xuất để kiểm tra danh sách các vấn đề trên GitHub - đó có thể là những gì tôi thực sự cần biết ;-) –

Các vấn đề liên quan