2013-05-09 347 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,然后您将在这两个值之间发送推文。

相关问题