关于Tweepy的api的问题



1.api:stream.filter()。我读过文档,里面说所有参数都可以是可选的。然而,当我把它空着的时候,它就不起作用了。

  1. 仍然是api的问题。据说,如果我编写如下代码:
twitter_stream.filter(locations = [-180,-90, 180, 90])

它可以过滤所有带有地质信息的推文。然而,当我检查json数据时,我仍然发现许多tweet,它们的属性geo的值仍然为空。

3.我试着使用流来获取尽可能多的推文。然而,据说它可以实时获得推文。有什么参数可以设置时间吗喜欢收集2013年至2015年的推文

4.我试图通过用户及其追随者收集数据,并继续同样的步骤,直到我收到尽可能多的推文。所以我的代码如下:

import tweepy
import chardet
import json
import sys
#set one global list to store all user_names
users_unused = ["Raithan8"]
users_used = []
def process_or_store(tweet):
print(json.dumps(tweet))
consumer_key = 
consumer_secret = 
access_token = 
access_token_secret = 
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True)
def getAllTweets():
#initialize one empty list tw store all tweets
screen_name = users_unused[0]
users_unused.remove(screen_name)
users_used.append(screen_name)
print("this is the current user: " + screen_name)
for friend in tweepy.Cursor(api.friends, screen_name = screen_name).items():
if friend not in users_unused and friend not in users_used:
users_unused.append(friend.screen_name)
for follower in tweepy.Cursor(api.followers, screen_name = screen_name).items():
if follower not in users_unused and follower not in users_used:
users_unused.append(follower.screen_name)
print(users_unused)
print(users_used)
alltweets = []
#tweepy limits at most 200 tweets each time
new_tweets = api.user_timeline(screen_name = screen_name, count = 200)
alltweets.extend(new_tweets)
if not alltweets:
return alltweets
oldest = alltweets[-1].id - 1
while(len(new_tweets) <= 0):
new_tweets = api.user_timeline(screen_name = screen_name, count = 200, max_id = oldest)
alltweets.extend(new_tweets)
oldest = alltweets[-1].id - 1
return alltweets
def storeTweets(alltweets, file_name = "tweets.json"):
for tweet in alltweets:
json_data = tweet._json
data = json.dumps(tweet._json)
with open(file_name, "a") as f:
if json_data['geo'] is not None:
f.write(data)
f.write("n")
if __name__ == "__main__":
while(1):
if not users_unused:
break
storeTweets(getAllTweets())

我不明白为什么它跑得这么慢。也许这主要是因为我初始化花呢API如下

api = tweepy.API(auth, wait_on_rate_limit=True)

但如果我不以这种方式初始化它,它将引发以下错误:

raise RateLimitError(error_msg, resp)
tweepy.error.RateLimitError: [{'message': 'Rate limit exceeded', 'code': 88}]

2)带坐标的推文和按位置过滤是有区别的。

按位置筛选意味着发件人位于您的筛选器范围内。如果你将其设置为全局twitter_stream.filter(locations = [-180,-90, 180, 90]),它将为在偏好中设置国家名称的人返回推文。

如果你需要按坐标过滤(一条有坐标的推文),你可以看看我的博客文章。但基本上,你需要设置一个监听器,然后检查推特是否有坐标。

3和4)Twitter的搜索API和Twitter的流媒体API在许多方面和速率限制(Tweepy)和Twitter速率限制的限制有所不同。

您有一个限制关于您想要获得多少条推文(过去)。

再次检查Tweepy API,因为wait_on_rate_limit设置为true,请等待您的当前限制窗口再次可用。这就是为什么它像你说的那样"慢"。

然而,使用流API并没有这样的限制。

最新更新