2012-11-04 28 views
5

Tôi đã làm việc với thư viện Tweepy cho python để truy cập luồng twitter công khai và gặp sự cố khi luồng đang chạy, nó không dừng lại. Bây giờ, điều đó có ý nghĩa với những gì nó làm, nhưng tôi muốn nó bắt đầu lọc với một danh sách ID người dùng trống và sau một thời gian, userID được thêm vào danh sách sau khi ai đó tweet một từ theo dõi cụ thể, để một khi họ tweet một từ , trình theo dõi bắt đầu theo dõi tất cả các tweet của họ. Vấn đề là một khi dòng được bắt đầu với các tùy chọn lọc ban đầu, việc thay đổi các biến không ảnh hưởng đến bộ lọc; nó chỉ tiếp tục sử dụng các đối số ban đầu.Bộ lọc luồng công cộng Tweepy bằng biến thay đổi

userIDs = [] 

trackWords = ["#Obama"] 

def stream(): 

    s = Stream(auth, StreamListener()) 

    s.filter(follow = userIDs, track = trackWords) 

tôi đã có thể để có được xung quanh trước này bằng cách nhắc lại định nghĩa dòng một lần nữa sau khi một từ khóa mới được thêm vào, nhưng tôi có nhiều luồng tìm kiếm và tôi đặt chúng trong chủ đề riêng biệt vì vậy tất cả chúng có thể chạy cùng một lúc. Tôi không thể tìm ra cách để làm mới các chủ đề, do đó, cố gắng làm mới bộ lọc mà không nhớ lại định nghĩa có vẻ dễ dàng hơn.

Tôi khá mới để lập trình, vì vậy có lẽ đây là một khái niệm cơ bản mà tôi chưa biết, nhưng hy vọng có một mẹo dễ dàng để làm cho nó làm mới.

Đây là tất cả các mã liên quan của tôi nếu điều đó giúp bất kỳ ai. Ở trên chỉ là một cách nhanh chóng để giúp hiển thị những gì tôi đang nói về:

userIDs = [] 
userNames = [] 

account = ['@DMS_423'] 

publicKeyWords = ['the','be','to','of','and','are','is','were','was'] 

class AStreamListener(StreamListener): 
    def on_status(self, status): 
     if status.author.screen_name not in userNames: 
      userNames.append(str(status.author.screen_name)) 
      userIDs.append(str(api.get_user(str(status.author.screen_name)).id)) 
      print status.author.screen_name, "has joined the game." 

def uStream(): 
    s = Stream(auth, StreamListener()) 
    s.filter(follow = userIDs) 

def pStream(): 
    ps = PStream(pAuth, PStreamListener()) 
    ps.filter(track = publicKeyWords) 

def aStream(): 
    adds = Stream(auth, AStreamListener()) 
    adds.filter(track = account) 

t1 = Thread(target = aStream) 
t2 = Thread(target = uStream) 
t3 = Thread(target = pStream) 

def run(): 
    t1.start() 
    t2.start() 
    t3.start() 

run() 

Trả lời

1

Thư viện python Tweepy API không hỗ trợ hành vi bạn đang tìm kiếm. Không có cách nào để sửa đổi các thông số liên quan đến luồng đang được đăng ký.

Thực tế, chính API Twitter không hỗ trợ thay đổi thông số giữa luồng. Họ đi xa như cảnh báo chống lại nó. Đó không phải là để nói rằng nó sẽ không thể làm cho nó hoạt động (chỉ cần cảnh giác và tránh vượt quá giới hạn tốc độ).

Tôi muốn điều chỉnh cách tiếp cận của bạn để khởi tạo luồng thứ hai với các tham số truy vấn mới, sử dụng id tweet để tránh truyền/lưu lại các tweet tương tự hai lần và sau đó khi luồng thứ 2 được thiết lập, bạn sẽ đóng luồng ban đầu .

0

Nếu bạn muốn dừng tweet ở điều kiện/yêu cầu nhất định về số lượng tweet, hãy chỉnh sửa self.num_tweets = 0 và giữ số đếm trên đó và u có thể sử dụng làm giới hạn, trong def on_status