SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
PROCESSAMENTO DE TWEETS
EM TEMPO REAL
Saturday, August 9, 14
Saturday, August 9, 14
SigaSeuTime lança o Tuitômetro do futebol brasileiro
Ferramenta permite acompanhar em tempo real a
"empolgação" do torcedores no Twitter.
Quais os assuntos mais discutidos sobre o futebol
brasileiro no Twitter? Qual a torcida mais empolgada?
Qual a repercussão de um gol? Perguntas como essas
já podem ser respondidas em tempo real através do
Tuitômetro do futebol brasileiro, serviço inédito que
acaba de ser lançado.
Segundo Miguel Galves, sócio-diretor do SigaSeuTime, empresa responsável pelo desenvolvimento
da ferramenta, diz que a idéia nasceu da própria experiência com o universo digital: "Nosso principal
serviço é a curadoria e a distribuição de conteúdo de terceiros. Foi justamente a repercussão desse
conteúdo entre os usuários que inspirou o produto: e se a gente quantificasse e consolidasse essa
repercussão, transformando-a em informação? Daí nasceu o Tuitômetro."
A primeira versão do Tuitômetro foi ao ar
acom panhando os 20 times da série A do
futebol brasileiro. Traz, além da "tempera-
tura da torcida" (representada pela quanti-
dade de tweets por minuto, por pessoa e o
acumulado do dia), os assuntos mais co-Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
O QUE MEIO BILHÃO DE
PESSOAS ESTÃO FAZENDO
NESTE MOMENTO?
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
Really Big Data
•650MM de usuários
•Média de 500MM de tweets / dia
•Média de 5700 tweets / segundo
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
Real Time
Second Screen
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
API generosa
•Streaming API
•Real Time
•Versão envia até 1% de todos os tweets
•4MM tweets / dia
https://dev.twitter.com/docs/api/streaming
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
SEM MAIS BLÁ BLÁ BLÁ,
VAMOS À RECEITA DE BOLO
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
Componentes
•Python / Virtualenv
•Django
•Tweepy
•Celery
•Redis (Message Queue para Celery)
•Twitter API APP
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
Porque Celery?
•Fila de tarefas distribuída
•Processamento assíncrono
•Processamento distribuído / paralelo
•Processamento escalável
•Escrito em Python...
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
Porque Django?
•Excelente servidor de aplicações:
•Commands
•ORM que funciona
•Ambiente organizado
•Prêmio: admin, shell, settings
Saturday, August 9, 14
Arquitetura
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC214
Twitter Grabber Celery Broker
Celery Worker
Celery Worker
Celery Worker
Streaming API
Apenas uma conexão
por usuário e por IP
permitida
Django Command:
abre conexão
permanente e joga
resultados no
celery broker
Variável conforme a carga
necessária. Podem rodar
no mesmo servidor ou
em diferentes servidores
REDIS
...
Saturday, August 9, 14
apps.twitter.com
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC214
Crie um app no Twitter, e obtenha os dois pares
de chaves necessárias para autenticação OAUTH.
Saturday, August 9, 14
Miguel Galves | @mgalves
Montando ambiente...
Instale o servidor REDIS
Monte um ambiente virtualenv
> pip install django
> pip install tweepy
> pip install celery
> pip install celery[redis]
Crie seu projeto Django
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
models.py
from django.db import models
class Tweet(models.Model):
id_str = models.CharField(max_length=255, unique=True)
text = models.CharField(max_length=255)
author = models.CharField(max_length=255)
Model Django que define um
tweet resumido para persistência
na base de dados.
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
celery.py
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE',
'grabber.settings')
app = Celery('grabber')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
Configura o Celery no sistema,
utilizando como base o arquivo
settings.py, e carregando
automagicamente tasks definidas
nos apps.
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
tasks.py import logging
from celery import shared_task
from .models import Tweet
LOGGER = logging.getLogger("grabber")
@shared_task
def persist_tweet(tweet):
try:
id_str = tweet["id_str"]
author = tweet["user"]["screen_name"]
text = tweet["text"]
Tweet.objects.create(id_str = id_str,
author = author,
text = text)
LOGGER.info("Tweet %s recorded" % (id_str))
except Exception, e:
LOGGER.exception(e)
Task assíncrona que recebe um
tweet em formato json, e persiste
na base de dados.
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
tweetgrabber.py (1)
class GrabberListener(StreamListener):
def on_data(self, data):
if data:
tweet = json.loads(data)
persist_tweet.delay(tweet)
return True
def on_error(self, status):
LOGGER.error("Twitter Error %s" % status)
return FalseListener que recebe os dados da
Streaming API, transforma o
JSON em estrutura de dados e
passa para a tarefa assíncrona
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
tweetgrabber.py (2)
class Command(BaseCommand):
def execute(self, *args, **options):
auth = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
keywords = list(args)
if keywords:
LOGGER.info("TWITTER SEARCH PARAMS = %s" % keywords)
listener = GrabberListener()
stream = Stream(auth, listener)
stream.filter(track=keywords)
else:
LOGGER.info("NO KEYWORDS")
Command Django que abre a
conexão com a Streaming API
utilizando OAuth, e define
listener.
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
Ativando o grabber
> redis-server
> celery -A grabber worker
> python manage.py tweetgrabber
Saturday, August 9, 14
Processa em média 500 tweets por
minuto, com picos de até 2000 tweets.
Saturday, August 9, 14
Na derrota do Corinthians para o
Tolima em 2011, processamos
picos de 5000 / tweets por minutos.
:-(
SigaSeuTime lança o Tuitômetro do futebol brasileiro
Ferramenta permite acompanhar em tempo real a
"empolgação" do torcedores no Twitter.
Quais os assuntos mais discutidos sobre o futebol
brasileiro no Twitter? Qual a torcida mais empolgada?
Qual a repercussão de um gol? Perguntas como essas
já podem ser respondidas em tempo real através do
Tuitômetro do futebol brasileiro, serviço inédito que
acaba de ser lançado.
Segundo Miguel Galves, sócio-diretor do SigaSeuTime, empresa responsável pelo desenvolvimento
da ferramenta, diz que a idéia nasceu da própria experiência com o universo digital: "Nosso principal
serviço é a curadoria e a distribuição de conteúdo de terceiros. Foi justamente a repercussão desse
conteúdo entre os usuários que inspirou o produto: e se a gente quantificasse e consolidasse essa
repercussão, transformando-a em informação? Daí nasceu o Tuitômetro."
A primeira versão do Tuitômetro foi ao ar
acom panhando os 20 times da série A do
futebol brasileiro. Traz, além da "tempera-
tura da torcida" (representada pela quanti-
dade de tweets por minuto, por pessoa e o
acumulado do dia), os assuntos mais co-Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC214
http://dev.twitter.com
http://celeryproject.org
http://redis.io
http://djangoproject.com
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC214
Projeto disponível no GitHub. Forkeie a vontade...
https://github.com/mgalves/tweetrecorder
Saturday, August 9, 14
Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014
obrigado ;)
@mgalves
mgalves@gmail.com
http://github.com/mgalves/
http://br.linkedin.com/in/mgalves
Me livrei da minha conta no facebook.
Saturday, August 9, 14

