我试图弄清楚如何在一个非常非常长的线程(约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。
任何有关此问题的深入文档的帮助,建议或指示都会很棒(基本上没有关于分页的文档(我可以找到)。
答案 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
)