hackeando o facebook com python

136
Hackeando o Facebook com Python 3 Fe rnando Masanori FATEC Centro Paula Souza @ fmasanori

Upload: fernando-masanori

Post on 13-Jan-2015

38.703 views

Category:

Education


15 download

DESCRIPTION

Workshop de 2h no Campus Party 2013. Introdução à linguagem Python. Hackear o Facebook para baixar fotos de amigos. Requisitos: conta no Facebook, notebook com Python 3.x instalado e vontade de aprender coisas novas. Resumo nos vídeos abaixo: http://www.youtube.com/watch?v=QH7b37URGSo http://www.youtube.com/watch?v=or1gtKGhMLE

TRANSCRIPT

Page 1: Hackeando o Facebook com Python

Hackeando o Facebook com

Python 3Fernando Masanori

FATECCentro Paula Souza

@fmasanori

Page 2: Hackeando o Facebook com Python

Agenda

• Python 3 (nestes slides)

• Facebook

• Material para aprofundamento

• Disclaimer: code for fun (no password hacking)

• Obs: se preferir: slides para Python 2.7

• Obs: em junho de 2013 a API aberta do Twitter foi aposentada, veja nos slides finais como autenticar e acessar os dados

Page 3: Hackeando o Facebook com Python

• Estudantes

• Professores

• Profissionais de TI

• Sabem programar

• Sabem programar em Python

Conhecendo os assistentes

Page 4: Hackeando o Facebook com Python

Prof old notebook

Page 5: Hackeando o Facebook com Python

Prof new notebook

Page 6: Hackeando o Facebook com Python

• Graduado IME USP • Mestrado ITA• Software Express• Credicard Mastercard• PriceWaterhouseCoopers• ITAU BankBoston • Fundador Hacker Clube SJC• FATEC SJC (amo dar aulas)• Nota dada para minhas aulas: 9,7

CV Resumido

Page 7: Hackeando o Facebook com Python

• Fernando Masanori (Massa)

• facebook.com/fmasanori

• twitter.com/fmasanori

• about.me/fmasanori

• Interesses: Algoritmos, Estrutura de Dados, Python, NoSQL, Business Intelligence, Google Technology, Facebook, Twitter

Adicione / Siga o Prof

Page 8: Hackeando o Facebook com Python

Palestras em eventos de TI

Porto Alegre, Brasil - 04/07/2013 - FISL14 - Palestra Fernando Masanori -Python for Zombies - Foto: Guilherme Dias

Page 9: Hackeando o Facebook com Python

• PyCon Uruguay 2013 (em espanhol)

• DevDay2013 Belo Horizonte - MG

• Python para Zumbis – RuPy Conference 2013

• Para gostar de Python – Python Nordeste 2013 e TDC 2013

• Hoje sou um professor FELIZ – FISL 2013

• Python for Zombies – FISL 2013

• MongoDB e Python – Python Nordeste 2013

• NoSQL e Python – RuPy Conference 2012

• I Love JSON Module – Python Brasil 2012

• Pentaho: suite para BI JUG Vale 2012

• Cassandra NoSQL – JUG Vale 2012

• Benchmark LucidDB x MySQL – NoSQL(br)/v2

Algumas palestras

Page 10: Hackeando o Facebook com Python

CEDET Decolar

Page 11: Hackeando o Facebook com Python

Casdinho

Page 12: Hackeando o Facebook com Python

We Love Python

Page 13: Hackeando o Facebook com Python

• Permite focar no problema, sem perder tempo na sintaxe

• Interativa• Alta produtividade• Baterias inclusas• Comunidade livre, forte, diversificada,

alegre e acolhedora• Orientada a objetos, funcional,

estruturada• Uso geral vs nichos• Simples de iniciar, sem esgotar

We Love Python

Page 14: Hackeando o Facebook com Python

Eu domino uma linguagem corporativa e o mercado é meu, quero vocês fora daqui.

O mercado é enorme, não tem sentido que existam só linguagens corporativas

Page 15: Hackeando o Facebook com Python

http://www.python.org/psf/diversity/

We Love Python

Page 16: Hackeando o Facebook com Python