Mais conteúdo relacionado

Destaque

Finanças Quantitativas com python
Finanças Quantitativas com pythonFinanças Quantitativas com python
Finanças Quantitativas com pythonWilson Freitas
 
import pybr12: experiencias de inclusión en la última PyCon Brazil
import pybr12: experiencias de inclusión en la última PyCon Brazilimport pybr12: experiencias de inclusión en la última PyCon Brazil
import pybr12: experiencias de inclusión en la última PyCon BrazilFATEC São José dos Campos
 
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...Danilo J. S. Bellini
 
Scaling Apache Storm - Strata + Hadoop World 2014
Scaling Apache Storm - Strata + Hadoop World 2014Scaling Apache Storm - Strata + Hadoop World 2014
Scaling Apache Storm - Strata + Hadoop World 2014P. Taylor Goetz
 
Storm: distributed and fault-tolerant realtime computation
Storm: distributed and fault-tolerant realtime computationStorm: distributed and fault-tolerant realtime computation
Storm: distributed and fault-tolerant realtime computationnathanmarz
 
Realtime Analytics with Storm and Hadoop
Realtime Analytics with Storm and HadoopRealtime Analytics with Storm and Hadoop
Realtime Analytics with Storm and HadoopDataWorks Summit
 
Apache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - VerisignApache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - VerisignMichael Noll
 
