【问题标题】:How to build a news feed with aggregate and flat types?如何使用聚合和平面类型构建新闻提要?
【发布时间】:2016-08-15 09:09:04
【问题描述】:

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 获取时间线提要中的活动,然后还获取聚合提要并以某种方式在我们的后端混合两者?

【问题讨论】:

  • 你的问题不是很清楚,能详细说明一下吗?

标签: getstream-io


【解决方案1】:

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

  • 将相同帖子的群组共享放在一起
  • 在单个活动上发帖
  • 将相同帖子的点赞组合在一起

类似以下的聚合规则应该可以工作(未经测试):

{% 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 仪表板中提供的预览功能调整您的聚合规则。

【讨论】:

  • 哇,这是一个惊人的反应。谢谢,我会阅读您上面使用的示例并尝试预览!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多