2013-05-09 59 views
1

我正試圖找到一種方法來獲取使用搜索API的相同推文。 這就是我在做什麼:如何使用python-twitter搜索API獲取最新的推特ID

  1. 做出Twitter的
  2. 商店鳴叫
  3. 的請求做出另一個請求到Twitter的
  4. 商店鳴叫,
  5. 從2和4
  6. 比較結果

理想情況下,在第5步我會得到0,這意味着沒有重疊鳴叫接收。所以我沒有多次向Twitter服務器詢問相同的信息。

但我覺得我陷入了第3步,在那裏我不得不打了另一個電話。我試圖使用'since_id'參數在某些特定點之後獲取推文。但我不確定如果我使用的價值是正確的。

代碼:

import twitter 

class Test(): 

    def __init__(self): 
     self.t_auth() 
     self.hashtag = ['justinbieber'] 

     self.tweets_1 = [] 
     self.ids_1 = [] 
     self.created_at_1 = [] 
     self.tweet_text_1 = [] 
     self.last_id_1 = '' 
     self.page_1 = 1 

     self.tweets_2 = [] 
     self.ids_2 = [] 
     self.created_at_2 = [] 
     self.tweet_text_2 = [] 
     self.last_id_2 = '' 
     self.page_2 = 1 


     for i in range(1,16): 
      self.tweets_1.extend(self.api.GetSearch(self.hashtag, per_page=100, since_id=self.last_id_1, page=self.page_1)) 
      self.page_1 += 1; 
     print len(self.tweets_1) 
     for t in self.tweets_1: 
      self.ids_1.insert(0,t.id) 
      self.created_at_1.insert(0,t.created_at) 
      self.tweet_text_1.insert(0,t.text) 
      self.last_id_1 = t.id    

     self.last_id_2 = self.last_id_1 

     for i in range(1,16): 
      self.tweets_2.extend(self.api.GetSearch(self.hashtag, per_page=100, since_id=self.last_id_2, page=self.page_2)) 
      self.page_2 += 1; 
     print len(self.tweets_2) 
     for t in self.tweets_2: 
      self.ids_2.insert(0,t.id) 
      self.created_at_2.insert(0,t.created_at) 
      self.tweet_text_2.insert(0,t.text) 
      self.last_id_2 = t.id 

     print 'Total number of tweets in test 1: ', len(self.tweets_1) 
     print 'Last id of test 1: ', self.last_id_1 

     print 'Total number of tweets in test 2: ', len(self.tweets_2) 
     print 'Last id of test 2: ', self.last_id_2 

     print '##################################' 
     print '#############OVERLAPING###########' 

     ids_overlap = set(self.ids_1).intersection(self.ids_2) 
     tweets_text_overlap = set(self.tweet_text_1).intersection(self.tweet_text_2) 
     created_at_overlap = set(self.created_at_1).intersection(self.created_at_2) 

     print 'Ids: ', len(ids_overlap) 
     print 'Text: ', len(tweets_text_overlap) 
     print 'Created_at: ', len(created_at_overlap) 

     print ids_overlap 
     print tweets_text_overlap 
     print created_at_overlap 



    def t_auth(self): 
     consumer_key="xxx" 
     consumer_secret="xxx" 
     access_key = "xxx" 
     access_secret = "xxx" 

     self.api = twitter.Api(consumer_key, consumer_secret ,access_key, access_secret) 
     self.api.VerifyCredentials() 

     return self.api 

if __name__ == "__main__": 
    Test() 
+0

您可以創建一個不同的陣列,並以降序存儲Since_ID,然後在進行任何調用之前查找頂部。 – LonelySoul 2013-06-12 14:55:58

回答

1

除了 'since_id',你可以使用 'max_id'。從Twitter API documentation

迭代結果集中:參數,計數,直到since_id,max_id允許控制我們如何在搜索結果中迭代,因爲它可能是一大套的鳴叫。

通過動態設置這些值,可以限制搜索結果不重疊。例如,max_id設置爲1100,since_id設置爲1000,然後您將在這兩個值之間發送推文。