Hadoop Summit Europe 2014: Apache Storm Architecture
Hadoop Summit Europe 2014: Apache Storm ArchitectureHadoop Summit Europe 2014: Apache Storm Architecture
Hadoop Summit Europe 2014: Apache Storm ArchitectureP. Taylor Goetz
 

Destaque (11)

Finanças Quantitativas com python
Finanças Quantitativas com pythonFinanças Quantitativas com python
Finanças Quantitativas com python
 
import pybr12: experiencias de inclusión en la última PyCon Brazil
import pybr12: experiencias de inclusión en la última PyCon Brazilimport pybr12: experiencias de inclusión en la última PyCon Brazil
import pybr12: experiencias de inclusión en la última PyCon Brazil
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...
 
Resource Aware Scheduling in Apache Storm
Resource Aware Scheduling in Apache StormResource Aware Scheduling in Apache Storm
Resource Aware Scheduling in Apache Storm
 
Scaling Apache Storm - Strata + Hadoop World 2014
Scaling Apache Storm - Strata + Hadoop World 2014Scaling Apache Storm - Strata + Hadoop World 2014
Scaling Apache Storm - Strata + Hadoop World 2014
 
Storm: distributed and fault-tolerant realtime computation
Storm: distributed and fault-tolerant realtime computationStorm: distributed and fault-tolerant realtime computation
Storm: distributed and fault-tolerant realtime computation
 
Realtime Analytics with Storm and Hadoop
Realtime Analytics with Storm and HadoopRealtime Analytics with Storm and Hadoop
Realtime Analytics with Storm and Hadoop
 
Yahoo compares Storm and Spark
Yahoo compares Storm and SparkYahoo compares Storm and Spark
Yahoo compares Storm and Spark
 
Apache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - VerisignApache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - Verisign
 
Hadoop Summit Europe 2014: Apache Storm Architecture
Hadoop Summit Europe 2014: Apache Storm ArchitectureHadoop Summit Europe 2014: Apache Storm Architecture
Hadoop Summit Europe 2014: Apache Storm Architecture
 

Semelhante a Processamento de tweets em tempo real com Python, Django e Celery - TDC 2014

[Conferência SANTA CATARINA 2020] + de 50 dicas para acelerar sua estratégia ...
[Conferência SANTA CATARINA 2020] + de 50 dicas para acelerar sua estratégia ...[Conferência SANTA CATARINA 2020] + de 50 dicas para acelerar sua estratégia ...
[Conferência SANTA CATARINA 2020] + de 50 dicas para acelerar sua estratégia ...E-Commerce Brasil
 
Portfolio Kingo Labs
Portfolio Kingo LabsPortfolio Kingo Labs
Portfolio Kingo LabsKingo Labs
 
Tendências do Vídeo Mobile Marketing em 2016
Tendências do Vídeo Mobile Marketing em 2016Tendências do Vídeo Mobile Marketing em 2016
Tendências do Vídeo Mobile Marketing em 2016Henrique Pimentel
 
Tendências para o Vídeo Mobile Marketing
Tendências para o Vídeo Mobile MarketingTendências para o Vídeo Mobile Marketing
Tendências para o Vídeo Mobile MarketingHenrique Pimentel
 
