1. API: stream.filter (). Я прочитал документацию, в которой сказано, что все параметры могут быть необязательными. Однако, когда я оставил его пустым, он не будет работать.
Еще вопрос с api. Говорят, что если я напишу код, подобный приведенному ниже:
twitter_stream.filter(locations = [-180,-90, 180, 90])
Он может фильтровать все твиты с геологической информацией. Однако, когда я проверяю данные json, я все еще нахожу много твитов, значение их атрибута 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())
Не знаю, почему он работает так медленно. Может быть, это в основном потому, что я инициализирую tweepy API, как показано ниже
api = tweepy.API(auth, wait_on_rate_limit=True)
Но если я не инициализирую его таким образом, это вызовет ошибку ниже:
raise RateLimitError(error_msg, resp)
tweepy.error.RateLimitError: [{'message': 'Rate limit exceeded', 'code': 88}]