import tweepy

consumer_key = ''
consumer_secret = ''
access_token = ''
access_token_secret = ''

autorizar = tweepy.OAuthHandler(consumer_key, consumer_secret)
autorizar.set_access_token(access_token, access_token_secret)

"""
Explanation: Desafio 2
1. Entender a diferença entre os métodos on_status e on_data
Ver slide 34.
Da mesma forma que fizemos na API REST do Twitter, temos que salvar as chaves de acesso, bem como definir o objeto OAuthHandler para cuidar da autenticação e validação do acesso.
End of explanation
"""


class DadosPublicosTwitter(tweepy.StreamListener):
    def on_data(self, dados):
        print(dados)
        return False

dados_twitter = DadosPublicosTwitter()
fluxo = tweepy.Stream(autorizar, dados_twitter)

fluxo.filter(track=['Big Data'])

"""
Explanation: 2. Modificar nossa classe para utilizar o método on_data
Ver slides 36 até 40.
End of explanation
"""


class DadosPublicosTwitter(tweepy.StreamListener):
    def __init__(self):
        self.salvar_arquivo = open('tweets.json', mode='a')
    
    def on_data(self, dados):
        self.salvar_arquivo.write(dados)

dados_twitter = DadosPublicosTwitter()

fluxo = tweepy.Stream(autorizar, dados_twitter)

try:
    fluxo.filter(track=['Big Data'])
except KeyboardInterrupt:
    print("\n\n **Execução foi encerrada via teclado (Ctrl+C)**")

"""
Explanation: Note que os dados que foram retornados estão no formato JSON. Veja o notebook sobre JSON
3. Revisar a função embutida open para salvar os arquivos
Vamos alterar a classe DadosPublicosTwitter para que quando a mesma for instanciada, crie um arquivo chamado tweets.json e que cada tweet seja adicionado no fim do arquivo. Para isso vamos utilizar o mode='a'.
Ver slide 43.
End of explanation
"""


