6

Facebook 的一个简单功能是显示您朋友的帖子,以及您朋友分享的帖子。对于共享帖子,标题为“Kelly 和其他 4 人”共享 XYZ 帖子。此外,如果您的多个朋友分享了该帖子,Facebook 会汇总他们并仅向您显示该帖子一次,它不会显示多次。Facebook 似乎在同一个时间线视图中显示平面提要和聚合提要。

我想要一种方式让提要在用户的时间线中显示聚合和平面提要类型(平面提要)。我有以下提要设置:

时间线提要(平面)

用户供稿(平面)

每次用户 A 关注用户 B 时,我都会调用 getstream 来更新用户 A 的时间线提要以关注用户 B 的用户提要。

除了上述内容之外,我还想做一个向用户展示的示例时间线:

Flat Post 1(来自以下用户 A)

Flat Post 2(来自以下用户 B)

汇总帖子 1(您关注的 4 个人分享了帖子 X)

Flat Post 3(来自以下用户 A)

Flat Post 4(来自以下用户 C)

聚合帖子 2(您关注的 3 个人喜欢帖子 Y)

现在似乎这样做的方法是我必须从 getstream 获取时间线提要中的活动,然后还获取聚合提要并以某种方式在我们的后端混合两者?

4

1 回答 1

8

您可以通过使用单个聚合提要并调整聚合规则来实现此目的。在您的情况下,您似乎需要的是:

  • 将相同帖子的共享分组放在一起
  • 保留有关单个活动的帖子
  • 将相同帖子的点赞分组在一起

像下面这样的聚合规则应该可以工作(未经测试):

{% if verb.infinitive == 'like' %}
    "likes"-{{ object }}
{% elif verb.infinitive == 'share' %}
    "share"-{{ object }}
{% elif verb.infinitive == 'post' %}
    "post"-{{ object }}
{% else %}
    {{ actor }}-{{ verb.infinitive }}-{{ time.strftime('%H') }}
{% endif %}

快速解释这项工作是如何完成的。聚合规则用于确定活动如何组合在一起。您可以将它们视为以活动作为参数执行的函数。在实践中,聚合规则类似于输出字符串的 Jinja2 模板。

如果两个活动的输出相同,那么它们将属于同一个聚合活动。

例如:活动Tom likes post "xyz"James likes post "xyz"都将输出likes-xyz,因此将被组合在一起。另一方面,活动Sam posts "xyz"将输出post-xyz并假设只有一个名为 的帖子xyz,它永远不会与其他活动分组。

我的建议是将一些示例数据发送到提要并使用 Stream 仪表板中提供的预览功能调整您的聚合规则。

于 2016-08-15T01:09:04.453 回答