Twitter - introdução aos usos e possibilidades
Twitter - introdução aos usos e possibilidadesTwitter - introdução aos usos e possibilidades
Twitter - introdução aos usos e possibilidadesPaperCliQ Comunicação
 
Kingo Labs - O que fizemos em 2009?
Kingo Labs - O que fizemos em 2009?Kingo Labs - O que fizemos em 2009?
Kingo Labs - O que fizemos em 2009?Kingo Labs
 
Linck-Se | Programa de Capacitação em Mídias Digitais - 3a parte
Linck-Se | Programa de Capacitação em Mídias Digitais - 3a parteLinck-Se | Programa de Capacitação em Mídias Digitais - 3a parte
Linck-Se | Programa de Capacitação em Mídias Digitais - 3a parteLincks - Real Estate Marketing
 
AI & Big Data - Personalização da Jornada - PicPay - TDC
AI & Big Data - Personalização da Jornada - PicPay - TDCAI & Big Data - Personalização da Jornada - PicPay - TDC
AI & Big Data - Personalização da Jornada - PicPay - TDCRenan Moreira de Oliveira
 
Meetup Métricas de UX – Ladies That UX Florianópolis
Meetup Métricas de UX – Ladies That UX FlorianópolisMeetup Métricas de UX – Ladies That UX Florianópolis
Meetup Métricas de UX – Ladies That UX FlorianópolisLadies That UX Florianópolis
 
Redes e Plataformas Digitais - Comportamento Digital e Redes Sociais 2022
Redes e Plataformas Digitais - Comportamento Digital e Redes Sociais 2022Redes e Plataformas Digitais - Comportamento Digital e Redes Sociais 2022
Redes e Plataformas Digitais - Comportamento Digital e Redes Sociais 2022Renato Melo
 
Fluig Webinar #2 - Digital Workplace, com Ricardo Saldanha
Fluig Webinar #2 - Digital Workplace, com Ricardo SaldanhaFluig Webinar #2 - Digital Workplace, com Ricardo Saldanha
Fluig Webinar #2 - Digital Workplace, com Ricardo SaldanhaFluig
 
TDC2018SP | Trilha Machine Learning - Prevendo o futuro com Time Series Forec...
TDC2018SP | Trilha Machine Learning - Prevendo o futuro com Time Series Forec...TDC2018SP | Trilha Machine Learning - Prevendo o futuro com Time Series Forec...
TDC2018SP | Trilha Machine Learning - Prevendo o futuro com Time Series Forec...tdc-globalcode
 
SEMINCO FURB 2018 Analise de Dados em Plataformas Digitais
SEMINCO FURB 2018   Analise de Dados em Plataformas DigitaisSEMINCO FURB 2018   Analise de Dados em Plataformas Digitais
SEMINCO FURB 2018 Analise de Dados em Plataformas DigitaisRafael Targino
 
5 Motivos para usar o Google App Engine
5 Motivos para usar o Google App Engine5 Motivos para usar o Google App Engine
5 Motivos para usar o Google App EngineJean Donato
 
WEB 2.0 - ferramentas e estratégias de utilização pessoal, profissional e i...
WEB 2.0 - ferramentas e estratégias de utilização pessoal, profissional e i...WEB 2.0 - ferramentas e estratégias de utilização pessoal, profissional e i...
WEB 2.0 - ferramentas e estratégias de utilização pessoal, profissional e i...Pedro Príncipe
 
WIAD 2013 - De detetive a arquiteto da informação
WIAD 2013 - De detetive a arquiteto da informaçãoWIAD 2013 - De detetive a arquiteto da informação
WIAD 2013 - De detetive a arquiteto da informaçãoLu Terceiro
 
NewTwitter como motor textual dos NewsGames - substituição de feeds RSS por m...
NewTwitter como motor textual dos NewsGames - substituição de feeds RSS por m...NewTwitter como motor textual dos NewsGames - substituição de feeds RSS por m...
NewTwitter como motor textual dos NewsGames - substituição de feeds RSS por m...Blog NewsGames
 

