2016-11-05 87 views
0

我想弄清楚如何在非常非常长的线程中刮擦/访问所有的注释(大约1,035条评论)。显然最好的方法是制作一个FB应用程序,然后使用图形API(原始HTML是不透明的!:))Facebook Graph API(v2.8):JavaScript中的分页?

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

有没有办法控制我在后续页面上使用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" 

这是伟大的,因为我m对每条评论的消息感兴趣,有多少人喜欢它,以及(如果可能)谁发布了它。

问题是当我转到下一页的结果。当我使用下面的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 
    ) 
} 

然后我收到稍微不同的结果。从本质上讲,我第一次要求评论时,我会收到完整的回复,每次我要求“下一个”页面时,我只会从整体回复中找回“评论”对象。 (这部分是好的 - 我们不需要后续页面的响应信息)。

这里的问题:为以后的个人评论的对象(第二次及以后的)书页缺失,除了“消息”和“ID”

换句话说各个领域,我找回评论物体看起来像:

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

是否有可能得到分页的第二个(及以后)页面上的所有字段?

一对夫妇的想法:

一方面,我可以写更多的代码单独索要丢失的字段每个注释但这似乎超级低效的(无论是我和Facebook的 - 他们真正想要的我要问他们数百次的信息,他们会在结果的第一页上为我高兴地收集信息?)。

我曾尝试要求10,000个结果,FB给了我一个错误消息。它看起来会给我950个结果,但FB开始返回一个大约1000的错误信息。因此,要求“所有数据”努力实现分页分页看起来有点脆弱(但对于大多数情况可能没问题)。

有一对夫妇对SO像这样的其他问题,但他们无论是在一个稍微不同的主题或其他老&过时的(如Facebook Graph API - Paging,其中建议动态添加<script>元素,而不是使用目前的JS SDK)。

任何帮助,建议或指向更深层次的文档都会很棒(基本上没有关于分页的文档(我可以找到))。

+0

我刚刚发现:https://developers.facebook.com/docs/graph-api/using-graph-api/v2.8#multiidlookup至少可以让我'批量'我的请求变成更大捆绑。尽管如此,它仍然不是真棒...... – MikeTheTall

+0

然后是这样的:https://developers.facebook.com/docs/graph-api/making-multiple-requests – MikeTheTall

+1

批量请求不是你在寻找的那种情况,你需要使用分页。但您不需要在每次调用中指定字段。 “next”参数应该包含您需要的所有内容,只需调试即可。 – luschn

回答

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 
     )