Почему Graph API пропускает сообщения в ленте?

Я пытаюсь реализовать скребок facebook, чтобы получить представление о реакциях на посты на страницах facebook. Я заметил, что результаты (сообщения) за фактический день и за последние дни верны, но чем дальше они уходят в прошлое, тем больше сообщений в ленте пропускается, и количество возвращаемых результатов очень мало.

Почему Graph пропускает много постов? Иногда он пропускает даже полные месяцы!

Вот код, который я использую:

import json
import datetime
import csv
import time
import urllib.request  
import urllib.error
import requests
import numpy as np
import matplotlib.pyplot as plt
import json
from urllib.parse import urlencode
import pandas as pd

page_id="nytimes"

token="my_User_Token_Here" #using a user token got from [https://developers.facebook.com/tools/explorer/][1]

url="https://graph.facebook.com/v2.12/"+page_id+"/posts/?fields=id,created_time,message,shares.summary(true).limit(0),comments.summary(true).limit(0),likes.summary(true),reactions.type(LOVE).limit(0).summary(total_count).as(Love),reactions.type(WOW).limit(0).summary(total_count).as(Wow),reactions.type(HAHA).limit(0).summary(total_count).as(Haha),reactions.type(SAD).limit(0).summary(1).as(Sad),reactions.type(ANGRY).limit(0).summary(1).as(Angry)&access_token="+token+"&limit=100"

posts = []
found = False

try:
    while (True):
        print(url)
        facebook_connection = urlopen(url)
        data = facebook_connection.read().decode('utf8')
        json_object = json.loads(data)
        allposts=json_object["data"]
        allposts = np.asarray(allposts)
        created = '2018-03-01' 
        for i in range(0,100,1):
            if (pd.to_datetime(allposts[i]['created_time']) > pd.to_datetime(created)):
                #print(allposts[i]['created_time'])
                posts.append(allposts[i])
            else:
                print(i,  "%i fucking here!")
                posts.append(allposts[i])
                found = True
                break;
            if (i == 99):
                #print('here is: ' + i)
                url = json_object["paging"]["next"]
        if (found == True):
            break; 


    df=pd.DataFrame(posts)


except Exception as ex:
    print (ex)



Ответы (1)


Это сообщенная ошибка. С тех пор, как было сообщено, правила изменились с API v2.12, и только может быть достигнуто 600 лучших сообщений в год. Очевидно, это плохие новости для разработчиков и исследователей.

person frodik    schedule 25.05.2018
comment
и более новые версии Graph? Есть версия где исправлена ​​эта ошибка? И есть ли другое решение, чтобы получить все сообщения сейчас? Как вы думаете, сейчас никто не парит данные фида fb-страниц? - person ZelelB; 27.05.2018
comment
Я не думаю, что это возможно, согласно документации API. Вы можете очищать данные канала в режиме реального времени, но история ограничена. Пожалуйста, дайте мне знать, если я ошибаюсь. - person frodik; 28.05.2018