вопросы о API Tweepy - PullRequest
       0

вопросы о API Tweepy

0 голосов
/ 03 февраля 2020

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}]

1 Ответ

1 голос
/ 03 февраля 2020

2) Существует разница между твитом с координатами и фильтрацией по местоположению.

Фильтрация по местоположению означает, что отправитель находится в диапазоне вашего фильтра. Если вы установите его глобально twitter_stream.filter(locations = [-180,-90, 180, 90]), он вернет твиты для людей, которые установили название своей страны в своих предпочтениях.

Если вам нужно отфильтровать по координатам (твит с координатами), вы можете посмотреть на мой блог . Но в основном вам нужно установить прослушиватель, а затем проверить, есть ли в твите какие-либо координаты.

3 и 4) API поиска в Twitter и API потоковой передачи Twitter во многом различаются и имеют ограничения относительно ограничения скорости (Tweepy) и ограничение скорости Twitter .

У вас есть ограничение о том, сколько твитов вы хотите получить (в прошлом).

Проверьте еще раз Tweepy API, поскольку wait_on_rate_limit установлено в значение true, просто подождите, пока ваше текущее окно предела снова станет доступным. Вот почему он «медленный», как вы сказали.

Однако использование потокового API не имеет таких ограничений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...