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

如何用PHP将指定JSON Feed转换为RSS并提取标题、日期和图片

PHP将JSON Feed转换为RSS的实现方案

核心思路

RSS是标准XML格式,我们需要按照RSS 2.0规范,将解析后的JSON数组数据映射到对应的XML节点中,重点处理标题、发布日期、图片这三个字段,同时保证输出的XML格式合法。

完整实现代码

<?php
function convert_jsonfeed_to_rss($content = NULL, $max = NULL){
    if(empty($content)){
        header('HTTP/1.1 400 Bad Request');
        exit('JSON内容为空');
    }

    $jsonFeed = json_decode($content, TRUE);
    if(json_last_error() !== JSON_ERROR_NONE){
        header('HTTP/1.1 400 Bad Request');
        exit('JSON解析失败');
    }

    // 设置RSS响应头,确保阅读器识别
    header('Content-Type: application/rss+xml; charset=utf-8');

    // 构建RSS XML结构
    $rss = '<?xml version="1.0" encoding="UTF-8"?>';
    $rss .= '<rss version="2.0">';
    $rss .= '<channel>';
    
    // 填充频道基础信息
    $rss .= '<title>' . htmlspecialchars($jsonFeed['title'] ?? '未知频道') . '</title>';
    $rss .= '<link>' . htmlspecialchars($jsonFeed['home_page_url'] ?? '') . '</link>';
    $rss .= '<description>' . htmlspecialchars($jsonFeed['description'] ?? '') . '</description>';

    // 遍历处理条目,支持限制输出数量
    $items = $jsonFeed['items'] ?? [];
    if($max && is_numeric($max)){
        $items = array_slice($items, 0, $max);
    }

    foreach($items as $item){
        $rss .= '<item>';
        // 处理标题
        $rss .= '<title>' . htmlspecialchars($item['title'] ?? '无标题') . '</title>';
        // 处理条目链接
        $rss .= '<link>' . htmlspecialchars($item['url'] ?? '') . '</link>';
        // 处理发布日期:转换为RSS要求的RFC 822格式
        $pubDate = $item['date_published'] ?? '';
        if($pubDate){
            $rss .= '<pubDate>' . date('r', strtotime($pubDate)) . '</pubDate>';
        }
        // 处理内容与图片
        $description = '';
        if(isset($item['image'])){
            $description .= '<img src="' . htmlspecialchars($item['image']) . '" alt="' . htmlspecialchars($item['title'] ?? '') . '" />';
        }
        // 可选添加摘要内容
        if(isset($item['summary'])){
            $description .= '<br>' . htmlspecialchars($item['summary']);
        }
        $rss .= '<description><![CDATA[' . $description . ']]></description>';
        // 条目唯一标识
        $rss .= '<guid isPermaLink="true">' . htmlspecialchars($item['url'] ?? $item['id'] ?? '') . '</guid>';
        $rss .= '</item>';
    }

    $rss .= '</channel>';
    $rss .= '</rss>';

    echo $rss;
}

$content = @file_get_contents("https://shorturl.at/gDHY9");
convert_jsonfeed_to_rss($content, 10); // 第二个参数为可选,限制输出条目数量
?>

关键细节说明

  • 响应头设置:必须输出application/rss+xml类型,确保浏览器或RSS阅读器能正确识别内容。
  • XML格式合法性:用htmlspecialchars()处理所有文本内容,避免特殊字符破坏XML结构;图片和HTML片段放在<![CDATA[]]>中,防止标签被错误解析。
  • 日期转换:JSON Feed的date_published多为ISO 8601格式,通过strtotime()转为时间戳后,用date('r')生成RSS要求的RFC 822格式日期。
  • 容错处理:添加了JSON内容为空、解析失败的判断逻辑,避免程序直接报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:30:57