Meta: 20 % de presença feminina em 2015Fato: 20% dos congressistas PyConUS 2013!

Fato: Um terço dos palestrantes da PyConUS 2014!

We Love Python

Page 17: Hackeando o Facebook com Python

http://pyladies.com/

We Love Python

Page 18: Hackeando o Facebook com Python

Meta: 25% não americanos em 2015

We Love Python

Page 19: Hackeando o Facebook com Python

http://pycursos.com/python-para-zumbis/

First pt-br programming MOOC

Page 20: Hackeando o Facebook com Python

Small interactive videos, no more blackboard and chalk

Page 21: Hackeando o Facebook com Python

A lot of fun exercises

Edx MITCoursera Interactive PythonIME-USPCodingbatGoogle Python ClassCracking Code Interview

Page 22: Hackeando o Facebook com Python

7200 inscriptions! and growing...

Page 23: Hackeando o Facebook com Python

We Love Python Hello World

Page 24: Hackeando o Facebook com Python

We Love Python Hello World

Page 25: Hackeando o Facebook com Python

Origem do nome Python

Page 26: Hackeando o Facebook com Python

The Python Paradox, Paul Graham

Python como um diferencial

Page 27: Hackeando o Facebook com Python

1h video/s 4 billion views

Python: quem usa

Page 28: Hackeando o Facebook com Python

Python: quem usa

Page 29: Hackeando o Facebook com Python

Python: quem usa

Page 30: Hackeando o Facebook com Python

Python: quem usa

Page 31: Hackeando o Facebook com Python

Python: quem usa

Page 32: Hackeando o Facebook com Python

Python: quem usa

Page 33: Hackeando o Facebook com Python

Python: quem usa

Page 34: Hackeando o Facebook com Python

Python: quem usa

Page 35: Hackeando o Facebook com Python

Python: quem usa

Você sabia que o “Pi” do nome se origina de Python?

Page 36: Hackeando o Facebook com Python

Python: quem usa

Page 37: Hackeando o Facebook com Python

Popularidade Github e StackOverflow

Page 38: Hackeando o Facebook com Python

JobTrends Indeed.com

Page 39: Hackeando o Facebook com Python

Linguagem do ano TIOBE em 2007 e 2010

Linguagem Favorita do LinuxJournal: 2009 a 2013

Page 40: Hackeando o Facebook com Python

Linguagem do ano TIOBE em 2007 e 2010

Page 41: Hackeando o Facebook com Python

“Se o Voldemort quisesse ser realmente imortal, ele teria programado uma horcrux recursiva em Python.” Harry Potter.

O que falam de Python

Page 42: Hackeando o Facebook com Python

“A vida é melhor sem chaves“.

“A vida é curta! Você precisa de Python”.

“Python me ajuda a focar nos meus conceitos em vez de ficar brigando com a linguagem”.

“Eu não preciso digitar muito. Mas o que eu digito é certo”.

Bruce Eckel, autor do best seller “Thinking in Java”.

O que falam de Python

Page 43: Hackeando o Facebook com Python

”Entre todas as linguagens que eu aprendi, Python é a que menos interfere entre mim e o problema. É a mais efetiva para traduzir pensamentos em ações“.

Eric Raymond, Autor “A catedral e o Bazar”.

Contribuidor do GNU Emac, Linux, Fetchmail.

Mantém o Jargonfile, mais conhecido como “Dicionário dos Hackers”

O que falam de Python

Page 44: Hackeando o Facebook com Python

”Python tem sido uma parte importante do Google desde o início, e permanece assim conforme o sistema cresce e evolui... estamos procurando por mais

pessoas com conhecimento nessa linguagem“.

Peter Norvig, diretor de qualidade de busca do Google Inc.

O que falam de Python

Page 45: Hackeando o Facebook com Python

“[…] nossa filosofia aqui é “Python sempre que pudermos, C++ se necessário”". Alex Martelli, Líder Técnico, Sistemas de Produção, Google.

O que falam de Python

Page 46: Hackeando o Facebook com Python

“Python é rápido o suficiente para o nosso site e nos permite produzir características de fácil manutenção em tempos recordes, com um mínimo de

desenvolvedores”. Cuong Do, Software Architect, YouTube.com

O que falam de Python

Page 47: Hackeando o Facebook com Python

“Python é uma das cinco mais importantes linguagens que todo programador deve conhecer” Bjarne Stroustrup, criador de C++

O que falam de Python

Page 48: Hackeando o Facebook com Python

O que falam de Python

Page 49: Hackeando o Facebook com Python

O que falam de Python

"Only ugly languages become popular. Python is the one exception"Don Knuth, walking to dinner after Alan Turing's Centenary Celebration

(from @ivanov on Twitter)

Page 50: Hackeando o Facebook com Python

O que falam de Python

"Python poised to become the de facto engine for modern science" Joshua Bloom, Berkeley Astronomy Department,

at SciPy2012

Page 51: Hackeando o Facebook com Python

Neil Ibata, 15 anos, foi aprender a programar em Python com o pai e virou capa da revista Nature.

Linguagem poderosa, mas simples de aprender

Page 52: Hackeando o Facebook com Python

Antonio: concluiu comigo o Coursera “Interactive Python

with Games”Naomi: gosta de Justin Bieber e

está estudando Python

Python for Kids

Page 53: Hackeando o Facebook com Python

Programa de uma menina de 12 anos do Projeto CEDET Decolar

Linguagem poderosa, mas simples de aprender

Page 54: Hackeando o Facebook com Python

Doze calouros no Google Developer Day 2011

Page 55: Hackeando o Facebook com Python

1º lugar fase regional maratona ACM- ICPC12

Page 56: Hackeando o Facebook com Python

Twitter e Facebook nas aulas

Page 57: Hackeando o Facebook com Python

olha eu aiiii... kkk

Melhora da Auto Estima do Aluno

Page 58: Hackeando o Facebook com Python

Melhora da Auto Estima do Aluno

Page 59: Hackeando o Facebook com Python

C 2 anosJava 6 mesesPython 1 mes

Tempo Para Ser Produtivo

Page 60: Hackeando o Facebook com Python

Expressive Power

Language Statements Lines

C 1 1

Java 2.5 1.5

Python 6 6.5

Page 61: Hackeando o Facebook com Python

Talk is cheap. Show me the code.

Linus Torvalds

Page 62: Hackeando o Facebook com Python

• Conta no Facebook

• Internet

• Python 3

• IDLE ou semelhante

• Vamos fazer um aquecimento

• Tutorial 1h em Python for Zombies(Video no YouTube)

• Curso completo free: Python para Zumbis

Check List

Page 63: Hackeando o Facebook com Python

Aquecimento: Install Python 3

• Windows

– download

– executar > next > next...

• Linux

– sudo apt-get install idle-python3.3

• Mac OS X

– sudo port install python32

Page 64: Hackeando o Facebook com Python

Aquecimento: Using Python 3

• Windows

– Iniciar > Programas > Python3.3 > IDLE (Python GUI)

• Linux (terminal)

– idle-python3.3 &

• Mac OS X (terminal)

– IDLE3.3 &

Page 65: Hackeando o Facebook com Python

Aquecimento: hello world

No modo interativo você recebe a resposta para cada comando executado

Page 66: Hackeando o Facebook com Python

Aquecimento: modo interativo

• 2**100000

• dir(“abacate”)

• help(“abacate”.upper)

• “abacate”.upper()

• a = “abacate”

• b = 42

• a, b = b, a

• print (a, b)

Page 67: Hackeando o Facebook com Python

Aquecimento: modo interativo

• import random

• random.randint(1, 100)

• random.randint(1, 100)

• random.choice(42, 13, 24, 7, 3, 10)

• print (chr(33000))

• import this

• import antigravity

Page 68: Hackeando o Facebook com Python

Aquecimento: errando

No Python os espaços iniciais são importantes

Page 69: Hackeando o Facebook com Python

Aquecimento: errando

Page 70: Hackeando o Facebook com Python

String diferente de inteiro

Page 71: Hackeando o Facebook com Python

Aquecimento: edition mode

No modo edição você precisa “rodar” o programa (Run Module ou F5)

Page 72: Hackeando o Facebook com Python

Aquecimento: edition mode

Page 73: Hackeando o Facebook com Python

Aquecimento: edition mode

Sempre use a extensão “.py” para não perder as cores do seu programa

Page 74: Hackeando o Facebook com Python

Aquecimento: jogo simples

https://gist.github.com/fmasanori/6029123

Page 75: Hackeando o Facebook com Python

Aquecimento: jogo simples

https://gist.github.com/5615826

Feito por uma menina de 12 anos

Page 76: Hackeando o Facebook com Python

for == while enrustido

Códigos equivalentes: for durante o dia vira while à noite

Page 77: Hackeando o Facebook com Python

for == while enrustido

Códigos equivalentes

Page 78: Hackeando o Facebook com Python

for == while enrustido

Códigos equivalentes

Page 79: Hackeando o Facebook com Python

Aquecimento: criptografia

Feito por outra menina de 12 anos

Page 80: Hackeando o Facebook com Python

• O dicionário em si consiste em relacionar uma chave a um valor específico

• Diferentemente das listas, onde o índice é um número, dicionários utilizam suas chaves como índice

• Para adicionar novos elementos não preciso de append, basta fazer a atribuição – Se a chave já existe: o valor associado é alterado

– Se a chave não existe: a nova chave é adicionada

Dictionaries

Page 81: Hackeando o Facebook com Python

Dictionaries

Page 82: Hackeando o Facebook com Python

Dictionaries

Page 83: Hackeando o Facebook com Python

• Faça um programa que leia o arquivo alice.txte conte o número de ocorrências de cadapalavra no texto. Obs.: para saber oscaracteres especiais use import string eutilize string.punctuation

• http://www.gutenberg.org/cache/epub/11/pg11.txt

Dictionaries

Page 84: Hackeando o Facebook com Python

Dictionaries

https://gist.github.com/4673017

Page 85: Hackeando o Facebook com Python

Raspagem fotos churras alunos

Page 86: Hackeando o Facebook com Python

Raspagem fotos churras alunos

https://gist.github.com/6637873

Page 87: Hackeando o Facebook com Python

JSON killer module

Page 88: Hackeando o Facebook com Python

• http://json.org/

• Independente de linguagem

• Pares nome/valor

• Lista ordenada

• Muito adotado atualmente

• Alternativa para o XML– Menos verbosa

– Maior legibilidade

Java Script Object Notation

Page 89: Hackeando o Facebook com Python

https://gist.github.com/4745061

Chuck Norris Nerdy Jokes

Page 90: Hackeando o Facebook com Python

Facebook Hacking

Page 91: Hackeando o Facebook com Python

Hackers não são “do mal”?

Facebook Hacking

Page 92: Hackeando o Facebook com Python

“O Facebook é dirigido por hackers. Amaioria das pessoas pensa de umhacker como alguém que invade umsistema de computador. Mas nósvemos isso como uma filosofia. Aqui, oshackers assumem que sempre há umamaneira melhor, mais eficiente de resolverproblemas.” facebook.com/careers (2012)

Facebook Hacking

Page 93: Hackeando o Facebook com Python

Facebook Profile

https://gist.github.com/4667205

Page 94: Hackeando o Facebook com Python

Facebook Profile Photo

https://gist.github.com/4667293

Page 95: Hackeando o Facebook com Python

• https://developers.facebook.com/docs/reference/api/examples/

• Objetos JSON

• Links autenticados

• Obs.: access_token expira

• Autenticar novamente neste caso

Graph API

Page 96: Hackeando o Facebook com Python

Facebook Friends

https://developers.facebook.com/docs/reference/api/examples/

Anote o formato

Page 97: Hackeando o Facebook com Python

Facebook Friends

https://developers.facebook.com/tools/explorer

Copie o access_token

Page 98: Hackeando o Facebook com Python

https://gist.github.com/4674792

Facebook Friends

Page 99: Hackeando o Facebook com Python

https://gist.github.com/4684752

Facebook Friends Photos

Page 100: Hackeando o Facebook com Python

AndroidWallpaper

Page 101: Hackeando o Facebook com Python

AndroidWallpaper

Page 102: Hackeando o Facebook com Python

