Перейти к содержимому

Как сделать rss канал php примеры

  • автор:

Как сделать rss канал php примеры

БлогNot. PHP: пишем ленту новостей RSS

PHP: пишем ленту новостей RSS

Технология RSS — это стандартный способ описания новостей, анонсов статей, изменений в блогах и тому подобного часто обновляющегося содержимого.

Всё, что нужно для программирования своей ленты новостей — сгенерировать XML-файл, соблюдающий правила разметки RSS, а всё остальное выполнит Ваш браузер или специализированный RSS-агрегатор.

Актуальность этого довольно старого формата связана с тем, что без RSS-ленты Ваш блог не возьмут в рейтинг блогов, вроде Яндексовского, не получится и связать блог с веб-агрегатором новостей, таким как Яндекс.Лента или Google Reader, соответственно, Вы никогда не узнаете, сколько у Вас подписчиков.

В большинстве случаев программирование RSS-ленты для типового «движка» на PHP+MySQL сведётся к одному запросу и одному программному циклу, то есть, сделать ленту очень легко. Покажем это на примере моего блога.

Как и большинство других структурированных файлов, XML-файл ленты состоит из заголовка, содержимого и завершающих тегов. Полное описание формата можете почитать сами вот здесь:

А мы ограничимся небольшим количеством стандартных для всех версий RSS тегов, которые нужно прописать в заголовке.

Элемент Описание
title Заголовок канала
link Ссылка на главную страницу сайта.
description Описание канала
language Язык, на котором написан канал. Например, ru — русский
copyright Копирайт
managingEditor Электронная почта редактора канала.
webMaster Электронная почта веб-мастера.
pubDate Дата публикации информации в канале.
lastBuildDate Время последнего изменения канала.
category Определяет категорию, к которой принадлежит канал.
Item Собственно содержимое канала. Должен быть хотя бы один такой элемент

В свою очередь, каждый элемент Item требует указания нескольких вложенных тегов:

Элемент Описание
title Заголовок
link Ссылка на полный текст статьи
description Аннотация статьи
category Категория статьи (я для простоты не стал формировать этот тег, лента работает во всех браузерах и без него)
pubDate Дата публикации статьи. Желательно ставить реальную дату, а не текущую или ещё не наставшую, иначе некоторые агрегаторы просто не будут отображать такую новость

Привёдем пример заполнения свойств заголовка:

$Title='Мой блог'; $Link='http://URL-главной-страницы/'; $Copyright='Мой копирайт'; $Description='Краткое описание ленты новостей'; $Category="news"; $Language="ru"; $ManagingEditor='admin@mail.com (Vasiliy Ivanov)'; $WebMaster='admin@mail.com (Vasiliy Ivanov)'; $LastBuildDate=@date("r");

Свойство $LastBuildDate мы потом перепишем, подставив реальную дату последнего обновления, ставить всё время текущую нехорошо. Писать адреса E-mail для RSS нужно именно так, как в образце — адрес, а в скобках — имя.

  • С помощью SQL-запроса получить последние 10 (или 20, или сколько нужно) записей блога, отсортированных по убыванию даты; если ни одной записи нет, не будет и ленты, если записей окажется меньше 10, лента всё равно будет работать, выводя столько новостей, сколько есть.
  • Организовать типовой цикл обработки результатов запроса. При обработке первой статьи подставить её дату в качестве $LastBuildDate и отдать браузеру заголовок XML-документа.
  • При обработке остальных записей каждый раз формировать новый элемент Item и отдавать его браузеру.

Вот код ленты в самом общем виде, для Вашей ленты понадобится изменить запрос — ведь имя базы и таблицы может отличаться, и поставить свои поля таблицы в цикле формирования записей Item .

