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.


In [ ]:
import tweepy

In [ ]:
consumer_key = ''
consumer_secret = ''
access_token = ''
access_token_secret = ''

In [ ]:
autorizar = tweepy.OAuthHandler(consumer_key, consumer_secret)
autorizar.set_access_token(access_token, access_token_secret)

2. Modificar nossa classe para utilizar o método on_data

Ver slides 36 até 40.


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

In [ ]:
dados_twitter = DadosPublicosTwitter()
fluxo = tweepy.Stream(autorizar, dados_twitter)

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

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.


In [ ]:
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)

In [ ]:
dados_twitter = DadosPublicosTwitter()

In [ ]:
fluxo = tweepy.Stream(autorizar, dados_twitter)

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

Ótimo! Já estamos conseguindo salvar os tweets em um arquivo. Porém ainda temos alguns tratamentos que precisam ser realizados:

1) Falta fechar o arquivo; 
2) Falta finalizar a execução do Streaming; 
3) Cada tweet deve ficar em uma linha; Abra o arquivo tweets.json e veja que existe uma linha em branco entre os tweets salvos.

Vamos ao próximo Desafio!!!


In [ ]: