2015-02-18 6 views
5

Мой вопрос включает в себя изучение того, как получить весь список друзей, используя API Python Facebook. В текущем результате возвращается объект с ограниченным числом друзей и ссылка на «следующую» страницу. Как использовать это для получения следующего набора друзей? (Пожалуйста, разместите ссылку на возможные дубликаты). Любая помощь будет высоко оценена. В общем, мне нужно узнать о разбиении на страницы, в которых используется использование API.Python Facebook API - курсор pagination

import facebook 
import json 

ACCESS_TOKEN = "my_token" 

g = facebook.GraphAPI(ACCESS_TOKEN) 

print json.dumps(g.get_connections("me","friends"),indent=1) 

ответ

17

К сожалению, документация на разбиение на страницы является открытой проблемой since almost 2 years. Вы должны быть в состоянии постраничной как это (на основе this example) с использованием requests:

import facebook 
import requests 

ACCESS_TOKEN = "my_token" 
graph = facebook.GraphAPI(ACCESS_TOKEN) 
friends = graph.get_connections("me","friends") 

allfriends = [] 

# Wrap this block in a while loop so we can keep paginating requests until 
# finished. 
while(True): 
    try: 
     for friend in friends['data']: 
      allfriends.append(friend['name'].encode('utf-8')) 
     # Attempt to make a request to the next page of data, if it exists. 
     friends=requests.get(friends['paging']['next']).json() 
    except KeyError: 
     # When there are no more pages (['paging']['next']), break from the 
     # loop and end the script. 
     break 
print allfriends 
+0

Я не думаю, что это работает! –

+0

Почему? Ты должен дать мне больше. – runDOSrun

+0

Прошу прощения! На самом деле второй запрос «" request.get (friends ['paging'] ['next']). Json() "" возвращает объект с друзьями ['data'] в качестве пустого списка –

1

Между тем я искал ответ здесь гораздо лучше подход:

import facebook 
access_token = "" 
graph = facebook.GraphAPI(access_token = access_token) 

totalFriends = [] 
friends = graph.get_connections("me", "/friends&summary=1") 

while 'paging' in friends: 
    for i in friends['data']: 
     totalFriends.append(i['id']) 
    friends = graph.get_connections("me", "/friends&summary=1&after=" + friends['paging']['cursors']['after']) 

В конечной точке вы получите один ответ где данные будут пустыми, и тогда не будет «пейджингового» ключа, поэтому в это время он сломается, и все данные будут сохранены.

+0

получение ошибки 'facebook.GraphAPIError: неизвестные компоненты пути:/friends & after = Q' –

+0

@kirankumarkotari Привет, не могли бы вы попробуйте после ввода '/' на пути, поскольку я его отредактировал и посмотрю, работает ли он. – Shashank

+0

Это не работает. 'friends = graph.get_connections (" me ","/friends & summary = 1 ")' возвращает то же самое, что и graph.get_object ('me') –

0

В этом примере вы отключили установку/разбиение на страницы по одному в то время, я думаю, что мой цикл while прост, так как он ищет ключевое слово «next», если оно не существует, если не существует, значит, мы заканчиваем цикл, а вы будет иметь ваши результаты в списке. в этом примере я просто ищу для всех людей называют Яаки

import requests 
import facebook 

token = access_token="your token goes here" 
fb = facebook.GraphAPI(access_token=token) 
limit = 1 
offset = 0 
data = {"q": "jacob", 
     "type": "user", 
     "fields": "id", 
     "limit": limit, 
     "offset": offset} 
req = fb.request('/search', args=data, method='GET') 

users = [] 
for item in req['data']: 
    users.append(item["id"]) 

pag = req['paging'] 
while pag.get("next") is not None: 
    offset += limit 
    data["offset"] = offset 
    req = fb.request('/search', args=data, method='GET') 
    for item in req['data']: 
     users.append(item["id"]) 
    pag = req.get('paging') 
print users