自定义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 测试结果



相关推荐

  • 生成图片

    from PIL import Image, ImageColor, ImageDraw, ImageFont, ImageFilterdef create_image_with_text(size, color, text, font_path, font_size, text_color, shadow_color, output_path): """ Create a new image of specified size and color with centered text that has a border and shadow. :param size: A tuple con

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

    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