Como salvar tweets de streaming em json via tweepy?
Estou aprendendo Python há alguns meses por meio de cursos on-line e gostaria de aprofundar meu aprendizado em um mini-projeto do mundo real.
Para este projeto, eu gostaria de coletar tweets da API de streaming do twitter e armazená-los no formato json (embora você possa optar por salvar apenas as informações principais, como status.text, status.id, fui avisado de que a melhor maneira fazer isso é salvar todos os dados e fazer o processamento depois). No entanto, com a adição de on_data (), o código deixa de funcionar. Alguém poderia ajudar por favor? Também estou aberto a sugestões sobre a melhor maneira de armazenar / processar tweets! Meu objetivo final é poder rastrear tweets com base em variáveis demográficas (por exemplo, país, idade do perfil do usuário etc.) e no sentimento de determinadas marcas (por exemplo, Apple, HTC, Samsung).
Além disso, também gostaria de tentar filtrar os tweets por local e por palavras-chave. Eu adaptei o código deComo adicionar um filtro de localização ao módulo tweepy separadamente. No entanto, embora funcione quando há poucas palavras-chave, para quando o número de palavras-chave aumenta. Presumo que meu código seja ineficiente. Existe uma maneira melhor de fazer isso?
### 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'])