Semelhante a Processamento de tweets em tempo real com Python, Django e Celery - TDC 2014 (20)

[Conferência SANTA CATARINA 2020] + de 50 dicas para acelerar sua estratégia ...
[Conferência SANTA CATARINA 2020] + de 50 dicas para acelerar sua estratégia ...[Conferência SANTA CATARINA 2020] + de 50 dicas para acelerar sua estratégia ...
[Conferência SANTA CATARINA 2020] + de 50 dicas para acelerar sua estratégia ...
 
Portfolio Kingo Labs
Portfolio Kingo LabsPortfolio Kingo Labs
Portfolio Kingo Labs
 
Tendências do Vídeo Mobile Marketing em 2016
Tendências do Vídeo Mobile Marketing em 2016Tendências do Vídeo Mobile Marketing em 2016
Tendências do Vídeo Mobile Marketing em 2016
 
Tendências para o Vídeo Mobile Marketing
Tendências para o Vídeo Mobile MarketingTendências para o Vídeo Mobile Marketing
Tendências para o Vídeo Mobile Marketing
 
Twitter
TwitterTwitter
Twitter
 
Consultores Digitais Semana 2 Dia 2 (participantes)
Consultores Digitais Semana 2 Dia 2 (participantes)Consultores Digitais Semana 2 Dia 2 (participantes)
Consultores Digitais Semana 2 Dia 2 (participantes)
 
Twitter - introdução aos usos e possibilidades
Twitter - introdução aos usos e possibilidadesTwitter - introdução aos usos e possibilidades
Twitter - introdução aos usos e possibilidades
 
Kingo Labs - O que fizemos em 2009?
Kingo Labs - O que fizemos em 2009?Kingo Labs - O que fizemos em 2009?
Kingo Labs - O que fizemos em 2009?
 
Linck-Se | Programa de Capacitação em Mídias Digitais - 3a parte
Linck-Se | Programa de Capacitação em Mídias Digitais - 3a parteLinck-Se | Programa de Capacitação em Mídias Digitais - 3a parte
Linck-Se | Programa de Capacitação em Mídias Digitais - 3a parte
 
AI & Big Data - Personalização da Jornada - PicPay - TDC
AI & Big Data - Personalização da Jornada - PicPay - TDCAI & Big Data - Personalização da Jornada - PicPay - TDC
AI & Big Data - Personalização da Jornada - PicPay - TDC
 
Meetup Métricas de UX – Ladies That UX Florianópolis
Meetup Métricas de UX – Ladies That UX FlorianópolisMeetup Métricas de UX – Ladies That UX Florianópolis
Meetup Métricas de UX – Ladies That UX Florianópolis
 
Redes e Plataformas Digitais - Comportamento Digital e Redes Sociais 2022
Redes e Plataformas Digitais - Comportamento Digital e Redes Sociais 2022Redes e Plataformas Digitais - Comportamento Digital e Redes Sociais 2022
Redes e Plataformas Digitais - Comportamento Digital e Redes Sociais 2022
 
Fluig Webinar #2 - Digital Workplace, com Ricardo Saldanha
Fluig Webinar #2 - Digital Workplace, com Ricardo SaldanhaFluig Webinar #2 - Digital Workplace, com Ricardo Saldanha
Fluig Webinar #2 - Digital Workplace, com Ricardo Saldanha
 
TDC2018SP | Trilha Machine Learning - Prevendo o futuro com Time Series Forec...
TDC2018SP | Trilha Machine Learning - Prevendo o futuro com Time Series Forec...TDC2018SP | Trilha Machine Learning - Prevendo o futuro com Time Series Forec...
TDC2018SP | Trilha Machine Learning - Prevendo o futuro com Time Series Forec...
 
SEMINCO FURB 2018 Analise de Dados em Plataformas Digitais
SEMINCO FURB 2018   Analise de Dados em Plataformas DigitaisSEMINCO FURB 2018   Analise de Dados em Plataformas Digitais
SEMINCO FURB 2018 Analise de Dados em Plataformas Digitais
 
