// тут соединение с вашей бд, где расположена нужная таблица, в нашем примере это таблица news
$connect_db = mysqli_connect(
'localhost', /* Хост, к которому мы подключаемся */
'user_name', /* Имя пользователя */
'passwords', /* Используемый пароль */
'bd_name'); /* База данных для запросов по умолчанию */
$query = "SELECT * FROM news ORDER BY data_dob DESC"; // делаем выборку всех записей таблицы и сортируем ее по дате добавления новости
$rs_result = mysqli_query($connect_db, $query);
$all_item=null;
mysqli_close($connect_db);
while ($row = mysqli_fetch_assoc($rs_result)) {
$data_dob = date(DATE_RFC822, strtotime($row['data_dob'])); // переводим дату в нужный для RSS формат
$id = $row['id']; // ид записи (новости)
$title = $row['title']; // заголовок новости
$des = strip_tags($row['des']); // описание новости, удаляем все html теги
$image = $row['image']; // картинка новости (превью)
$text = $row['text']; // текст новости (в тексте новости могут быть лишние теги, картинки которые с относительными путями к рисункам, а они должны быть абсолютными)
// преобразуем пути картинок, т.е вместо /img_news/image.jpg должно быть https://seolik.ru/img_news/image.jpg
$text = str_ireplace("/img_news/", "https://seolik.ru/img_news/", $text);
// ищем все картинки в новости и добавляем их в описании публикации
$doc = new DOMDocument();
@$doc->loadHTML($text);
$tags = $doc->getElementsByTagName('img');
foreach ($tags as $tag) {
$enclosure .= '<enclosure url="'.$tag->getAttribute('src').'" type="image/jpeg" />'.PHP_EOL;
}
// удаляем все атрибуты style
$text = preg_replace('/(<[^>]+) style=".*?"/iu', '$1', $text);
// все рисунки помещаем в тег <figure>
$text = preg_replace('/(<img.+?>)/iu','<figure>$1</figure>', $text);
// Преобразует все HTML-сущности в соответствующие символы
$text = html_entity_decode($text);
// Удаляем все html теги кроме нужных нам в разметке
$text = strip_tags($text, '<p><a><img><figure>');
// ПЕРЕМЕННАЯ превью картинки. Первое изображение в статье, размеченное этим элементом, отображается на карточке в ленте Дзена
$image_first = '<figure><img src="https://seolik.ru'.$image.'"></figure>';
// добавляем элементы item rss для Дзен https://yandex.ru/support/zen/publishers/rss-modify.html#publication
$all_item = $all_item.'
<item>
<title>'.$title.'</title>
<link>https://seolik.ru/news/'.$id.'</link>
<pdalink>https://seolik.ru/news/'.$id.'</pdalink>
<media:rating scheme="urn:simple">nonadult</media:rating>
<pubDate>'.$data_dob.'</pubDate>
<author>SeoLik.ru</author>
<category>Технологии</category>
<enclosure url="https://seolik.ru'.$image.'" type="image/jpeg"/>
'.$enclosure.'
<description>
<![CDATA[
'.$image_first.'
'.$des.'
]]>
</description>
<content:encoded>
<![CDATA[
'.$text.'
]]>
</content:encoded>
</item>';
}
// начало описание источника https://yandex.ru/support/zen/publishers/rss-modify.html#source
$channel = '<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:media="http://search.yahoo.com/mrss/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:georss="http://www.georss.org/georss">
<channel>
<title>Новости - SeoLik</title>
<link>https://seolik.ru/news</link>
<description>
Новости мира СЕО, маркетинга, интернет рекламы, а так же новости сервиса сео нструментов SeoLik.ru
</description>
<language>ru</language>';
// окончание описания источника
$channel_end = '</channel></rss>';
// записываем готовый rss в файл
$gotovo = $channel.$all_item.$channel_end;
$file = $_SERVER['DOCUMENT_ROOT'].'/zen-news.xml';
file_put_contents($file, $gotovo);