Как сохранить потоковые твиты в json через tweepy?

Я изучал Python в течение нескольких месяцев через онлайн-курсы и хотел бы продолжить свое обучение с помощью реального мини-проекта.

Для этого проекта я хотел бы собрать твиты из потокового API Twitter и сохранить их в формате json (хотя вы можете просто сохранить ключевую информацию, такую ​​как status.text, status.id, мне посоветовали, что это лучший способ сделать это, чтобы сохранить все данные и выполнить обработку после). Однако с добавлением on_data () код перестает работать. Кто-нибудь сможет помочь, пожалуйста? Я также открыт для предложений о лучшем способе хранения / обработки твитов! Моя конечная цель - иметь возможность отслеживать твиты на основе демографических переменных (например, страна, возраст профиля пользователя и т. Д.) И настроений отдельных брендов (например, Apple, HTC, Samsung).

Кроме того, я также хотел бы попробовать отфильтровать твиты по местоположению и ключевым словам. Я адаптировал код изКак добавить фильтр местоположения в модуль tweepy по отдельности. Однако, хотя он работает, когда есть несколько ключевых слов, он останавливается, когда количество ключевых слов растет. Я предполагаю, что мой код неэффективен. Есть ли лучший способ сделать это?

### code to save tweets in json###
import sys
import tweepy
import json

consumer_key=" "
consumer_secret=" "
access_key = " "
access_secret = " "

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)
file = open('today.txt', 'a')

class CustomStreamListener(tweepy.StreamListener):
    def on_status(self, status):
        print status.text

    def on_data(self, data):
        json_data = json.loads(data)
        file.write(str(json_data))

    def on_error(self, status_code):
        print >> sys.stderr, 'Encountered error with status code:', status_code
        return True # Don't kill the stream

    def on_timeout(self):
        print >> sys.stderr, 'Timeout...'
        return True # Don't kill the stream

sapi = tweepy.streaming.Stream(auth, CustomStreamListener())
sapi.filter(track=['twitter'])

Ответы на вопрос(3)

Ваш ответ на вопрос