//Коннект к базе уже выполнен, например, такой: $mysql=mysql_connect(DB_HOST, DB_USER, DB_PASS); //хост, логин, пароль mysql_select_db(DB_NAME); //имя базы данных mysql_query("SET CHARACTER SET 'cp1251'",$mysql); //Извлекаем последние 10 записей $result=mysql_query('select * from БАЗА order by date desc limit 0,10'); //Если ошибка запроса или нет записей - выйти на главную страницу if (!$result or mysql_num_rows($result)<1) header('Location: index.php'); $hdr=false; //Заголовок ещё не выведен while ($note = mysql_fetch_assoc($result)) < if ($hdr==false) < //Если ещё не печатали заголовок $hdr=true; //Сделать это 1 раз $LastBuildDate=@date("r",$note['date']); //Правим $LastBuildDate, предполагается, что дата хранилась как число bigint, //если это не так, используйте strtotime($note['date']) $PubDate=$LastBuildDate; //Ставим $LastBuildDate как дату публикации header("Content-Type: application/xml"); //Заголовок XML-документа //И печатаем всё, что нужно в заголовке: print "\r\n". "\r\n". "\r\n". "\r\n". "$Title\r\n". "$Category\r\n". "$Link\r\n". "$Copyright\r\n". "$Description\r\n". "$LastBuildDate\r\n". "$Language\r\n". "$PubDate\r\n". "http://blogs.law.harvard.edu/tech/rss/\r\n". "$ManagingEditor\r\n". "$WebMaster\r\n"; > //Здесь получаем, как минимум, следующие поля из записи $note: $title = strip_tags($note['name']); //Заголовок очередной новости $description = $note['anons']; //Блок содержимого новости, можно не удалять теги $s='http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']; $sb=strrchr($s,"/"); if ($sb!==false) $s=substr($s,0,-(strlen($sb)-1)); //Кросс-платформенно извлекли URL папки скрипта $link= $s.'index.php?id='.$note['id']; //И сформировали URL записи, содежащей полную новость $pubdate=@date("r",$note['date']); //Заполнили дату публикации, предполагается, что она хранилась как число bigint //Выводим элемент: print "\r\n". "".htmlspecialchars($title)."\r\n". "".htmlspecialchars($link)."\r\n". "".htmlspecialchars($description)."\r\n". //"$category\r\n". //не добавляем категорию к каждой новости "$pubdate\r\n". "$link\r\n". "\r\n"; > //Осталось закрыть файл print "\r\n\r\n";

Теперь сохранем получившийся код как файл rss.php в папке блога, добавляем в титул документа блога (внутрь тега ) строку

(вместо MyRSS также подставьте свой заголовок) и делаем кнопку RSS (стандартная нарисована здесь) со ссылкой на нашу ленту вида http://www.ваш_сайт.ru/rss.php

Что получилось, можно увидеть перейдя по ссылке RSS-канала этого блога.

18.07.2011, 11:12 [18194 просмотра]

Как сделать rss канал php примеры

(он же «», «», «», «», «») — это файл с перечнем публикаций сайта (или их анонсов), отсортированных по времени создания/обновления. Он не должен включать ссылки на страницы со служебной информацией или предназначенные для навигации, например, корзину интернет-магазина или страницы рубрик.

RSS используют читатели, узнавая о новом материале сайта в RSS-ридерах, и агрегаторы (например, Яндекс.Новости), чтобы постоянно не обходить весь сайт.

Символ RSS

height="80" width="80" style="overflow: hidden;"> 

Указывая ширину ( width ) и/или высоту ( height ) иконки, изображение будет пропорционально изменяться и подстраиваться под любой размер.

Пример RSS

Валидатор RSS

Что такое RSS-ридер

(он же «») — это программа, которая объединяет RSS-файлы нескольких сайтов в одну ленту. Cсылки на новые материалы всех интересующих сайтов собраны в одном месте. Не требуется переходить на каждый сайт в отдельности только для того, чтобы узнать есть ли новые публикации. Просмотренные ссылки помечаются как прочитанные. К непрочитанным можно вернуться в любое удобное время.

Пример RSS-ридера

Как создать rss.php на PHP и MySQL

Для базы данных table, содержащей такие столбцы:

 
+----------------+----------------------------+-------------------------------------+-----------------------------+----------------------------+----------------------------------------------------+ | id | url | title | update | meta | description | | smallint(5) | varchar(255) | varchar(255) | timestamp | set('noindex', 'feed', '') | varchar(255) | | UNSIGNED | | | CURRENT_TIMESTAMP | | | | AUTO_INCREMENT | | | ON UPDATE CURRENT_TIMESTAMP | | | +----------------+----------------------------+-------------------------------------+-----------------------------+----------------------------+----------------------------------------------------+ | 1 | 2017/02/rss-php-mysql.html | Как сделать RSS канал | PHP примеры | 2017-02-14 09:07:30 | feed | Что такое RSS-канал, зачем он нужен, пример файла, | | | | | | | как сделать его на PHP и MySQL и если требуется | | | | | | | с помощью .htaccess перенаправить в Feedburner | +----------------+----------------------------+-------------------------------------+-----------------------------+----------------------------+----------------------------------------------------+ | 2 | 2017/02/example.html | Название статьи | 2017-01-26 12:00:00 | | Описание статьи | +----------------+----------------------------+-------------------------------------+-----------------------------+----------------------------+----------------------------------------------------+

Файл db.php

localhost‘, ‘my_user‘, ‘my_password‘, ‘my_db‘); // подключение к серверу MySQL: тут указывается пароль к базе данных if ($mysqli->connect_error) < die('Connect Error (' . $mysqli->connect_errno . ‘) ‘ . $mysqli->connect_error); > > else

Файл rss.php

// см. стандарт if ($_SERVER['QUERY_STRING'] == '') < // убирать невостребованные страницы с параметрами, например, site.ru/rss.php?p=0, site.ru/rss.php?p=1 и т.д. // подключить файл с паролем от базы данных define('dbOn', ''); require_once 'абсолютный_адрес/db.php'; if (!$mysqli->set_charset("utf8")) < printf("Ошибка при загрузке набора символов utf8: %s\n", $mysqli->error); exit(); > else < if ($result = $mysqli->query("SELECT url, title, update, description FROM table WHERE meta LIKE '%feed%' ORDER BY update DESC LIMIT 10;")) < // ORDER BY осуществляет сортировку строк по дате обновления, условие WHERE meta LIKE '%feed%' — выбор только тех, в ячейках которых на пересечении со столбцом meta есть значение feed (если перед обновлением строки не убрать feed, то читатели увидят дубликат записи), а LIMIT 10 останавливает перебор и вывод после первых 10-и найденных header("Content-Type: application/rss+xml;"); echo '   <b >Шпаргалка блоггера</b> // своё название RSS-ленты http://shpargalkablog.ru/ // свой URL сайта, данные которого транслируются в RSS-ленте Вебмастеру в помощь: SEO, аналитика, HTML, CSS, JS, PHP // своё описание RSS-ленты одним предложением ru'; while ($row = $result->fetch_assoc()) < echo ' '. $row['title'] .' http://shpargalkablog.ru/'. $row['url'] .' '. $row['description'] .' '. date('r', strtotime($row['update'])) .' http://shpargalkablog.ru/'. $row['url'] .' '; > echo ' '; > > $mysqli->close(); exit(); > else < // 404 ошибка http_response_code(404); include_once 'http://site.ru/404.php'; // подключить файл со своим оформлением 404 ошибки exit(); >

Файл .htaccess

# если нужен редирект с /rss.php на Feedburner (см. страница справки) RewriteEngine On # если запись отсутствует RewriteCond % !FeedBurner [NC] RewriteCond % ^$ [NC] RewriteRule ^rss.php$ http://feeds.feedburner.com/shpargalkablog [R=301,L]

HTML разметка страниц сайта

Не нужно непременно искать адрес RSS-ленты. В RSS-ридер достаточно добавить адрес любой страницы сайта, в исходном коде которой есть запись:

  RSS | Шпаргалка блоггера" type="application/rss+xml" rel="alternate" href="/rss.php"/>
  • Настройка Feedburner
  • XML карта сайта на PHP и MySQL

RSS канал на PHP

RSS канал на PHP

Пример генерации фида RSS 2.0 на PHP, полную спецификацию можно посмотреть на validator.w3.org.

