自定义RSS的xml文件

1 编写RSS类

<?php

class Rss
{
public $title; // 频道的标题
public $link; // 频道的链接
public $description; // 频道的描述
public $language; // 频道的语言
public $encoding; // xml编码
public $rss_url; // rss地址

/**
* 初始化
* @param string $title 频道标题
* @param string $link 频道链接
* @param string $description 频道描述
* @param string $language 频道语言
* @param string $encoding xml编码
* @param string $rss_url rss地址
*/
public function __construct($title, $link, $description, $language, $encoding, $rss_url)
{
$this->title = $title;
$this->link = $link;
$this->description = $description;
$this->language = $language;
$this->encoding = $encoding;
$this->rss_url = $rss_url;
}

/**
* 创建RSS文件内容
* @param array $items 文章内容
* return string rss字符串内容
*/
public function createRss($items)
{
// 获取头部信息
$header = $this->getHeader();
// 获取内容信息
$channel = $this->getChannel();
$channel = str_replace('<chanel>', $channel, $header);
// 获取文章信息
$items = $this->getItems($items);
return str_replace('<item>', $items, $channel);
}

/**
* 获取item信息
* @param array $articles 文章内容,二维数组,格式[['title' => '', 'link' => '', 'description' => '', 'pubDate' => '', 'guid' => ''],...]
* return string
*/
public function getItems($articles = [])
{
$items = "";
foreach ($articles as $k => $v) {
$items .= "\t\t".'<item>'."\n";
$items .= "\t\t\t".'<title>'.$v['title'].'</title>'."\n";
$items .= "\t\t\t".'<link>'.$v['link'].'</link>'."\n";
$items .= "\t\t\t".'<description>'.$v['description'].'</description>'."\n";
$items .= "\t\t\t".'<pubDate>'.$this->getUtcTime($v['pubDate']).'</pubDate>'."\n";
$items .= "\t\t\t".'<guid>'.$v['guid'].'</guid>'."\n";
$items .= "\t\t".'</item>'."\n";
}
return $items;
}

// 获取频道信息
public function getChannel()
{
$channel = "\t".'<channel>'."\n";
$channel .= "\t\t".'<title>'.$this->title.'</title>'."\n";
$channel .= "\t\t".'<link>'.$this->link.'</link>'."\n";
$channel .= "\t\t".'<description>'.$this->description.'</description>'."\n";
$channel .= "\t\t".'<language>'.$this->language.'</language>'."\n";
$channel .= "\t\t".'<atom:link href="'.$this->rss_url.'" rel="self" type="application/rss+xml" />'."\n";
$channel .= "\t\t".'<item>'."\n";
$channel .= "\t".'</channel>';
return $channel;
}

// 获取头部信息
public function getHeader()
{
$header = '<?xml version="1.0" encoding="'.$this->encoding.'"?>'."\n";
$header .= '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">'."\n".'<chanel>'."\n".'</rss>';
return $header;
}

/**
* 获取UTC时间
* @param string $datetime 日期时间,格式:2024-01-12 16:45:30
* return string 时间,格式如:Wed, 03 Jan 2024 00:32:16 +0000
*/
public function getUtcTime($datetime)
{
$startUtc = date('c', strtotime($datetime));
$dateObject = new \DateTime($startUtc);
$dateObject->setTimezone(new \DateTimeZone('UTC'));
return $dateObject->format(\DateTime::RFC1123);
}
}

2 使用RSS类

// 使用案例
$title = '测试标题';
$link = 'https://www.cyanhui.com';
$description = '描述内容';
$language = 'en-US';
$encoding = 'UTF-8';
$rss_url = 'https://www.cyanhui.com/test2.php';
$rss = new Rss($title, $link, $description, $language, $encoding, $rss_url);
$items = [
['title' => '文章1', 'link' => 'https://www.cyanhui.com/detail/1.html', 'description' => '文章1描述', 'pubDate' => '2024-01-12 17:45:23', 'guid' => 'https://www.cyanhui.com/detail/1.html'],
['title' => '文章2', 'link' => 'https://www.cyanhui.com/detail/2.html', 'description' => '文章2描述', 'pubDate' => '2024-01-12 17:23:23', 'guid' => 'https://www.cyanhui.com/detail/2.html']
];
header('Content-Type: application/rss+xml; charset=UTF-8');
echo $rss->createRss($items);

3 RSS检测

检测地址:https://www.feedvalidator.org/


4 测试结果



相关推荐

  • 获取指定目录下的所有图片信息

    1 获取指定目录下的所有图片信息// 获取指定目录下的所有图片信息 public function getImagesInfo($directory) { $images = []; // 创建递归目录迭代器 $iterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($directory, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::LEAVES_ONLY ); // 遍历目录中的每个文件 foreach (

  • Thinkphp各版本的PHP要求

    ThinkPHP 8.0:运行环境要求PHP8.0+,兼容PHP8.3ThinkPHP 6.1:运行环境要求PHP7.2+,兼容PHP8.1ThinkPHP 6.0:运行环境要求PHP7.2+,兼容PHP8.1ThinkPHP 5.1:运行环境要求PHP5.6+,兼容PHP8.0ThinkPHP 5.0:运行环境要求PHP5.4+,兼容PHP7.3

  • Thinkphp5.1路径常量

    1 配置文件位置根目录/config/template.php2 配置文件内容&lt;?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reser

  • Thinkphp5.0路径常量

    1 配置文件位置根目录/application/模块名/config.php2 配置文件内容&lt;?php//配置文件return [ // 后台视图输出字符串内容替换 'view_replace_str' =&gt; [ '__PUBLIC__' =&gt; '/', '__STATIC__' =&gt; '/static', '__CONSOLE__' =&gt; '/static/console', '__CONSOLE_CSS__' =&gt; '/static/console/css', '__CONSOLE_IMAGES__' =&gt; '/static/console/ima

  • wp站点防止别人进行DDOS攻击

    1 简介wp站点防止别人进行DDOS攻击。2 配置位置位置:根目录/wp-config.php3 配置内容在【根目录/wp-config.php】文件的开头添加如下代码:if(strpos($_SERVER['REQUEST_URI'], 'xmlrpc.php') !== false){ $protocol = $_SERVER['SERVER_PROTOCOL'] ?? ''; if(!in_array($protocol, ['HTTP/1.1', 'HTTP/2', 'HTTP/2.0', 'HTTP/3'], true)){ $protocol = 'HTTP/1.0'; } hea

  • 只读属性

    1 只读属性简介只读属性的声明方式类似于普通属性,但需要使用 readonly 关键字。2 只读属性例子class Point { public readonly float $x; public readonly float $y; public function __construct(float $x, float $y) { $this-&gt;x = $x; $this-&gt;y = $y; }}$point = new Point(3.5, 2.8);echo $point-&gt;x; // 输出: 3.5echo $point-&gt;y; // 输出: 2.8// 下面的尝