2015-09-06 3 views
2

Использование токена доступа из API-интерфейсов Google Graph API (https://developers.facebook.com/tools/explorer), с областью доступа, которая включает в себя пользователей, я использую следующий код, чтобы попытаться получить все нравится профилю пользователя:Facebook SDK для Python - получение всей страницы понравилось профилю Facebook

myfbgraph = facebook.GraphAPI(token) 
mylikes = myfbgraph.get_connections(id="me", connection_name="likes")['data'] 
for like in mylikes: 
    print like['name'], like['category'] 
    ... 

Однако это всегда дает мне всего 25 понравившихся, в то время как я знаю, что у профиля, который у меня есть, есть 42 нравится. Есть ли какой-то врожденный предел, действующий здесь, или в чем проблема, связанная с тем, что ВСЕ страница нравится профилю пользователя?

ответ

1

согласно Graph справки о:

Когда вы делаете запрос API к узлу или ребру, вы обычно не получит все результаты этого запроса в одном ответе. Этот объясняется тем, что некоторые ответы могут содержать тысячи и тысячи объектов , поэтому большинство ответов разбиты по страницам по умолчанию.

https://developers.facebook.com/docs/graph-api/using-graph-api/v2.2#paging

+0

Хочу отметить, что есть 'paging' ключ в' mylikes' Словаре, который ДИКТ многозначных и имеет subkey под названием 'next' со значением, которое является URL-адресом. Думаю, мне нужно использовать библиотеку 'запросов', чтобы сделать второй вызов, или я могу просто объект' myfbgraph'? Отсутствие документации здесь не очень хорошо. –

+1

Возможно, вот так: http://stackoverflow.com/a/28590136/1753891. – duffn

1

Ну, это, кажется, работает (метод, который принимает график facebook пользователя):

def get_myfacebook_likes(myfacebook_graph): 
    myfacebook_likes = [] 
    myfacebook_likes_info = myfacebook_graph.get_connections("me", "likes") 

    while myfacebook_likes_info['data']: 
    for like in myfacebook_likes_info['data']: 
     myfacebook_likes.append(like) 
    if 'next' in myfacebook_likes_info['paging'].keys(): 
     myfacebook_likes_info = requests.get(myfacebook_likes_info['paging']['next']).json() 
    else: 
     break 

    return myfacebook_likes 
0

Приведенные выше ответы будут работать, но довольно медленно что-нибудь со многими подобными , Если вы просто хотите, счетчик для числа подобных, вы можете получить его гораздо более эффективно с total_likes:

myfacebook_likes_info = graph.get_connections(post['id'], 'likes?summary=1') 
print myfacebook_likes_info["summary"]["total_count"] 
Смежные вопросы