2016-08-10 25 views
7

Mục tiêu cuối cùng là sử dụng tìm kiếm api tweepy để tập trung vào các chủ đề (ví dụ: docker) và EXCLUDE retweets. Tôi đã xem xét các chủ đề khác đề cập đến việc loại trừ các tweet nhưng chúng hoàn toàn có thể áp dụng được. Tôi đã cố gắng kết hợp những gì tôi đã học được vào mã bên dưới nhưng tôi tin rằng đoạn mã "nếu không" nằm sai chỗ. Bất kỳ trợ giúp nào cũng được đánh giá rất cao.Tweepy - Loại trừ Retweets

#!/usr/bin/python 
import tweepy 
import csv #Import csv 
import os 

# Consumer keys and access tokens, used for OAuth 
consumer_key = 'MINE' 
consumer_secret = 'MINE' 
access_token = 'MINE' 
access_token_secret = 'MINE' 

# OAuth process, using the keys and tokens 
auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_token_secret) 


api = tweepy.API(auth) 
# Open/Create a file to append data 
csvFile = open('docker1.csv', 'a') 
#Use csv Writer 
csvWriter = csv.writer(csvFile) 


ids = set() 
for tweet in tweepy.Cursor(api.search, 
        q="docker", 
        Since="2016-08-09", 
        #until="2014-02-15", 
        lang="en").items(5000000): 
if not tweet['retweeted'] and 'RT @' not in tweet['text']: 
    #Write a row to the csv file/ I use encode utf-8 
    csvWriter.writerow([tweet.created_at, tweet.text.encode('utf-8'), tweet.favorite_count, tweet.retweet_count, tweet.id, tweet.user.screen_name]) 
    #print "...%s tweets downloaded so far" % (len(tweet.id)) 
    ids.add(tweet.id) # add new id 
    print ("number of unique ids seen so far: {}",format(len(ids))) 
csvFile.close() 

Error Message

+0

có lỗi nào bạn gặp phải không? hoặc bạn chỉ đang tìm kiếm tối ưu hóa mã? – harshil9968

+0

@ harshi9968 nhận được nhiều lần xóa ... Cú pháp không chính xác, đối tượng 'Trạng thái' không có thuộc tính '--getitem--' ... Từ nghiên cứu các bài đăng khác tôi biết rằng 'if not tweet [' tweeted '] và' RT @ 'không phải trong tweet [' văn ​​bản '] 'là những gì tôi muốn, nhưng tôi không chắc chắn chính xác nơi để đặt nó trong mã để có được những gì tôi cần – hansolo

+0

bạn có thể gửi một ảnh chụp màn hình của các lỗi? – harshil9968

Trả lời

7

Vì vậy tweet là một đối tượng không phải là một JSON hoặc dict, bạn không nên truy cập vào nó như tweet['retweeted']tweet['text']

Thay vì sử dụng dòng này:

if not tweet.retweeted: 

Hoặc cho trường hợp sử dụng của bạn:

if (not tweet.retweeted) and ('RT @' not in tweet.text): 
+0

rất hữu ích. cám ơn bạn một lần nữa. Câu hỏi nhanh để khen cái này ... Nếu tôi muốn chuyển các tham số bổ sung vào câu lệnh if thì điều đó có thể thực hiện được không? Ví dụ: nếu tôi chỉ muốn đưa các tweet vào tweet.favorite_count hoặc tweet.retweet_count> 0, tôi có thể làm điều gì đó như: 'if (not tweet.retweeted) và ('RT @' không có trong tweet.text) và (tweet.favorite_count> 0): ' – hansolo

+0

có nó sẽ như thế, nếu nó giúp xin vui lòng accpet câu trả lời và upvote. – harshil9968

9

Ngoài các câu trả lời được chấp nhận, tôi sẽ đề nghị bạn nên thay đổi các yêu cầu bạn thực hiện, từ q="docker" để q="docker -filter:retweets"

này sẽ ngăn chặn hầu hết các retweets từ thậm chí xuất hiện trong kết quả.

+0

Điều này làm việc cho tôi. Bạn có thể làm tương tự cho bất kỳ toán tử chuẩn nào khác trên mỗi tài liệu Twitter: https://developer.twitter.com/en/docs/tweets/rules-and-filtering/overview/standard-operators – user2467163