5 Motivos para usar o Google App Engine
5 Motivos para usar o Google App Engine5 Motivos para usar o Google App Engine
5 Motivos para usar o Google App Engine
 
WEB 2.0 - ferramentas e estratégias de utilização pessoal, profissional e i...
WEB 2.0 - ferramentas e estratégias de utilização pessoal, profissional e i...WEB 2.0 - ferramentas e estratégias de utilização pessoal, profissional e i...
WEB 2.0 - ferramentas e estratégias de utilização pessoal, profissional e i...
 
WIAD 2013 - De detetive a arquiteto da informação
WIAD 2013 - De detetive a arquiteto da informaçãoWIAD 2013 - De detetive a arquiteto da informação
WIAD 2013 - De detetive a arquiteto da informação
 
NewTwitter como motor textual dos NewsGames - substituição de feeds RSS por m...
NewTwitter como motor textual dos NewsGames - substituição de feeds RSS por m...NewTwitter como motor textual dos NewsGames - substituição de feeds RSS por m...
NewTwitter como motor textual dos NewsGames - substituição de feeds RSS por m...
 
Consultores Digitais semana 1 dia 4 (participantes)
Consultores Digitais semana 1 dia 4 (participantes)Consultores Digitais semana 1 dia 4 (participantes)
Consultores Digitais semana 1 dia 4 (participantes)
 

Mais de Miguel Galves

Redis para iniciantes - TDC 2014
Redis para iniciantes - TDC 2014Redis para iniciantes - TDC 2014
Redis para iniciantes - TDC 2014Miguel Galves
 
New Strategy to detect SNPs
New Strategy to detect SNPsNew Strategy to detect SNPs
New Strategy to detect SNPsMiguel Galves
 
Comparison of Genomic DNA to cDNA Alignment Methods
Comparison of Genomic DNA to cDNA Alignment MethodsComparison of Genomic DNA to cDNA Alignment Methods
Comparison of Genomic DNA to cDNA Alignment MethodsMiguel Galves
 
Qualificação de Mestrado
Qualificação de MestradoQualificação de Mestrado
Qualificação de MestradoMiguel Galves
 
Uma abordagem computacional para a determinação de polimorfismos de base única
Uma abordagem computacional para a determinação de polimorfismos de base únicaUma abordagem computacional para a determinação de polimorfismos de base única
Uma abordagem computacional para a determinação de polimorfismos de base únicaMiguel Galves
 
Django: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento webDjango: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento webMiguel Galves
 
Data Mining em redes sociais
Data Mining em redes sociaisData Mining em redes sociais
Data Mining em redes sociaisMiguel Galves
 

Mais de Miguel Galves (9)

Redis para iniciantes - TDC 2014
Redis para iniciantes - TDC 2014Redis para iniciantes - TDC 2014
Redis para iniciantes - TDC 2014
 
New Strategy to detect SNPs
New Strategy to detect SNPsNew Strategy to detect SNPs
New Strategy to detect SNPs
 
Comparison of Genomic DNA to cDNA Alignment Methods
Comparison of Genomic DNA to cDNA Alignment MethodsComparison of Genomic DNA to cDNA Alignment Methods
Comparison of Genomic DNA to cDNA Alignment Methods
 
Qualificação de Mestrado
Qualificação de MestradoQualificação de Mestrado
Qualificação de Mestrado
 
Uma abordagem computacional para a determinação de polimorfismos de base única
Uma abordagem computacional para a determinação de polimorfismos de base únicaUma abordagem computacional para a determinação de polimorfismos de base única
Uma abordagem computacional para a determinação de polimorfismos de base única
 
Django: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento webDjango: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento web
 
GIS em 3 horas
GIS em 3 horasGIS em 3 horas
GIS em 3 horas
 
AJAX
AJAXAJAX
AJAX
 
