如何使用Twython从Twitter搜索或流媒体API获取超过100条推文

3 投票
2 回答
6637 浏览
提问于 2025-04-18 06:10

我想知道怎么用Twython这个库来获取所有提到“#Accounting”的推文,比如说在纽约的推文。

我之前用了Twitter的搜索API,但只能获取到100条推文。

然后我试着用Twitter的流式过滤API,但我没法按地理位置筛选,而且感觉速度慢得要命。我听说可以把所有推文存到数据库里,然后再进行汇总,但我在想有没有更快的方法。

这是我的代码:

from twython import Twython

TWITTER_APP_KEY = 'XXXX'
TWITTER_APP_KEY_SECRET = 'XXXX'
TWITTER_ACCESS_TOKEN = 'XXXX'
TWITTER_ACCESS_TOKEN_SECRET = 'XXXX'

t = Twython(app_key=TWITTER_APP_KEY, 
            app_secret=TWITTER_APP_KEY_SECRET, 
            oauth_token=TWITTER_ACCESS_TOKEN, 
            oauth_token_secret=TWITTER_ACCESS_TOKEN_SECRET)

search = t.search(q='#Accounting', 
                    geocode='-74,40,-73,41',
                    since_id='1',
                    max_id='504082008759488512'
                  )

tweets = search['statuses']
count=0
for tweet in tweets:
    count+=1
    print tweet['id_str'], '\n', tweet['text'], '\n\n\n'

print count

这是我用流式API的代码:

from twython import TwythonStreamer
APP_KEY = 'XXXX'
APP_SECRET = 'XXXX' 
OAUTH_TOKEN = 'XXXX'
OAUTH_TOKEN_SECRET = 'XXXX'

class MyStreamer(TwythonStreamer):
  tweets=[] 
  def on_success(self, data):
    if 'text' in data:
        tweet= data['text'].encode('utf-8')
        if 'Accounting' in tweet:
          tweets.append(tweet)
          print tweet

  def on_error(self, status_code, data):
    print status_code
    self.disconnect()

stream = MyStreamer(APP_KEY, APP_SECRET,
                    OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

stream.statuses.filter(location=['-74,40,-73,41'])

谢谢!

2 个回答

-2

根据 这个链接

Count 是可选的

这个参数用来设置每页返回的推文数量,最多可以返回100条。默认情况下是15条。在旧版搜索API中,这个参数叫做“rpp”。

示例值:100

看起来你最多只能获取100条推文 :(

9

你一次只能查询100条数据,但你可以指定从哪个ID开始查询(或者说要大于或小于哪个ID)。

所以你可以先查询前100条,然后找到其中最小的ID,再进行一次查询,这次把那个ID减1作为你的最大ID。这样就能返回接下来的100条数据,然后把这些新数据加到之前的结果里。

你可以根据需要重复这个过程,只要注意Twitter的查询频率限制就行。

如果你想获取最新的推文,可以使用t.setMaxId()或t.setSinceId(),分别设置为比你当前的最小ID或最大ID更低或更高的值。

撰写回答