processamento de tweets em tempo real com python, django e celery - tdc 2014

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

Post on 22-Nov-2014

2.904 views

Category:

Software

47 download

Embed Size (px)

DESCRIPTION

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.

TRANSCRIPT

  • 1. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 PROCESSAMENTO DE TWEETS EM TEMPO REAL Saturday, August 9, 14
  • 2. Saturday, August 9, 14
  • 3. SigaSeuTime lana o Tuitmetro do futebol brasileiro Ferramenta permite acompanhar em tempo real a "empolgao" do torcedores no Twitter. Quais os assuntos mais discutidos sobre o futebol brasileiro no Twitter? Qual a torcida mais empolgada? Qual a repercusso de um gol? Perguntas como essas j podem ser respondidas em tempo real atravs do Tuitmetro do futebol brasileiro, servio indito que acaba de ser lanado. Segundo Miguel Galves, scio-diretor do SigaSeuTime, empresa responsvel pelo desenvolvimento da ferramenta, diz que a idia nasceu da prpria experincia com o universo digital: "Nosso principal servio a curadoria e a distribuio de contedo de terceiros. Foi justamente a repercusso desse contedo entre os usurios que inspirou o produto: e se a gente quantificasse e consolidasse essa repercusso, transformando-a em informao? Da nasceu o Tuitmetro." A primeira verso do Tuitmetro foi ao ar acom panhando os 20 times da srie A do futebol brasileiro. Traz, alm 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 BILHO DE PESSOAS ESTO FAZENDO NESTE MOMENTO? Saturday, August 9, 14
  • 5. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 Really Big Data 650MM de usurios Mdia de 500MM de tweets / dia Mdia 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 Verso 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 distribuda Processamento assncrono Processamento distribudo / paralelo Processamento escalvel Escrito em Python... Saturday, August 9, 14
  • 11. Miguel Galves | @mgalves Processamento de tweets em tempo real | TDC2014 Porque Django? Excelente servidor de aplicaes: Commands ORM que funciona Ambiente organizado Prmio: 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 conexo por usurio e por IP permitida Django Command: abre conexo permanente e joga resultados no celery broker Varivel conforme a carga necessria. 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 necessrias para autenticao 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 persistncia 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 assncrona 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 assncrona 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 conexo 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 mdia 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 lana o Tuitmetro do futebol brasileiro Ferramenta permite acompanhar em tempo real a "empolgao" do torcedores no Twitter. Quais os assuntos m