Segundo a Graph API v2.3, podemos recuperar:
/{user-id}/home
- Retorna o fluxo de todos os posts criados pelo usuário e seus amigos. O que normalmente se encontra no Feed de Noticia./{user-id}/feed
– inclui tudo que você vê no seu perfil (links compartilhados, checkins, fotos, atualização de status, além de incluir posts criados por amigos no perfil do usuário./{user-id}/statuses
– Retorna apenas a atualização de status postado pelo usuário em seu próprio perfil/{user-id}/posts
– retorna os posts criados pelo usuário no seu próprio mural ou nos dos amigos, e pode incluir qualquer conteúdo como links compartilhados, checkins, fotos e atualização de status.
In [1]:
import facebook
In [2]:
import simplejson as json
In [3]:
import requests
O módulo requests é utilizado para fazer requisições HTTP, ele será útil para que possamos requisitar novas páginas com conteúdo do Facebook.
Ele funciona da seguinte maneira:
In [4]:
req = requests.get('http://python.org')
In [5]:
req.status_code # Se o código for 200, a requisição foi realizada.
Out[5]:
In [6]:
#req.text
In [7]:
'Python' in req.text
Out[7]:
In [8]:
req.close()
In [9]:
import facebook
access_token = 'EAACEdEose0cBAAFGsk2U0Jo1Kn9GZCWuXoMwflMusq2ajIqwcF3VU9vEp2M8y5ZB3stHJ5AAShfQvL72JYV8zGQXGvN5996EXDn9FV2DJvS8FTflaak0UuC6ZAm5HPjI2gsLRVEzdYlftGL93ZBWNVJuWzRnENYY7a3dpALP0AZDZD'
In [10]:
api = facebook.GraphAPI(access_token, version='2.3')
In [11]:
noticias = api.get_object('me/feed')
In [12]:
#print(json.dumps(noticias, indent=4))
In [13]:
for item in range(0, len(noticias['data'])):
try:
print(item, '--->', noticias['data'][item]['story'])
except:
pass
In [14]:
noticias = api.get_object('me/feed')
while True:
try:
for item in range(0, len(noticias['data'])):
try:
print(item, '--->', noticias['data'][item]['story'])
except:
pass
noticias = requests.get(noticias['paging']['next']).json()
except Exception as e:
print(e)
break
Exercicio 2 - Altere o programa da aula6-parte5-recuperar ('me/feed') e imprima, além do histórico, o nome, tipo e a hora da criação.
- story
- name
- type
- created_time
In [15]:
feed_noticias = api.get_object('me/home')
In [16]:
len(feed_noticias['data'])
Out[16]:
In [17]:
for item in range(0, len(feed_noticias['data'])):
try:
print(item, '---->', feed_noticias['data'][item]['name'])
except:
pass
In [18]:
feed_noticias['data'][1].keys()
Out[18]:
In [19]:
feed_noticias['data'][1]['type']
Out[19]:
In [20]:
feed_noticias['data'][1]['name']
Out[20]:
In [21]:
#feed_noticias['data'][1]['application']
In [22]:
feed_noticias['data'][1]['updated_time']
Out[22]:
In [23]:
feed_noticias['data'][1]['created_time']
Out[23]:
In [24]:
# feed_noticias['data'][1]['comments']
In [25]:
feed_noticias['data'][1]['likes']
Out[25]:
Note que só retornamos 25 resultados, porém nosso feed de notícias tem muita informação ainda para ser recuperada!
Não temos um parâmetro específico que podemos informar quantos items queremos, portanto temos que criar mecanismos para parar a captura dos dados.
In [26]:
feed_noticias['paging']
Out[26]:
Da mesma forma que foi feito anteriormente, podemos requisitar a próxima página até que atinja a quantidade desejada.
É importante notar que no meu caso, tenho poucas conexões, desta forma a quantidade de dados é bem inferior se comparado ao facebook de uma pessoa que usa ativamente!!!!
Também podemos recuperar as conexões, como por exemplo, uma lista de amigos.
In [34]:
access_token = 'EAACEdEose0cBANbSsjf7TIxMNSvoGZCOZCa2Nbfjso2ZAQwKCrmotS5wEXPZCNvHx7zxqLU30Mn5J9cJdtTDJtALuSfn4mSSmCuASZAPTQy2DE3LSeboUzfZCzTIvJPrcR1E4ScwKyDAPN2mOPx1hNwfKPyYdikzGc32tauaKGMQZDZD'
In [35]:
amigos = api.get_connections("me", "friends")
todos_amigos = []
In [36]:
while True:
try:
for amigo in amigos['data']:
todos_amigos.append(amigo['name'])
amigos = requests.get(amigos['paging']['next']).json()
except KeyError:
break
print(todos_amigos)