2

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

Есть небольшой скрипт на 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 ]

2 ответа 2

3

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

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

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

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

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

1
  • Да, пытался, и пытался выдирать "next", но не мог все это обернуть в цикл, ваш ответ все таки привел немного мысли в порядок). Ниже привел получившийся код.
    – Piroru
    26 ноя 2014 в 6:43
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 публикаций.

2
  • 1
    1. Если больше данных нет, то next будет отсутствовать - можно так проверять. 2. since и until легко же вытащить при помощи регулярки, и передавать их в виде параметров. Про регулярки можно почитать здесь, описано вроде подробно (сам не читал), а здесь есть примеры (вам первого хватит - (r'since=(\d+)'). 3. А если постов будет миллион/миллиард? Хорошо бы ограничить максимальный объем полученных данных каким-нибудь дополнительным условием.
    – BOPOH
    26 ноя 2014 в 7:15
  • Благодарю за полезные ссылки!
    – Piroru
    26 ноя 2014 в 7:30

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.