rss.php
'; $out .= ''; $out .= ''; $out .= 'Название канала'; $out .= 'Описание канала'; $out .= 'http://site.ru'; $out .= ' http://site.ru/logo.jpg Название канала http://site.ru '; // Получение и вывод статей из БД. $sth = $dbh->prepare("SELECT * FROM `articles`"); $sth->execute(); $articles = $sth->fetchAll(PDO::FETCH_ASSOC); foreach ($data as $row) < $out .= ' ' . $row['name'] . ' http://site.ru/articles/' . $row['id'] . '.html ' . $row['category'] . ' ' . $row['id'] . ' ' . date(DATE_RFC822, $row['date_add']) . ' '; > $out .= ''; $out .= ''; header('Content-Type: text/xml; charset=utf-8'); echo $out; exit();
Результат
  Название канала Описание канала http://site.ru http://site.ru/logo.jpg Название канала http://site.ru  RSS Tutorial http://site.ru/articles/5 New RSS tutorial on Snipp.ru

]]>
PHP 5 Thu, 08 Sep 16 17:00:00 +0300

Перенаправление с .php на .xml

Чтобы php-скрипт открывался по адресу http://site.ru/rss.xml , в .htaccess нужно добавить запись:

RewriteEngine On RewriteRule ^rss.xml$ rss.php [L,QSA]

Как сделать RSS-ленту (RSS-канал) для сайта

В этой теме мы рассмотрим, как на своем сайте создать простейшую, но зато свою собственную RSS-ленту.

Рассмотрим для начала простенький пример RSS-ленты, которая имеется у нас на сайте и располагается по ссылке — RSS-лента. Далее мы разберем основные её компоненты.

Как вы могли заметить, данная лента выполнена с использованием PHP кодов и следовательно файл имеет расширение .php, что не мешает ей быть RSS-каналом. Файл в формате php мы выбрали не случайно, а потому, что в данном файле можно разместить код, который будет обрабатываться на стороне сервера и не будет виден посетителям данной RSS-ленты (например, счетчик посещений).

Обязательные элементы RSS-канала
title Имя RSS-канала. Имя канала, как правило, совпадает с названием сайта.
description Описание RSS-канала.
link URL сайта, с которым связан данный RSS-канал.
Необязательные элементы RSS-канала (channel)
language Язык публикации канала (ru — Русский; en-us — Английский).
copyright Сведения об авторстве на RSS-канал.
managingEditor Email адрес ответственного за содержание RSS-канала.
webMaster Email адрес вебмастера, отвечающего за техническую часть.
pubDate Дата публикации канала, в соответствии с RFC 822.
lastBuildDate Время последнего изменения канала в соответствии с RFC 822.
category Категории, к которым принадлежит канал.
generator Название программы, с помощью которой был сгенерирован данный RSS-канала.
docs Ссылка на файл документации подвида RSS, который был использован при создании канала.
ttl Время, в течение которого канал сохраняет свою актуальность. Время указывается в минутах.
image Используется для вставки графического файла (поддерживаемые расширения: GIF, JPEG, или PNG), который будет показан вместе с RSS-каналом.
Имеет следующие параметры:
title — название изображения;
description — описание изображения, которое будет показано, в случае, когда файл по каким-либо причинам не доступен;
link — ссылка на страницу, с которой связан RSS-канал;
url — URL на графический файл формата JPEG, GIF или PNG, который связан с RSS-каналом;
width — ширина изображения;
height — высота изображения.
skipHours Часы, в которые RSS-ридеры могут не проверять RSS-канал на наличие обновлений. Часы должны указываться внутри параметра hour.
skipDays Дни, в которые RSS-ридеры могут не проверять RSS-канал на наличие обновлений. Дни должны указываться внутри параметра day.
Обязательные элементы итема (item)
title Название итема (новости, темы) RSS-канала.
description Описание итема.
link Ссылка на страницу, содержащую полное описание указанного итема (новости, темы) RSS-канала.
Необязательные элементы итема (item)
author Email адрес автора данного итема (новости, темы).
category Категория итема (новости, темы).
comments Ссылка на страницу, содержащую комментарии по итему (новости, темы).
enclosure Медиа-объект, присоединенный к итему.
Имеет следующие параметры:
url — ссылка на файл объекта;
length — размер файла в байтах;
type — тип файла, в соответствии со спецификацией MIME.
guid Уникальная строка идентификации итема.
pubDate Дата публикации итема, в соответствии с RFC 822.

Теперь Вы смело можете приступать к созданию своей собственной RSS-ленты, которая будет освещать все новости и новые темы на Вашем сайте.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *