Facebook Graph API + Python

Рейтинг: 2Ответов: 2Опубликовано: 25.11.2014

Здравствуйте!

Есть небольшой скрипт на python, коннектится к facebook api и достает по id группы id всех публикаций. Все работает прекрасно, единственное - он достает определенное количество записей (в моем случае 24).

Как сделать, чтобы автоматически после прохода первых 25 записей был переход на следующую страницу, таким образом можно было бы собрать за раз все id публикаций в группе?

Сам код:

import facebook

ACCESS_TOKEN = '123456789'

g = facebook.GraphAPI(ACCESS_TOKEN)

some_id = '123456789'

content = g.get_connections(some_id, 'feed')['data']
title_id = [ id['id'] for id in content ]

Ответы

▲ 3Принят

А вы в Graph Api Explorer пытались выполнить ваш запрос? (Ищи его здесь.)

В самом конце ответа есть что-то типа "paging: {previous: ..., next: ...}" - это то, что вас интересует. Ну или почти то - в paging возвращаются ссылки, а вам надо значения же параметрами передавать?

Не знаю, в каком виде возвращается ответ в вашей библиотеке, может быть, это значение (since или until, смотря куда листаете) лежит открытым текстом, а может быть, придется доставать из строки paging['next'].

Еще один вариант (для листания вперед): берем дату (и время) создания самой последней записи, отнимаем одну секунду, переводим эту дату в Unix timestamp и передаем полученное значение в until.

Подробнее можно почитать в документации (см. здесь).

▲ 1

Получившийся код:

import requests
ACCESS_TOKEN = '12343421'
url = 'https://graph.facebook.com/v2.0/432234243/feed?limit=1000&access_token=%s' % ACCESS_TOKEN

title_id = []
try:
    while True:
        content = requests.get(url).json()['data']
        title_id += [ id['id'] for id in content ]
        url = requests.get(url).json()['paging']['next']
except:
    print "List already done"

Таким образом в лист записались все id публикаций.