In [1]:
from time import sleep
In [2]:
sleep(5)
print("Dormiu por 5 segundos")
In [3]:
from time import gmtime
print(gmtime(0))
In [4]:
from time import time
print(time())
Referência e outros exemplos: https://docs.python.org/3/library/time.html
Além 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 [5]:
import tweepy
In [6]:
consumer_key = ''
consumer_secret = ''
access_token = ''
access_token_secret = ''
In [7]:
autorizar = tweepy.OAuthHandler(consumer_key, consumer_secret)
autorizar.set_access_token(access_token, access_token_secret)
Segue abaixo as soluções encontradas para os problemas do último desafio.
1) Falta fechar o arquivo e 2) Falta finalizar a execução do Streaming;
Para esses dois problemas conseguimos tratar dentro do método on_data. O retorno padrão da função é True, portanto enquanto não acontecer alguma ação que diga que não é mais True, o código irá recuperar dados.
Portanto, quando criamos a condição de parada (5 minutos), podemos retornar False, encerrando a execução do Streaming. Nessa mesma condição, antes do retorno, podemos fechar o arquivo. Como mostra o código abaixo.
if(time() - self.tempo_inicial < self.limite):
self.salvar_arquivo.write(dados)
return True
else:
self.salvar_arquivo.close()
return False
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.
A função open tem um parâmetro chamado newline em que podemos definir como vazio, desta forma não teremos esse problema. Veja código abaixo:
open(nome_arq, 'a', newline='')
Bom, vamos ao código final agora.
In [8]:
class DadosPublicosTwitter(tweepy.StreamListener):
def __init__(self, nome_arq, limite):
self.tempo_inicial = time()
self.limite = limite # 5 minutos == 300 segundos
self.salvar_arquivo = open(nome_arq, 'a', newline='')
def on_data(self, dados):
if(time() - self.tempo_inicial < self.limite):
self.salvar_arquivo.write(dados)
return True
else:
self.salvar_arquivo.close()
return False
In [9]:
nome_arq = 'tweets_5min.json'
dados_twitter = DadosPublicosTwitter(nome_arq, 300)
In [10]:
fluxo = tweepy.Stream(autorizar, dados_twitter)
In [11]:
fluxo.filter(track=['Big Data'])
Agora sim, podemos salvar muitos tweets durante um determinado período de tempo!!!!
In [ ]: