O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

7.375 visualizações

Publicada em

O que meio bilhão de pessoas estão fazendo ou pensando neste exato momento? A análise de conteúdo do Twitter por responder a esta pergunta, e a muitas outras.

Publicada em: Software
  • Seja o primeiro a comentar

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

  1. 1. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 PROCESSAMENTO DE TWEETS EM TEMPO REAL Saturday, August 9, 14
  2. 2. Saturday, August 9, 14
  3. 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. 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. 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. 6. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 Real Time Second Screen Saturday, August 9, 14
  7. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 21. Processa em média 500 tweets por minuto, com picos de até 2000 tweets. Saturday, August 9, 14
  22. 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. 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. 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. 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

×