如何用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
相关产品推荐
相关产品推荐

