Hackeando o
Facebook com
Python 3
Fernando Masanori
FATEC
Centro Paula Souza
@fmasanori
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
Conhecendo os assistentes
•
•
•
•
•

Estudantes
Professores
Profissionais de TI
Sabem programar
Sabem programar em Python
Prof old notebook
Prof new notebook
CV Resumido
•
•
•
•
•
•
•
•
•

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
Adicione / Siga o Prof
•
•
•
•
•

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
Palestras em eventos de TI

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

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
CEDET Decolar
Casdinho
We Love Python
We Love 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
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
We Love Python

http://www.python.org/psf/diversity/
We Love Python

Meta: 20 % de presença feminina em 2015
Fato: 20% dos congressistas PyConUS 2013!
Fato: Um terço dos palestrantes da PyConUS 2014!
We Love Python

http://pyladies.com/
We Love Python

Meta: 25% não americanos em 2015
First pt-br programming MOOC

http://pycursos.com/python-para-zumbis/
Small interactive videos, no
more blackboard and chalk
A lot of fun exercises

Edx MIT
Coursera Interactive Python
IME-USP
Codingbat
Google Python Class
Cracking Code Interview
7200 inscriptions! and growing...
We Love Python Hello World
We Love Python Hello World
Origem do nome Python
Python como um diferencial

The Python Paradox, Paul Graham
Python: quem usa

1h video/s 4 billion views
Python: quem usa
Python: quem usa
Python: quem usa
Python: quem usa
Python: quem usa
Python: quem usa
Python: quem usa
Python: quem usa

Você sabia que o “Pi” do nome se origina de Python?
Python: quem usa
Popularidade Github e
StackOverflow
JobTrends Indeed.com
Linguagem do ano TIOBE em
2007 e 2010

Linguagem Favorita do
LinuxJournal: 2009 a 2013
Linguagem do ano TIOBE em
2007 e 2010
O que falam de Python

“Se o Voldemort quisesse ser realmente imortal, ele teria
programado uma horcrux recursiva em Python.” Harry Potter.
O que falam de 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

”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

”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

“[…] 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

“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

“Python é uma das cinco mais importantes linguagens que todo programador
deve conhecer” Bjarne Stroustrup, criador de C++
O que falam de 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)
O que falam de Python

"Python poised to become the de facto engine for modern science"
Joshua Bloom, Berkeley Astronomy Department,
at SciPy2012
Linguagem poderosa, mas
simples de aprender

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

Antonio: concluiu comigo o
Coursera “Interactive Python
with Games”
Naomi: gosta de Justin Bieber e
está estudando Python
Linguagem poderosa, mas
simples de aprender

Programa de uma menina de 12
anos do Projeto CEDET Decolar
Doze calouros no Google
Developer Day 2011
1º lugar fase regional maratona
ACM- ICPC12
Twitter e Facebook nas aulas
Melhora da Auto Estima do Aluno

olha eu
aiiii... kkk
Melhora da Auto Estima do Aluno
Tempo Para Ser Produtivo

C
2 anos
Java
6 meses
Python
1 mes
Expressive Power

Language
C
Java
Python

Statements
1
2.5
6

Lines
1
1.5
6.5
Talk is cheap.
Show me the code.
Linus Torvalds
Check List
•
•
•
•
•
•

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
Aquecimento: Install Python 3
• Windows
– download
– executar > next > next...

• Linux
– sudo apt-get install idle-python3.3

• Mac OS X
– sudo port install python32
Aquecimento: Using Python 3
• Windows
– Iniciar > Programas > Python3.3 >
IDLE (Python GUI)

• Linux (terminal)
– idle-python3.3 &

• Mac OS X (terminal)
– IDLE3.3 &
Aquecimento: hello world

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

2**100000
dir(“abacate”)
help(“abacate”.upper)
“abacate”.upper()
a = “abacate”
b = 42
a, b = b, a
print (a, b)
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
Aquecimento: errando

No Python os espaços iniciais são importantes
Aquecimento: errando
String diferente de inteiro
Aquecimento: edition mode

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

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

https://gist.github.com/fmasanori/6029123
Aquecimento: jogo simples

Feito por uma
menina de 12 anos
https://gist.github.com/5615826
for == while enrustido

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

Códigos equivalentes
for == while enrustido

Códigos equivalentes
Aquecimento: criptografia

Feito por outra
menina de 12 anos
Dictionaries
• 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
Dictionaries
Dictionaries
• Faça um programa que leia o arquivo alice.txt
e conte o número de ocorrências de cada
palavra no texto. Obs.: para saber os
caracteres especiais use import string e
utilize string.punctuation
• http://www.gutenberg.org/cache/epub/11/pg
11.txt
Dictionaries

https://gist.github.com/4673017
Raspagem fotos churras alunos
Raspagem fotos churras alunos

https://gist.github.com/6637873
JSON killer module
Java Script Object Notation
•
•
•
•
•
•

http://json.org/
Independente de linguagem
Pares nome/valor
Lista ordenada
Muito adotado atualmente
Alternativa para o XML
– Menos verbosa
– Maior legibilidade
Chuck Norris Nerdy Jokes

https://gist.github.com/4745061
Facebook Hacking
Facebook Hacking

Hackers não são “do mal”?
Facebook Hacking
“O Facebook é dirigido por hackers. A
maioria das pessoas pensa de um
hacker como alguém que invade um
sistema de computador. Mas nós
vemos isso como uma filosofia. Aqui, os
hackers assumem que sempre há uma
maneira melhor, mais eficiente de resolver
problemas.” facebook.com/careers (2012)
Facebook Profile

https://gist.github.com/4667205
Facebook Profile Photo

https://gist.github.com/4667293
Graph API
• https://developers.facebook.com/do
cs/reference/api/examples/
• Objetos JSON
• Links autenticados
• Obs.: access_token expira
• Autenticar novamente neste caso
Facebook Friends

Anote o formato

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

Copie o
access_token

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

https://gist.github.com/4674792
Facebook Friends Photos

https://gist.github.com/4684752
Android
Wallpaper
Android
Wallpaper
Facebook Search

https://gist.github.com/4684949
Facebook Search
Sentiment Analysis (Facebook)
• 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!
Facebook Thanking (python 2.7)

https://gist.github.com/8696746
Facebook Thanking (python 2.7)

https://gist.github.com/8696746
Participantes de um evento
qualquer
• 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
Reddit MongoDB Client
(tribute to Aaron Swartz, cofounder of Reddit, nov-1986, jan-2013)
Reddit Client

(by 10gen)

https://gist.github.com/4691077
Reddit Client
MongoDB == JSON

Flexible Schema
Relational DB
Reddit MongoDB Client
Reddit MongoDB Client
Games com Python no browser

http://www.codeskulptor.org/#demos-pyman.py
Games com Python no browser

Rice Rocks (Asteroids)
https://gist.github.com/fmasanori/6042315
Slides e videos
• Python for Zombies
• Hackeando o Facebook e o
Twitter com Python 3
Links para iniciar
Twitter Dev API
Facebook Dev How To
Facebook Dev Pictures
Facebook Dev Search
Facebook Dev Examples/
Facebook Dev Getting Started
Material para aprofundamento
Material para aprofundamento

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

Web Scraping

http://pyvideo.org/video/609/web-scrapingreliably-and-efficiently-pull-data
Python para Zumbis (gratuito)

http://beta.pycursos.com/python-para-zumbis/
Perguntas?
fmasanori@gmail.com
facebook.com/fmasanori

twitter.com/fmasanori
Acesso Twitter Autenticado
• 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
• 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
Obtendo Chave e Senha de Acesso
Obtendo Chave e Senha de Acesso
Obtendo Chave e Senha de Acesso
Obtendo Chave e Senha de Acesso
Enviando mensagens
Enviando mensagens
Mensagens dos meus alunos

Hackeando o Facebook com Python