Facebook Graph API(v2.8):JavaScript中的分页?

时间:2016-11-05 18:20:26

标签: javascript facebook facebook-graph-api pagination

我试图弄清楚如何在一个非常非常长的线程(约1,035条评论)中搜索/访问所有评论。显然,最好的方法是制作FB应用程序然后使用Graph API(原始HTML是不透明的!:)

我的问题是我可以在结果的第一页上控制我收到的字段,但在此之后我几乎缺少所有字段。

有没有办法使用JavaScript控制我在后续页面上看到哪些字段?

登录后,我要求使用此代码的第一页评论:

FB.api(
    '/168...etc', // hard coding is bad, I know, 
                         // but right now I'm just figuring this out
    'GET', {
        "fields": "message,type,comments.limit(3){message,like_count,from}",
    },
    processNominationThread
);

这很好用 - 我找回了processNominationThread函数处理得很好的响应对象。具体来说,每个评论对象都有我感兴趣的字段。响应对象包含如下字段:

response: Object
    comments: Object
        data: Array[3]
        paging: Object

典型的评论对象如下所示:

from: Object
    id:"1111111...etc"
    name:"Bob Smith"
    __proto__:Object
id:"1680...etc"
like_count:2
message:"Harry Potter and the Kidney Stone With Teeth"

这很棒,因为我对每条评论中的信息感兴趣,有多少喜欢它,以及(如果可能的话)谁发布了它。

问题是当我进入下一页的结果时。当我使用以下JavaScript代码时:

if (response.comments.paging.next) { // if there's more than 1 page
    FB.api(
        response.comments.paging.next, // get the next page
        'GET', {
            "fields": "message,type,comments{message,like_count,from}"
        },
        continueProcessNominationThread
    )
}

然后我得到了稍微不同的结果。从本质上讲,我第一次提出意见时,我会得到一个完整的回复,每次我都要求下一个'页面我只回复了评论'对象来自整体反应。 (这部分很好 - 我们不需要后续页面的响应信息。)

问题在于:除了' message'之外,每个字段都缺少后续(第2页及以后)页面的各个评论对象。和' id'

换句话说,我收回的评论对象如下:

data[1]: Object
    id:"168etc"
    message:"Harry Potter And The Thing I Found Behind The Safeway Dumpsters"
    __proto__:Object {etc}

是否可以在分页的第二页(及以后)获取所有字段?

有几点想法:

一方面,我可以编写更多代码来单独询问缺失字段的每个评论,但这似乎超级低效(对我和Facebook而言 - 他们真的希望我查询数百次以获取他们的信息吗? #39;我会在结果的第一页为我收集快乐吗?)。

我确实尝试过要求10,000个结果,FB给了我一条错误信息。看起来它会给我950个结果左右,但FB开始返回大约1,000的错误消息。所以要求"所有数据"为了侧面分页看起来有点脆弱(但对大多数情况来说可能没问题)。

在SO上还有其他几个这样的问题,但它们要么是针对一个稍微不同的主题,要么是旧的&amp;过时(如Facebook Graph API - Paging,建议动态添加<script>元素,而不是使用当前的JS SDK。

任何有关此问题的深入文档的帮助,建议或指示都会很棒(基本上没有关于分页的文档(我可以找到)。

1 个答案:

答案 0 :(得分:0)

万一有人好奇 - 毕竟这是我的错。

在要求下一页结果时,我拨打了以下电话:

        FB.api(
            response.comments.paging.next, // get the next page
            'GET', 
            {
                "fields": "message,type,comments{message,like_count,from}"
                // ABOVE LINE IS WRONG!!!!
            },
            second_page_of_comments_BUG_HERE
        )

正确的方法是不要列出第二个+页面所需的字段,如下所示:

        FB.api(
            response.comments.paging.next, // get the next page
            'GET', 
            { }, // LEAVE THIS EMPTY
            second_page_of_comments_BUG_HERE
        )