2016-11-05 79 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 
     )