https://gist.github.com/4684949

Facebook Search

Page 103: Hackeando o Facebook com Python

Facebook Search

Page 104: Hackeando o Facebook com Python

• Sabe o que é ter vontade de acordar cedo no domingo para estudar?!?

• Bom, eu também não sei explicar, mas é o que estou sentindo no momento .-.

• Bora Casdinho!

Sentiment Analysis (Facebook)

Page 105: Hackeando o Facebook com Python

https://gist.github.com/8696746

Facebook Thanking (python 2.7)

Page 106: Hackeando o Facebook com Python

https://gist.github.com/8696746

Facebook Thanking (python 2.7)

Page 107: Hackeando o Facebook com Python

• Hackear participantes a partir do evento criado no Facebook

• Inserir link para o perfil pessoal no Facebook

• Obs.: somente alguns participantes e com a foto na data do evento

Participantes de um evento qualquer

Page 108: Hackeando o Facebook com Python
Page 109: Hackeando o Facebook com Python

(tribute to Aaron Swartz, cofounder of Reddit, nov-1986, jan-2013)

Reddit MongoDB Client

Page 110: Hackeando o Facebook com Python

https://gist.github.com/4691077

(by 10gen)

Reddit Client

Page 111: Hackeando o Facebook com Python

Reddit Client

Page 112: Hackeando o Facebook com Python

Flexible Schema

MongoDB == JSON

Page 113: Hackeando o Facebook com Python

Relational DB

Page 114: Hackeando o Facebook com Python

Reddit MongoDB Client

Page 115: Hackeando o Facebook com Python

Reddit MongoDB Client

Page 116: Hackeando o Facebook com Python

http://www.codeskulptor.org/#demos-pyman.py

Games com Python no browser

Page 117: Hackeando o Facebook com Python

Rice Rocks (Asteroids)

Games com Python no browser

https://gist.github.com/fmasanori/6042315

Page 120: Hackeando o Facebook com Python

Material para aprofundamento

Page 121: Hackeando o Facebook com Python

Material para aprofundamento

Obs.: o autor já anunciou a segunda edição, aguardem...

Page 122: Hackeando o Facebook com Python

Material para aprofundamento

Page 123: Hackeando o Facebook com Python

Material para aprofundamento

Page 124: Hackeando o Facebook com Python

Material para aprofundamento

Page 125: Hackeando o Facebook com Python

Material para aprofundamento

Web Scraping

http://pyvideo.org/video/609/web-scraping-reliably-and-efficiently-pull-data

Page 126: Hackeando o Facebook com Python

http://beta.pycursos.com/python-para-zumbis/

Python para Zumbis (gratuito)

Page 127: Hackeando o Facebook com Python

[email protected]

facebook.com/fmasanori

twitter.com/fmasanori

Page 128: Hackeando o Facebook com Python

• Até junho de 2013 era possível acessar várias informações do Twitter sem necessidade de autenticação

• O Twitter resolveu melhorar a segurança e utilizar OAuth (Open Authentication) até o acesso básico (search)

• Neste protocolo, recebemos uma chave e senha que permite o acesso a um recurso específico durante algum tempo

Acesso Twitter Autenticado

Page 129: Hackeando o Facebook com Python

• O usuário do Twitter precisa autorizar um programa externo, que recebe um consumer_key e um consumer_secret

• Na posse dessa chave e senha podemos pegar uma chave e senha de acesso temporária

• Não se preocupe se você não entender o Tweepy. Ano passado era mais simples e só recentemente ficou mais complicado acessar o Twitter

Acesso Twitter Autenticado

Page 130: Hackeando o Facebook com Python

Obtendo Chave e Senha de Acesso

Page 131: Hackeando o Facebook com Python

Obtendo Chave e Senha de Acesso

Page 132: Hackeando o Facebook com Python

Obtendo Chave e Senha de Acesso

Page 133: Hackeando o Facebook com Python

Obtendo Chave e Senha de Acesso

Page 134: Hackeando o Facebook com Python

Enviando mensagens

Page 135: Hackeando o Facebook com Python

Enviando mensagens

Page 136: Hackeando o Facebook com Python

Mensagens dos meus alunos