好久没有更新博客,最近在看某大佬网站的适合发现了RSS订阅的按钮,突然想起来这个东西也好几十年了,给自己的网站也弄一个吧。在弄之前大概的看了一下RSS的发展历史,结合了AI的能力捣鼓出本站的RSS源,后续再完善邮件订阅的功能。
首先是创建对应的RSS控制器,这个控制器负责将最近N条新的文章以XML的格式,并且符合RSS的标准。(这里是发布5条)

//RSS控制器
order('publish_time', 'desc')->limit(5)->select();
// 最新文章发布时间
$latestArticle = Article::order('publish_time', 'desc')->find();
$pubDate = $latestArticle->publish_time;
// 生成 RSS XML
$rss = '' . "\n";
$rss .= '' . "\n";
$rss .= '' . "\n";
$rss .= '柴宏俊web技术学习笔记 ' . "\n";
$rss .= '' . "https://chaihongjun.me/" . '' . "\n"; // 网站链接
$rss .= '记录chaihongjun学习web技术的个人博客,涉及的技术内容包括前端的javascript,vue,css,html后端的php和mysql数据库,以及一些linux服务器的运维知识 ' . "\n";
$rss .= 'zh-CN ' . "\n";
$rss .= '' . date(DATE_RSS, strtotime($pubDate)) . ' ' . "\n";
foreach ($articles as $article) {
$rss .= '- ' . "\n";
$rss .= '
' . htmlspecialchars($article['title']) . ' ' . "\n";
$rss .= '' . "https://chaihongjun.me" . UrlHelper::generateArticleUrl($article['id']) . '' . "\n"; // 文章链接
$rss .= '' . htmlspecialchars($article['introduction']) . ' ' . "\n"; // 文章摘要
$rss .= '' . UrlHelper::getCategoryNameByArticleId($article['id']) . ' ' . "\n"; // 文章分类
$rss .= '' . date(DATE_RSS, strtotime($article['publish_time'])) . ' ' . "\n"; // 发布时间
$rss .= ' ' . "\n";
}
$rss .= ' ' . "\n";
$rss .= ' ';
// 输出 RSS XML
// echo $rss;
responseXML($rss, 'xml');
}
}然后去路由那里配置一个新的路由:
// RSS
Route::get('rss.xml', 'index/Rss/index');于是在浏览器中直接访问地址 https://chaihongjun.me/rss.xml 即可,当然为了确保RSS源的正确,可以前往https://www.feedvalidator.org/ 进行验证。至此完成。
说明一下,上述控制器里用到的一些是自定义的函数:
function responseXML($content, $type = 'html')
{
if ($type === 'xml') {
header('Content-Type: application/xml; charset=utf-8');
}
echo $content;
exit;
}
public static function generateArticleUrl($articleId)
{
// 使用模型关联查询文章和对应的栏目
$article = Article::with('category')->find($articleId);
if ($article && $article->category) {
// 拼接URL
$url = '/' . $article->category->name . '/' . $article->id . '.html';
return $url;
}
return null;
}
public static function generateArticleUrl($articleId)
{
// 使用模型关联查询文章和对应的栏目
$article = Article::with('category')->find($articleId);
if ($article && $article->category) {
// 拼接URL
$url = '/' . $article->category->name . '/' . $article->id . '.html';
return $url;
}
return null;
}UrlHelper是一个自定义的公共助手工具类


