【问题标题】:Elixir - efficiently fetching list of comments of a Facebook page via Graph APIElixir - 通过 Graph API 有效地获取 Facebook 页面的评论列表
【发布时间】:2022-01-28 15:49:11
【问题描述】:

我想在我的网络应用程序上显示 Facebook 页面的 cmets 列表并实现某种延迟加载。为了获取所有 cmets,我必须首先获取帖子列表。 /comments/posts 都将返回具有此形状的响应:

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

我曾想过通过 Task.async/1Task.await/2 并行获取 cmets,如下所示:

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 端点不会返回每个帖子的 cmets 总数。理想情况下,我想在最初和随后总共显示 100 个 cmets。但是,由于缺乏信息,帖子的第一页可能有 0 个 cmets,而下一页有 200 个 cmets。

【问题讨论】:

    标签: facebook-graph-api elixir


    【解决方案1】:

    您可以通过明确要求获得 cmets 计数。

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

    会给你一个类似的结构

      "comments": {
        "data": [
          ...
        ],
        "summary": {
          "order": "ranked",
          "total_count": 123,
          "can_comment": true
        }
    

    【讨论】:

    • 谢谢。我只需一个请求就能获取 cmets。但我有个问题。有没有办法给/feed添加一个过滤参数,这样就不会获取那些0 cmets的帖子?
    • 不,这是不可能的。在收到数据后,您必须自己进行这种过滤。
    • 有没有办法通过修改上述查询获得回复,即只有 1 个查询?
    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 2018-12-13
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多