RSS作为常用的内容聚合协议,本身并没有内置内容优先级的原生字段,想要实现内容优先级设置,需要结合订阅源属性、内容特征和用户自定义规则来综合计算。常见的优先级设置思路可以分为订阅源权重赋值、内容关键词匹配、发布时间衰减三个维度,三者结合可以得到更合理的内容排序结果。

一、基于订阅源权重的优先级设置
这种方式是最基础的优先级设置逻辑,核心思路是给不同的RSS订阅源预先分配固定的权重值,权重越高的订阅源推送的内容优先级越高。比如用户可以把行业官方博客的权重设为10,个人技术博客的权重设为5,资讯聚合站的权重设为3,解析RSS内容时直接按照订阅源权重排序即可。
首先需要定义订阅源和权重的映射关系,以下是Python实现的简单示例:
# 定义订阅源和权重的映射
source_weight = {
"https://ipipp.com/tech-blog/rss": 10,
"https://ipipp.com/personal-blog/rss": 5,
"https://ipipp.com/news-aggregate/rss": 3
}
def get_source_priority(feed_url):
# 获取对应订阅源的权重,默认权重为1
return source_weight.get(feed_url, 1)
二、基于内容关键词的优先级设置
除了订阅源本身的权重,还可以根据内容中是否包含用户关注的关键词来提升优先级。比如用户关注人工智能相关内容,那么内容中包含人工智能、机器学习、深度学习等关键词的条目,优先级可以额外增加。这种方式可以弥补订阅源权重固定的不足,让同个订阅源内的内容也有优先级差异。
以下是关键词匹配优先级的实现示例:
# 定义关键词和对应的加分值
keyword_priority = {
"人工智能": 3,
"机器学习": 2,
"深度学习": 2,
"前端开发": 1
}
def get_keyword_priority(content):
priority_add = 0
# 遍历关键词,统计内容中命中的关键词加分
for keyword, score in keyword_priority.items():
if keyword in content:
priority_add += score
return priority_add
三、基于发布时间的时间衰减优先级
RSS内容通常具有时效性,刚发布的内容优先级应该高于很久之前发布的内容。可以引入时间衰减系数,发布时间越近的内容,时间维度得分越高,避免过时内容排在前面。
时间衰减的计算逻辑可以用发布时间与当前时间的差值来计算,差值越小得分越高,以下是实现示例:
import time
from datetime import datetime
def get_time_priority(pub_time_str):
# 假设pub_time_str是RFC 822格式的RSS发布时间,转换为时间戳
try:
pub_time = datetime.strptime(pub_time_str, "%a, %d %b %Y %H:%M:%S %z").timestamp()
except:
# 时间解析失败则给最低时间优先级
return 0
current_time = time.time()
time_diff = current_time - pub_time
# 发布时间在1小时内的得5分,1-6小时得3分,6-24小时得1分,超过24小时得0分
if time_diff <= 3600:
return 5
elif time_diff <= 21600:
return 3
elif time_diff <= 86400:
return 1
else:
return 0
四、综合优先级计算与排序
将以上三个维度的优先级得分相加,就可以得到每条RSS内容的综合优先级,最后按照综合优先级从高到低排序,就完成了内容优先级的设置。
以下是综合计算和排序的完整示例:
def calculate_total_priority(feed_url, content, pub_time_str):
# 获取三个维度的优先级得分
source_score = get_source_priority(feed_url)
keyword_score = get_keyword_priority(content)
time_score = get_time_priority(pub_time_str)
# 综合得分为三者之和
return source_score + keyword_score + time_score
# 模拟多条RSS条目数据
rss_items = [
{
"feed_url": "https://ipipp.com/tech-blog/rss",
"content": "本次分享人工智能领域最新的机器学习框架更新内容",
"pub_time": "Mon, 12 Oct 2024 10:30:00 +0800",
"title": "人工智能框架更新"
},
{
"feed_url": "https://ipipp.com/personal-blog/rss",
"content": "记录日常前端开发的小技巧",
"pub_time": "Mon, 12 Oct 2024 09:15:00 +0800",
"title": "前端开发技巧"
},
{
"feed_url": "https://ipipp.com/news-aggregate/rss",
"content": "今日科技资讯汇总",
"pub_time": "Mon, 12 Oct 2024 08:00:00 +0800",
"title": "科技资讯汇总"
}
]
# 为每条条目计算综合优先级
for item in rss_items:
item["priority"] = calculate_total_priority(
item["feed_url"],
item["content"],
item["pub_time"]
)
# 按照优先级从高到低排序
sorted_items = sorted(rss_items, key=lambda x: x["priority"], reverse=True)
# 输出排序结果
for item in sorted_items:
print(f"标题:{item['title']},优先级:{item['priority']}")
五、普通用户的RSS优先级设置技巧
如果不是开发者,使用现成的RSS阅读器也可以通过一些技巧实现类似优先级的效果。比如在阅读器中给重要的订阅源打上星标,设置星标内容优先展示;或者使用阅读器的过滤规则,将包含指定关键词的内容自动标记为已加星,提升这类内容的展示位置。部分支持自定义规则的阅读器还可以设置按发布时间倒序展示,同时固定重要订阅源的展示分组,也能达到近似优先级设置的效果。
需要注意的是,优先级设置规则不需要过于复杂,结合自己的信息获取需求调整权重和关键词即可,避免过度规则导致重要内容被错误过滤。