如何构建具有聚合和平面类型的新闻提要?
How to build a news feed with aggregate and flat types?
Facebook 上的一个简单功能是显示来自您朋友的 post 内容,以及您朋友分享的 post 内容。在共享 post 的情况下,它的标题为 "Kelly and 4 others" 共享 XYZ post。此外,如果您的几个朋友分享了 post,Facebook 会将他们汇总并只向您显示一次 post,它不会多次显示。 Facebook 似乎在同一个时间轴视图中显示平面提要和聚合提要。
我想要一种供提要在用户的时间轴(平面提要)中显示聚合和固定提要类型的方法。我有以下提要设置:
时间轴提要(平面)
用户供稿(扁平化)
每次用户 A 关注用户 B 时,我都会调用 getstream 来更新用户 A 的时间线供稿以关注用户 B 的用户供稿。
除了上述之外,我还想做的是将此作为示例时间线展示给用户:
持平Post 1(来自关注用户A)
Flat Post 2(来自关注用户 B)
汇总 Post 1(您关注的 4 人分享了一个 post X)
持平Post 3(来自关注用户A)
持平Post 4(来自关注用户C)
汇总 Post 2(您关注的 3 人喜欢 post Y)
现在看来,我必须从 getstream 中获取时间线提要中的活动,然后再获取聚合提要,并以某种方式在我们的后端混合这两者?
您可以通过使用单个聚合提要并调整聚合规则来实现此目的。在您的情况下,您似乎需要的是:
- 将相同 post 的股票组合在一起
- 在单一活动中保持 posts
- 将相同 post 的赞组合在一起
像下面这样的聚合规则应该有效(未测试):
{% 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 模板。
如果两个活动的输出相同,则它们将属于同一个聚合 activity。
例如:活动 Tom likes post "xyz"
和 James likes post "xyz"
都将输出 likes-xyz
,因此将被组合在一起。另一方面,activity Sam posts "xyz"
将输出 post-xyz
并假设只有一个 post 称为 xyz
,它永远不会与其他活动分组。
我的建议是将一些示例数据发送到提要并使用 Stream 仪表板中提供的预览功能调整聚合规则。
Facebook 上的一个简单功能是显示来自您朋友的 post 内容,以及您朋友分享的 post 内容。在共享 post 的情况下,它的标题为 "Kelly and 4 others" 共享 XYZ post。此外,如果您的几个朋友分享了 post,Facebook 会将他们汇总并只向您显示一次 post,它不会多次显示。 Facebook 似乎在同一个时间轴视图中显示平面提要和聚合提要。
我想要一种供提要在用户的时间轴(平面提要)中显示聚合和固定提要类型的方法。我有以下提要设置:
时间轴提要(平面)
用户供稿(扁平化)
每次用户 A 关注用户 B 时,我都会调用 getstream 来更新用户 A 的时间线供稿以关注用户 B 的用户供稿。
除了上述之外,我还想做的是将此作为示例时间线展示给用户:
持平Post 1(来自关注用户A)
Flat Post 2(来自关注用户 B)
汇总 Post 1(您关注的 4 人分享了一个 post X)
持平Post 3(来自关注用户A)
持平Post 4(来自关注用户C)
汇总 Post 2(您关注的 3 人喜欢 post Y)
现在看来,我必须从 getstream 中获取时间线提要中的活动,然后再获取聚合提要,并以某种方式在我们的后端混合这两者?
您可以通过使用单个聚合提要并调整聚合规则来实现此目的。在您的情况下,您似乎需要的是:
- 将相同 post 的股票组合在一起
- 在单一活动中保持 posts
- 将相同 post 的赞组合在一起
像下面这样的聚合规则应该有效(未测试):
{% 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 模板。
如果两个活动的输出相同,则它们将属于同一个聚合 activity。
例如:活动 Tom likes post "xyz"
和 James likes post "xyz"
都将输出 likes-xyz
,因此将被组合在一起。另一方面,activity Sam posts "xyz"
将输出 post-xyz
并假设只有一个 post 称为 xyz
,它永远不会与其他活动分组。
我的建议是将一些示例数据发送到提要并使用 Stream 仪表板中提供的预览功能调整聚合规则。