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/1
和 Task.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
}
我想在我的网络应用程序上显示 Facebook 页面的评论列表并实施某种延迟加载。为了获取所有评论,我必须首先获取 post 的列表。 /comments
和 /posts
都会 return 具有这种形状的响应:
{
"data": [...],
"paging": {
"cursors": {...},
"next": "https://graph.facebook.com/v12.0/..."
}
}
我想过像这样通过 Task.async/1
和 Task.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
}