1

我正在尝试找到一种方法来不使用搜索 API 获得相同的推文。这就是我正在做的事情:

  1. 向 Twitter 发出请求
  2. 商店推文
  3. 向 Twitter 发出另一个请求
  4. 商店推文,
  5. 比较 2 和 4 的结果

理想情况下,在第 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()  
4

1 回答 1

1

除了“since_id”之外,您还可以使用“max_id”。来自Twitter API 文档

在结果集中迭代:count、until、since_id、max_id 等参数允许控制我们如何迭代搜索结果,因为它可能是一大组推文。

通过动态设置这些值,您可以限制搜索结果不重叠。例如,max_id 设置为 1100,since_id 设置为 1000,然后您将拥有 ID 介于这两个值之间的推文。

于 2013-12-19T10:59:52.873 回答