Python: Facebook Graph API - pagination request using facebook-sdk

冷暖自知 提交于 2020-01-04 02:16:12

问题


I'm trying to query Facebook for different information, for example - friends list. And it works fine, but of course it only gives limited number of results. How do I access the next batch of results?

import facebook
import json

ACCESS_TOKEN = ''

def pp(o):
    with open('facebook.txt', 'a') as f:
        json.dump(o, f, indent=4)


g = facebook.GraphAPI(ACCESS_TOKEN)
pp(g.get_connections('me', 'friends'))

The result JSON does give me paging-cursors-before and after values - but where do I put it?


回答1:


I'm exploring Facebook Graph API through the facepy library for Python (works on Python 3 too), but I think I can help.

TL-DR:

You need to append &after=YOUR_AFTER_CODE to the URL you've called (e.g: https://graph.facebook/v2.8/YOUR_FB_ID/friends/?fields=id,name), giving you a link like this one: https://graph.facebook/v2.8/YOUR_FB_ID/friends/?fields=id,name&after=YOUR_AFTER_CODE, that you should make a GET Request.


You'll need requests in order to make a get request for Graph API using your user ID (I'm assuming you know how to find it programatically) and some url similar to the one I give you below (see URL variable).

import facebook
import json
import requests

ACCESS_TOKEN = ''
YOUR_FB_ID=''
URL="https://graph.facebook.com/v2.8/{}/friends?access_token={}&fields=id,name&limit=50&after=".format(YOUR_FB_ID, ACCESS_TOKEN)

def pp(o):
    all_friends = []
    if ('data' in o):
        for friend in o:
            if ('next' in friend['paging']):
                resp = request.get(friend['paging']['next'])
                all_friends.append(resp.json())
            elif ('after' in friend['paging']['cursors']):
                new_url = URL + friend['paging']['cursors']['after']
                resp = request.get(new_url)
                all_friends.append(resp.json())
             else:
                 print("Something went wrong")

    # Do whatever you want with all_friends...
    with open('facebook.txt', 'a') as f:
        json.dump(o, f, indent=4)


g = facebook.GraphAPI(ACCESS_TOKEN)
pp(g.get_connections('me', 'friends'))

Hope this helps!



来源:https://stackoverflow.com/questions/37326198/python-facebook-graph-api-pagination-request-using-facebook-sdk

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!