O Twitter é amplamente utilizado para fins de pesquisa (centífica e de mercado), especialmente por possuir uma API muito versátil que permite simular basicamente qualquer ação possível do usuário, além da possibilidade de escuta na API de Streaming para coletar dados sobre termos específicos. Dentre as diversas bibliotecas disponíveis para usar a API do Twitter, a Tweepy, implementada em Python, é muito bem aceita pela maior parte dos desenvolvedores por ser eficiente e de fácil utilização. A forma mais fácil de instalar o Tweepy é através do PIP (gerenciador de pacotes Python):
1 |
sudo pip install tweepy |
Se ainda não tiver o PIP instalado, pode obtê-lo nas distros Linux pelo apt-get:
1 |
sudo apt-get install python-pip |
O próximo passo é registrar sua aplicação na plataforma de desenvolvimento do Twitter. Após registrar sua aplicação, será necessário copiar 4 informações da mesma: a consumer key, o consumer secret, o access token e o access token secret. O código possui as declarações para essas informações na seção de autenticação.
Onde encontrar as chaves de autenticação
Essa é a única alteração a ser feita no código para torná-lo operacional. Todavia, o método on_status é o método que manipula os objetos de tweets que são recebidos pelo streaming. No exemplo, apenas para fins de demonstração, o método recupera o nome do autor e o texto do tweet, bem como favorita o mesmo. Poderia também persisti-lo em um banco de dados, por exemplo, ou realizar qualquer outra ação de acordo com a necessidade do programador.
O CÓDIGO-FONTE: TWEEPY
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import tweepy # Pegando a consulta por parâmetro consulta = sys.argv[1:] #Autenticações consumer_key = '' consumer_secret = '' access_token = '' access_token_secret = '' auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth) #Coletando tweets class CustomStreamListener(tweepy.StreamListener): def on_status(self, tweet): #Quando receber algum status, esta função pode manipular o objeto tweet. Exemplos: print tweet.author.screen_name print tweet.text.encode('utf-8') api.create_favorite(tweet.id) return True def on_error(self, status_code): print "Erro com o código:", status_code return True # Não mata o coletor def on_timeout(self): print "Tempo esgotado!" return True # Não mata o coletor #Criando o coletor com timeout de 60 seg streaming_api = tweepy.streaming.Stream(auth, CustomStreamListener(), timeout=60) streaming_api.filter(follow=None, track=consulta, languages=["pt"]) |
Se preferir, pode baixar o arquivo com o código-fonte aqui.
Para executar o código acima, é necessário passar como parâmetro os termos a serem buscados pela API. Para buscar para os termos “nintendo”, “zelda” e “super mario”, por exemplo, a execução seria da seguinte forma (supondo que o código acima foi salvo no arquivo coletor.py):
1 |
python coletor.py "nintendo" "zelda" "super mario" |
Em sua forma padrão, o feedback visual no console seria o nome do autor e texto do tweet. É válido ressaltar que a API de Streaming do Twitter não promete a captura de todos os tweets relacionados aos termos da escuta, especialmente trending topics, que possuem grande volume de dados. Ainda assim, fornece quantidade estatisticamente significante para análise do assunto em questão. Em caso de dúvidas ou problemas, utilize os comentários ou entre em contato!
35 Comentários
André
1 de Abril de 2018 at 11:33Bom dia, Ronan! Estou iniciando nesse ramo de análise de dados e estou com dificuldade para executar o seu Script. Você poderia me explicar mais detalhadamente? Muito obrigado e parabéns pela iniciativa!
Ronan Lopes
2 de Abril de 2018 at 15:23Olá, André! A forma de execução está descrita no post… os únicos parâmetros necessários são os termos da consulta. Vou te enviar por email o arquivo com o código-fonte e exemplo de execução. Obrigado pelo contato!
Priscila
15 de Abril de 2018 at 23:33Olá Ronan Lopes, boa noite. Por favor, poderia menenviar também o arquivo com código fonte e um exemplo de execução. Estou batendo cabeça aqui. Seriei muitíssimo grata.
Ronan Lopes
15 de Abril de 2018 at 23:37Boa noite, Priscila! O email foi enviado… qualquer dúvida só responder o contato. Obrigado!
Vinícius Seixas
3 de Maio de 2018 at 15:47Olá Ronan, Por favor, quando possível poderia me enviar também o arquivo com código fonte e o exemplo de execução? Estou iniciando na área e estou com algumas dificuldades. Agradeço desde já.
Ronan Lopes
3 de Maio de 2018 at 15:51Boa tarde, Vinicius! O email foi enviado… qualquer dúvida só responder o contato. Obrigado!
Gustavo Ferreira
4 de Maio de 2018 at 09:43Ola Ronan, queria me enviasse o arquivo com código fonte e um exemplo de execução também se possível, Obrigado.
Ronan Lopes
4 de Maio de 2018 at 11:18Bom dia, Gustavo! Foi encaminhado no seu email. Qualquer coisa estou à disposição
Ursula
6 de junho de 2018 at 00:17Ei Ronan, você poderia me enviar o código fonte e um exemplo de execução também por favor? Muito obrigada!
Ronan Lopes
6 de junho de 2018 at 00:27Boa noite, Ursula! Encaminhei um email com detalhes. Obrigado!
Andre
20 de agosto de 2018 at 12:46Ronan, boa tarde!
Estou com problemas com relação ao encode. Mesmo copiando o código acima, que está com utf-8, a saida do print continua a não mostrar corretamente a acentuação. Sabe me ajudar?
Ronan Lopes
21 de agosto de 2018 at 14:54Boa tarde, André! Dá uma olhada nas respostas desse tópico no stackoverflow: https://pt.stackoverflow.com/questions/67604/encoding-utf-8-permite-acentos, que tem alguns testes que você pode executar no console pra verificar o que pode estar ocorrendo. Em ambiente linux (ubuntu 18.04) o código acima é suficiente para execução correta. Qualquer coisa entre em contato. Obrigado!
Marco
5 de novembro de 2018 at 15:26Boa tarde Ronan!
Poderia me enviar, por gentileza, um exemplo?
Ronan Lopes
5 de novembro de 2018 at 15:30Boa tarde, Marco! Encaminhei um email com um exemplo. Qualquer dúvida só retornar o contato. Obrigado!
Danielle Ribeiro
22 de novembro de 2018 at 14:41Olá Ronan, boa tarde
Eu gostaria de saber se é possível me enviar, por gentileza, um exemplo. Eu não estou conseguindo captar os dados.
Obrigada pela ajuda.
Ronan Lopes
22 de novembro de 2018 at 14:47Olá, Danielle. Boa tarde! Encaminhei pra você o email com o código-fonte e os detalhes da execução. Qualquer coisa estou à disposição, obrigado!
Sannytet
7 de dezembro de 2018 at 04:16Make a more new posts please 🙂
___
Sanny
Sannytet
11 de dezembro de 2018 at 22:36Nice posts! 🙂
___
Sanny
Helena
15 de Março de 2019 at 16:00Olá Ronan, tudo bem?
Gostaria de saber qual o volume máximo de tweets que eu consigo capturar?
Posso usar o método com várias opções no track,? Por exemplo:
streaming_api.filter(follow=None, track=[“assalto”, “sequestro”,”roubo”], languages=[“pt”])
Você poderia também me enviar o código fonte e um exemplo de execução por favor?
Muito obrigada!
Ronan Lopes
27 de Janeiro de 2020 at 13:38Olá, Helena!
Você não precisa se preocupar quanto ao rate limit da streaming API, uma vez que você abre uma conexão e recebe os tweets de acordo com o envio da API. Esse limite deve ser observado apenas para a API REST. Entretanto, é válido ressaltar que a Streaming API assegura uma coleta relativamente baixa do total de tweets do assunto (cerca de 1%, segundo algumas pesquisas).
Pode usar mais de um termo sim, inclusive no exemplo que vou te enviar no email, há mais de um termo a ser buscado. Obrigado!
João Augusto
24 de Maio de 2019 at 00:18Boa noite, primeiramente gostaria de parabenizá-lo pelo ótimo material, muito bom mesmo. Tenho uma dúvida, os resultados dessas buscas vão vir com datas específicas, tipo posso estipular um período, ou só vem tweets postados daquele momento para frente?
Obrigado
Ronan Lopes
24 de Maio de 2019 at 11:30Bom dia, João! Obrigado pelas considerações. Nesse caso, estamos utilizando a streaming api, então ele “escuta” os tweets que estão sendo postados com os termos consultados. Para recuperar tweets retroativos, dê uma olhada na Search API, não é muito difícil de utilizar também. Abraço
Jonas Luersen
10 de junho de 2019 at 16:54Boa tarde, poderia me enviar o código? também sou aluno da PUC Minas, preciso capturar tweets para uma análise de sentimentos.
Luciana
27 de Janeiro de 2020 at 11:50Olá, Ronan.
Excelente post! Eu estava mesmo procurando algo a respeito.
Mas está dando erro com o código 401 quando executo.
Poderia enviar-me o código por e-mail?
Grata
Luciana
Ronan Lopes
27 de Janeiro de 2020 at 13:36Boa tarde, Luciana! Obrigado… o erro de 401 é de autenticação. Sugiro verificar se seus tokens estão corretos (você pode acessar sua aplicação em https://developer.twitter.com/en/apps e verificar). Outra possibilidade é ver se sua data/hora estão desajustados. Conforme explicado em (https://stackoverflow.com/questions/26827790/401-error-while-using-tweepy), se uma requisição estiver mais de 15 minutos fora do servidor do twitter, ele retorna erro 401 também. Boa sorte na resolução!
Luciana
19 de Abril de 2023 at 15:22Funcinou. Obrigada!
Ronan Lopes
27 de Janeiro de 2020 at 13:36Quanto ao código-fonte, tem o link pra download no corpo do post: https://www.ronanlopes.me/public/coletor_tweets.zip. Abraço!
JONATA PAULINO DA COSTA
28 de Fevereiro de 2020 at 14:31Ronan, muito bom seu tutorial. Gostaria de saber como eu poderia baixar tweets de anos anteriores com o paython.
Ronan Lopes
2 de Março de 2020 at 11:37Muito obrigado, Jonata! Para o exemplo do post, utiliza-se a Streaming API, que escuta em tempo real. Para recuperar tweets de anos anteriores, você teria que usar a search API com um parâmetro de data. Dê uma olhada em https://stackoverflow.com/questions/19563733/twitter-api-1-1-search-tweets-search-by-date, deve te ajudar! Bons trabalhos
Marco
8 de Março de 2021 at 16:54Ronan, gostaria de saber se tem como extrair os tweets de uma conta específica? Ex: Extrair as publicações do trump sobre terra plana. Algo do tipo. Se vim, você poderia me explicar? Estava mexendo no Python e consigo pesquisar por #, por @ de usuário não consegui.
Ronan Lopes
10 de Março de 2021 at 14:12Boa tarde, Marco! É possível sim, mas nesse caso não seria um coletor via Streaming API, seria outro endpoint, que recupera a timeline de um usuário. Dentro dos tweets recuperados, você poderia filtrar pelo atributo de texto aqueles que contém o termo desejado. Mais sobre o endpoint aqui: https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/overview
Marco
10 de Março de 2021 at 14:28Obrigado, vou dar uma olhada.
Wagner Nunes
6 de Abril de 2021 at 19:05Roanan, apesar de ter instalado o tweepy o meu código está apresentando o seguinte erro: ModuleNotFoundError: No module named ‘tweepy’
Ronan Lopes
7 de Abril de 2021 at 13:01Boa tarde, Wagner! Alguns dos usuários que relataram problema em instalar o tweepy neste tópico (https://stackoverflow.com/questions/31431002/unable-to-import-tweepy-module) tiveram sucesso ao instalar pelo anaconda, com o comando conda install -c conda-forge tweepy. Fica uma alternativa para a instalação. Bons trabalhos!
Mikaelle
2 de Fevereiro de 2022 at 00:43Olá! Poderia me enviar um e-mail com o código-fonte e os detalhes da execução? Sou iniciante no Python e gostaria de aprender. Aliás, parabéns pelo post!