You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将RSS源中不同命名的发布日期属性统一为单个属性?

统一RSS源发布日期字段的高效处理方案

问题根源分析

你之前的代码无效,核心问题是判断逻辑错误:$_.pubDate -eq $true完全不成立,因为pubDate是日期字符串而非布尔值,导致代码始终尝试取不存在的published字段,自然会出现空值。而且硬编码判断的方式确实扩展性极差,新增字段就得改代码。

高效解决方案

我们可以通过定义日期属性候选列表+动态检测属性存在性的方式,实现可扩展的字段统一:

  1. 先定义所有可能的RSS日期字段名(按优先级排序,优先匹配常用字段)
  2. 针对每个条目,自动遍历候选列表,取第一个存在且非空的日期值
  3. 同时兼容不同RSS标准的条目容器(比如RSS2.0的item、Atom的entry)

完整代码示例

# 目标RSS源地址
$urls = "https://www.muddycolors.com/feed", "https://www.youtube.com/feeds/videos.xml?channel_id=UCB9bffMHdIBuvDq1KSelZAg"

# 定义所有可能的日期字段名,新增字段直接加在这里即可
$datePropertyCandidates = 'pubDate', 'published', 'dc:date', 'created'

# 获取所有RSS源数据并统一处理
$unifiedFeedEntries = $urls | ForEach-Object {
    $feed = Invoke-RestMethod $_
    # 兼容不同RSS标准的条目容器:RSS2.0用item,Atom用entry
    $entries = if ($feed.item) { $feed.item } elseif ($feed.entry) { $feed.entry } else { $feed }

    $entries | ForEach-Object {
        # 遍历候选列表,找到第一个存在且非空的日期值
        $publishedDate = $datePropertyCandidates | ForEach-Object {
            $propName = $_
            if ($propName -in $_.PSObject.Properties.Name -and $null -ne $_.$propName) {
                return $_.$propName
            }
        } | Select-Object -First 1

        # 输出统一结构的对象
        [PSCustomObject]@{
            Title     = $_.Title
            Link      = if ($_.Link -is [array]) { $_.Link.href -join ' ' } else { $_.Link }
            Published = $publishedDate
        }
    }
}

# 查看处理后的结果
$unifiedFeedEntries | Format-Table Title, Published, Link -AutoSize

方案优势

  • 扩展性强:以后遇到新的日期字段名(比如某些源用created),只需要添加到$datePropertyCandidates列表里,无需修改核心逻辑
  • 兼容性好:自动适配不同RSS标准的条目容器,不用单独处理每个源的结构
  • 鲁棒性高:仅取存在且非空的日期值,避免空值或无效值

内容的提问来源于stack exchange,提问作者Ralf_Reddings

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:47:24