2015-02-18 16 views
5

Câu hỏi của tôi liên quan đến việc học cách truy xuất toàn bộ danh sách bạn bè của tôi bằng API Python của Facebook. Kết quả hiện tại trả về một đối tượng có số lượng bạn bè hạn chế và liên kết đến trang 'tiếp theo'. Làm cách nào để sử dụng tính năng này để tìm nạp nhóm bạn bè tiếp theo? (Vui lòng gửi liên kết đến các bản sao có thể) Bất kỳ trợ giúp nào cũng sẽ được đánh giá cao. Nói chung, tôi cần phải tìm hiểu về việc phân trang liên quan đến việc sử dụng API.API Facebook Python - phân trang con trỏ

import facebook 
import json 

ACCESS_TOKEN = "my_token" 

g = facebook.GraphAPI(ACCESS_TOKEN) 

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

Trả lời

17

Đáng buồn là tài liệu về phân trang là một vấn đề mở since almost 2 years. Bạn sẽ có thể để đánh số trang như thế này (dựa trên this example) sử dụng 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

Tôi không nghĩ rằng nó đang hoạt động! –

+0

Tại sao? Anh phải cho tôi nhiều hơn. – runDOSrun

+0

Tôi xin lỗi! Trên thực tế, yêu cầu thứ hai "" request.get (bạn bè ['paging'] ['next']). Json() "" trả về một đối tượng với bạn bè ['data'] dưới dạng danh sách rỗng –

1

Trong khi đó tôi đang tìm kiếm câu trả lời ở đây là cách tiếp cận tốt hơn nhiều:

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']) 

Tại thời điểm kết thúc, bạn sẽ nhận được một câu trả lời ở đâu dữ liệu sẽ trống và sau đó sẽ không có phím 'phân trang' để tại thời điểm đó nó sẽ phá vỡ và tất cả dữ liệu sẽ được lưu trữ.

+0

gặp lỗi 'facebook.GraphAPIError: Thành phần đường dẫn không xác định:/friends & after = Q' –

+0

@kirankumarkotari Xin chào, bạn có thể vui lòng không thử sau khi đặt '/' trên đường dẫn như tôi đã chỉnh sửa nó và xem nó có đang hoạt động hay không. – Shashank

+0

Điều này không hoạt động. 'bạn bè = graph.get_connections (" tôi ","/bạn bè & tóm tắt = 1 ")' trả về giống như graph.get_object ('tôi') –

0

trong ví dụ này bạn tắt/đặt trang vào một thời điểm, tôi nghĩ vòng lặp while của tôi đơn giản vì nó chỉ tìm khóa phân trang "tiếp theo" là không, nếu không tồn tại nghĩa là chúng tôi kết thúc vòng lặp và bạn sẽ có kết quả của bạn trong một danh sách. trong ví dụ này tôi chỉ đang tìm kiếm tất cả mọi người gọi cho jacob

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 
Các vấn đề liên quan