Data Mining em redes sociais
Data Mining em redes sociaisData Mining em redes sociais
Data Mining em redes sociais
 

Processamento de tweets em tempo real com Python, Django e Celery - TDC 2014

  • 1. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 PROCESSAMENTO DE TWEETS EM TEMPO REAL Saturday, August 9, 14
  • 3. SigaSeuTime lança o Tuitômetro do futebol brasileiro Ferramenta permite acompanhar em tempo real a "empolgação" do torcedores no Twitter. Quais os assuntos mais discutidos sobre o futebol brasileiro no Twitter? Qual a torcida mais empolgada? Qual a repercussão de um gol? Perguntas como essas já podem ser respondidas em tempo real através do Tuitômetro do futebol brasileiro, serviço inédito que acaba de ser lançado. Segundo Miguel Galves, sócio-diretor do SigaSeuTime, empresa responsável pelo desenvolvimento da ferramenta, diz que a idéia nasceu da própria experiência com o universo digital: "Nosso principal serviço é a curadoria e a distribuição de conteúdo de terceiros. Foi justamente a repercussão desse conteúdo entre os usuários que inspirou o produto: e se a gente quantificasse e consolidasse essa repercussão, transformando-a em informação? Daí nasceu o Tuitômetro." A primeira versão do Tuitômetro foi ao ar acom panhando os 20 times da série A do futebol brasileiro. Traz, além da "tempera- tura da torcida" (representada pela quanti- dade de tweets por minuto, por pessoa e o acumulado do dia), os assuntos mais co-Saturday, August 9, 14
  • 4. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 O QUE MEIO BILHÃO DE PESSOAS ESTÃO FAZENDO NESTE MOMENTO? Saturday, August 9, 14
  • 5. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 Really Big Data •650MM de usuários •Média de 500MM de tweets / dia •Média de 5700 tweets / segundo Saturday, August 9, 14
  • 6. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 Real Time Second Screen Saturday, August 9, 14
  • 7. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 API generosa •Streaming API •Real Time •Versão envia até 1% de todos os tweets •4MM tweets / dia https://dev.twitter.com/docs/api/streaming Saturday, August 9, 14
  • 8. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 SEM MAIS BLÁ BLÁ BLÁ, VAMOS À RECEITA DE BOLO Saturday, August 9, 14
  • 9. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 Componentes •Python / Virtualenv •Django •Tweepy •Celery •Redis (Message Queue para Celery) •Twitter API APP Saturday, August 9, 14
  • 10. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 Porque Celery? •Fila de tarefas distribuída •Processamento assíncrono •Processamento distribuído / paralelo •Processamento escalável •Escrito em Python... Saturday, August 9, 14
  • 11. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 Porque Django? •Excelente servidor de aplicações: •Commands •ORM que funciona •Ambiente organizado •Prêmio: admin, shell, settings Saturday, August 9, 14
  • 12. Arquitetura Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC214 Twitter Grabber Celery Broker Celery Worker Celery Worker Celery Worker Streaming API Apenas uma conexão por usuário e por IP permitida Django Command: abre conexão permanente e joga resultados no celery broker Variável conforme a carga necessária. Podem rodar no mesmo servidor ou em diferentes servidores REDIS ... Saturday, August 9, 14
  • 13. apps.twitter.com Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC214 Crie um app no Twitter, e obtenha os dois pares de chaves necessárias para autenticação OAUTH. Saturday, August 9, 14
  • 14. Miguel Galves | @mgalves Montando ambiente... Instale o servidor REDIS Monte um ambiente virtualenv > pip install django > pip install tweepy > pip install celery > pip install celery[redis] Crie seu projeto Django Saturday, August 9, 14
  • 15. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 models.py from django.db import models class Tweet(models.Model): id_str = models.CharField(max_length=255, unique=True) text = models.CharField(max_length=255) author = models.CharField(max_length=255) Model Django que define um tweet resumido para persistência na base de dados. Saturday, August 9, 14
  • 16. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 celery.py from __future__ import absolute_import import os from celery import Celery from django.conf import settings os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'grabber.settings') app = Celery('grabber') app.config_from_object('django.conf:settings') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) Configura o Celery no sistema, utilizando como base o arquivo settings.py, e carregando automagicamente tasks definidas nos apps. Saturday, August 9, 14
  • 17. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 tasks.py import logging from celery import shared_task from .models import Tweet LOGGER = logging.getLogger("grabber") @shared_task def persist_tweet(tweet): try: id_str = tweet["id_str"] author = tweet["user"]["screen_name"] text = tweet["text"] Tweet.objects.create(id_str = id_str, author = author, text = text) LOGGER.info("Tweet %s recorded" % (id_str)) except Exception, e: LOGGER.exception(e) Task assíncrona que recebe um tweet em formato json, e persiste na base de dados. Saturday, August 9, 14
  • 18. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 tweetgrabber.py (1) class GrabberListener(StreamListener): def on_data(self, data): if data: tweet = json.loads(data) persist_tweet.delay(tweet) return True def on_error(self, status): LOGGER.error("Twitter Error %s" % status) return FalseListener que recebe os dados da Streaming API, transforma o JSON em estrutura de dados e passa para a tarefa assíncrona Saturday, August 9, 14
  • 19. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 tweetgrabber.py (2) class Command(BaseCommand): def execute(self, *args, **options): auth = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_KEY, ACCESS_SECRET) keywords = list(args) if keywords: LOGGER.info("TWITTER SEARCH PARAMS = %s" % keywords) listener = GrabberListener() stream = Stream(auth, listener) stream.filter(track=keywords) else: LOGGER.info("NO KEYWORDS") Command Django que abre a conexão com a Streaming API utilizando OAuth, e define listener. Saturday, August 9, 14
  • 20. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 Ativando o grabber > redis-server > celery -A grabber worker > python manage.py tweetgrabber Saturday, August 9, 14
  • 21. Processa em média 500 tweets por minuto, com picos de até 2000 tweets. Saturday, August 9, 14
  • 22. Na derrota do Corinthians para o Tolima em 2011, processamos picos de 5000 / tweets por minutos. :-( SigaSeuTime lança o Tuitômetro do futebol brasileiro Ferramenta permite acompanhar em tempo real a "empolgação" do torcedores no Twitter. Quais os assuntos mais discutidos sobre o futebol brasileiro no Twitter? Qual a torcida mais empolgada? Qual a repercussão de um gol? Perguntas como essas já podem ser respondidas em tempo real através do Tuitômetro do futebol brasileiro, serviço inédito que acaba de ser lançado. Segundo Miguel Galves, sócio-diretor do SigaSeuTime, empresa responsável pelo desenvolvimento da ferramenta, diz que a idéia nasceu da própria experiência com o universo digital: "Nosso principal serviço é a curadoria e a distribuição de conteúdo de terceiros. Foi justamente a repercussão desse conteúdo entre os usuários que inspirou o produto: e se a gente quantificasse e consolidasse essa repercussão, transformando-a em informação? Daí nasceu o Tuitômetro." A primeira versão do Tuitômetro foi ao ar acom panhando os 20 times da série A do futebol brasileiro. Traz, além da "tempera- tura da torcida" (representada pela quanti- dade de tweets por minuto, por pessoa e o acumulado do dia), os assuntos mais co-Saturday, August 9, 14
  • 23. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC214 http://dev.twitter.com http://celeryproject.org http://redis.io http://djangoproject.com Saturday, August 9, 14
  • 24. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC214 Projeto disponível no GitHub. Forkeie a vontade... https://github.com/mgalves/tweetrecorder Saturday, August 9, 14
  • 25. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 obrigado ;) @mgalves mgalves@gmail.com http://github.com/mgalves/ http://br.linkedin.com/in/mgalves Me livrei da minha conta no facebook. Saturday, August 9, 14