Elixir - 通过 Graph API 高效获取 Facebook 页面的评论列表

Elixir - efficiently fetching list of comments of a Facebook page via Graph API

我想在我的网络应用程序上显示 Facebook 页面的评论列表并实施某种延迟加载。为了获取所有评论,我必须首先获取 post 的列表。 /comments/posts 都会 return 具有这种形状的响应:

{
  "data": [...],
  "paging": {
    "cursors": {...},
    "next": "https://graph.facebook.com/v12.0/..."
  }
}

我想过像这样通过 Task.async/1Task.await/2 并行获取评论:

posts = MyAppGetter.fetch_posts("https://graph.facebook.com/v12.0/123456789/posts")
comments =
  posts
  |> Enum.map(fn(p) -> Task.async(fn -> 
    MyAppGetter.fetch_comments("https://graph.facebook.com/v12.0/#{p.id}/comments") 
  end) end)
  |> Enum.map(&Task.await/1)

我的困境是不知道何时请求“下一页”,因为 /posts 端点没有 return 每个 post 的评论总数。理想情况下,我想一开始和随后总共显示 100 条评论。但是,由于缺乏信息,post 的第一页可能有 0 条评论,下一页可能有 200 条评论。

您可以通过明确要求获得评论数。

page-id/feed?fields=comments.summary(1)

会给你一个像

这样的结构
  "comments": {
    "data": [
      ...
    ],
    "summary": {
      "order": "ranked",
      "total_count": 123,
      "can_comment": true
    }