如何使用聚合和平面类型构建新闻源?

时间:2016-08-12 17:23:59

标签: getstream-io

Facebook上的一个简单功能是显示朋友的帖子,以及朋友分享的帖子。在共享帖子的情况下,它被标题为“Kelly和4个其他人”共享的XYZ帖子。此外,如果你的几个朋友分享了这个帖子,Facebook汇总了它们,只显示一次帖子,它不会多次显示。 Facebook似乎在同一时间线视图中显示平面Feed和聚合Feed。

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

时间表Feed(持平)

用户Feed(平面)

每次用户A跟随用户B时,我都会调用getstream来更新用户A的时间轴Feed以跟踪用户B的用户Feed。

除了上述内容之外,我想做的是将此作为向用户展示的示例时间表:

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

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

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

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

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

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

现在看来,这样做的方法是,我必须从getstream获取时间轴Feed中的活动,然后获取聚合Feed并以某种方式将两者混合在我们的后端?

1 个答案:

答案 0 :(得分:6)

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

  • 分享同一职位的股份
  • 保持单一活动的帖子
  • 小组喜欢同一个帖子

以下聚合规则应该有效(未经测试):

{% 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 %}

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

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

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

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