Alem de ser minha primeira participação, ainda fui convidado a palestrar com meu amigo e colega de trabalho Vitor Franchito sobre Social Mining para métricas por um dos organizadores e também amigo de trabalho, o Leo Naressi. Nosso objetivo era mostrar, de forma prática, como extrair dados das redes sociais e como analisar estes dados para melhor aproveita-los para uma marca, e, claro, minha parte era a extração dos dados =D. Para isso desenvolvi alguns pequenos exemplos que gostaria de compartilhar com vocês!
Acredito que todas as palestras do evento foram filmadas, então pretendo colocar o link do vídeo aqui assim que estiver disponível. Também vamos colocar a apresentação no SlideShare e assim que ficar pronto adiciono aqui. Agora vamos aos exemplos!
O primeiro exemplo apresentado foi sobre os Followers de uma pessoa no Twitter! Esse é bem simples, já que não precisei nem me autenticar na API.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# coding: utf-8 | |
'''Entre com o nome de um usuário Twitter para ver seus seguidores e | |
quantos seguidores cada um deles têm''' | |
import json, urllib2, sys | |
#Requisição para pegar a lista de followers de um usuário. | |
resp = urllib2.urlopen('http://api.twitter.com/1/followers/ids.json?screen_name=%s' % sys.argv[1]) | |
#Carrega a lista de followers para um dicionário. | |
followers = json.loads(resp.read()) | |
for follower_id in followers['ids']: | |
#Requisição para pegar os dados do follower. É possível requisitar até 100 usuários por vez. | |
resp = urllib2.urlopen('http://api.twitter.com/1/users/lookup.json?user_id=%s' % follower_id) | |
follower = json.loads(resp.read())[0] | |
print follower['screen_name'], follower['name'], follower['followers_count'] |
O script imprime o ID, username e qtd de followers de cada um dos seguidores. O código esta comentado e é auto explicativo.
O importante é ressaltar que a API do Twitter impõe limites de requests para seus usuários e que esse limite é menor quando não nos autenticamos. Veja mais sobre isso aqui https://dev.twitter.com/docs/rate-limiting/1.1. Outro fator importante é que foi lançada a versão 1.1 da API e as novidades podem ser vistas aqui https://dev.twitter.com/docs/api/1.1/overview
O outro exemplo de Twitter mostra quem deu RT em um determinado post. O código é muito parecido, o que muda mesmo é o endereço para o qual fazemos a requisição.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding: utf-8 | |
import urllib2, json, sys | |
#Requisição para pegar quem deu retweet de um post. O sys.argv[1] é o id do tweet. | |
resp = urllib2.urlopen('http://api.twitter.com/1/statuses/%s/retweeted_by.json' % sys.argv[1]) | |
#Carrega a resposta para um dicionário. | |
retweeters = json.loads(resp.read()) | |
#Percorre a lista de quem deu retweet e mostra as informações de cada pessoa. | |
for retweeter in retweeters: | |
print retweeter['screen_name'], retweeter['name'], retweeter['followers_count'] |
O terceiro e último exemplo prático é relacionado a Facebook e tem como objetivo mostrar as pessoas que deram like em um post de uma fan page. Este exemplo não pode ser tão simples quanto os anteriores pois não é possível pegar estas opções sem autenticação. Para tal é preciso criar um app no Facebook - https://developers.facebook.com/docs/appsonfacebook/tutorial/
Com o App criado já podemos ir para o código. Vejam abaixo:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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) |
Este "pulo do gato" relacionado ao parâmetro code eu encontrei no livro Mining the Social Web do escritor Matthew Russell. O livro é muito bom, tem vários exemplos em Python e também mostra varias analises que podemos fazer com estes dados.
Neste exemplo as entradas do script são o nome da fan page e o ID do post.
Estes foram os exemplos práticos da palesta. Falei também sobre como conseguimos pegar informações sobre os compartilhamentos no Facebook, informação que não é disponibilizada pela API, mas este é um assunto bem mais complexo e merece um post só para ele!
Espero que estas informações sejam úteis e que possam ajudar muitas pessoas. Se houverem dúvidas postem aqui no blog que tentarei responder a todas. Assim que os slides e o vídeo estiverem prontos eu publicarei aqui.
Um grande abraço!
[...] blog do Novello tem um post que dá uma abordada nos assuntos técnicos da nossa [...]
ResponderExcluir