Skip to content

Instantly share code, notes, and snippets.

@rafaelnovello
Created October 25, 2012 03:25
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rafaelnovello/3950251 to your computer and use it in GitHub Desktop.
Save rafaelnovello/3950251 to your computer and use it in GitHub Desktop.
Listar pessoas que deram Like
# coding: utf-8
import webbrowser, urllib, json, sys
def login():
#Dicionário de parâmetros usados para obter code.
args = {
'client_id': '318829251513892',
'redirect_uri': 'http://localhost:5000/',
'scope': 'friends_likes,user_likes,manage_pages'
}
#Abre um navegador para pedir a autorização do usuário.
#Depois de autorizar, o Facebook faz uma chama para a redirect_uri
#O code é enviado em forma de parâmetro na URL.
webbrowser.open('https://graph.facebook.com/oauth/authorize?'
+ urllib.urlencode(args))
#Aguarda a entrada do parâmetro code pela linha de comando.
code = raw_input()
#Adiciona novos parâmetros ao dicionário inicial.
args['code'] = code
args['client_secret'] = '04512624aa679cfc29b8f14ee5d2a23c'
#Faz uma segunda chamada, agora para obter o access_token.
resp = urllib.urlopen('https://graph.facebook.com/oauth/access_token?'
+ urllib.urlencode(args))
#Fatia a string retornada para pegar apenas o código access_token.
access_token = resp.read().split('&')[0].split('=')[1]
#Guarda o access_token em um arquivo.
with open('access_token.txt', 'w') as file:
file.write(access_token)
return access_token
def get_likes(page_username, post_id, access_token):
#Dicionário usado para requisições na API.
args = {'post_id': post_id,
'format': 'json',
'access_token': access_token
}
#Monta a url de chamada, com o nome da pagina, id do post e os parâmetros de chamada.
url = 'https://graph.facebook.com/%s/posts?%s' % (page_username, urllib.urlencode(args))
#Faz a chamada e carrega o resultado para um dicionário Python.
resp = urllib.urlopen(url)
data = json.loads(resp.read())
#Simplifica a massa de dados.
data = data['data'][0]
#Mostra as pessoas que deram Like!
for like in data['likes']['data']:
print like['id'], like['name']
if __name__ == '__main__':
#Verifica se o access_token já foi gravado em arquivo.
#Caso contrário chama a função de login.
try:
access_token = open('access_token.txt').read()
except IOError:
access_token = login()
#Chama a função get_likes com o parâmetro passado na
# linha de comando e o access_token.
get_likes(sys.argv[1], sys.argv[2], access_token)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment