Скрипт на PHP для вывода на сайте RSS 2.0 - новостей

Для пополнения сайта уникальным контентом можно использовать RSS-ленты других сайтов (например, новостных). Это понравиться как поисковым машинам, так и посетителям сайта.
Основной особенностью этого скрипта является использование регулярных выражений, то есть работа скрипта обходиться без DOM-функций. Для вывода будем использовать лишь заголовки, ссылки на публикации и краткие описания публикаций новостной ленты.
Для того чтобы не запрашивать все время данные RSS-канала, будем их кэшировать. Поэтому для каталога, где будет сохраняться кэш-файл, нужно будет установить права доступа 777.
Для нормальной работы скрипта нужен PHP не ниже версии 4.3.

 

Описание: Скрипт на PHP для вывода на сайте RSS - новостей
Скачать Размер: 1.61 KB. Количество скачиваний: 5385

 

Обновление 17.12.2010г. Новая версия скрипта. Для правильной работы нужен PHP версии 5.1. Что нового?
1. Добавлен вывод даты новостей ленты
2. Добавлен вывод рисунка канала
3. Скрипт при необходимости преобразует кодировку полученных данных ленты из windows-1251 в кодировку utf-8. Если вам не нужно преобразование (сайт у вас в кодировке windows-1251) или нужно наоборот преобразовать данные из utf-8 в windows-1251, то можно немного подредактировать скрипт (комментарии в скрипте есть, сможете самостоятельно отредактировать).

 

Скрипт доработан с помощью владельца сайта мировыеновости.рф

 

Описание: Скрипт на PHP для вывода на сайте RSS 2.0 - новостей. Версия v2
Скачать Размер: 2 KB. Количество скачиваний: 4675

 

Пример использования RSS-скрипта

 

Код
<?php

include_once("write_rss.php");//подключаем файл с функцией вывода RSS-новостей

//адресс новостей (URL-адрес RSS потока)
$url_rss="http://www.linedmk.com/rss.php";

//количество выводимых новостей
$kol_print_news=10;
//имя файла для хранения RSS-новостей на локальном сервере (то есть кэш-файл)
$file_rss="cache_rss.xml";
//время обновления, в часах
$hclock=1;

print_rss($url_rss,$file_rss,$hclock,$kol_print_news);//вызываем функцию вывода RSS-новостей

?>

Опубликовано 22 июня 2009 г.
Комментарии к публикации
Всего комментариев: 92
прохожий: Гость | 05.11.2009, 22:23 #
Попробуем
прохожий: mius | 15.12.2009, 01:51 #
сайт: recmap.ru
Спасибо. Легенький и простой скрипт. Многие жмутся ведь из-за такого.
прохожий: Гость | 11.01.2010, 05:53 #
неплохо было бы вынести переменную показывать ли описание или нет. Также добавить дату и время
прохожий: Гость | 01.02.2010, 05:04 #
kak v skripte meniat kodirovku . mne nuzna kodirovka utf -8 ?
прохожий: mius | 11.02.2010, 02:45 #
сайт: recmap.ru
Насколько я помню, кодировка зависит от поставщика ленты и кодировки страницы, на которой этот скрипт используется. Сам скрипт к коду не привязан.
прохожий: zherenovsky | 08.05.2010, 08:53 #
сайт: ru-fura.ru
работает скрипт. автору респект и уважуха!!!
пользователь: | 21.05.2010, 06:04 #
Спасибо. Интересный парсер. Правда требовалось немного изменить и доработать.
прохожий: seo-cook | 27.10.2010, 00:53 #
сайт: seo-cook.ru
а как доработал, где-нибудь скачать можно?
прохожий: Москва | 21.05.2010, 06:07 #
сайт: www.aqula.ru
Не хватает даты и времени А также названия источника.
прохожий: Дима | 07.06.2010, 19:39 #
Где взять write_rss.php
Суперадмин: | 09.06.2010, 07:17 #
Странный вопрос! В архиве, конечно, который можно бесплатно скачать по вышеприведенной ссылке.
прохожий: Наталья | 01.07.2010, 02:20 #
установила скрипт. Все классно выводило первый час, после этого новости пропали.
Атрибуты папки и файлов правильные. В чем ошибка?
Суперадмин: | 02.07.2010, 06:50 #
Я не ясновидящий! ;))
прохожий: Гость | 07.07.2010, 23:04 #
Наталья, этот скрипт по умолчанию обновляется каждый час.

В файле write_rss.php есть строчка " if (filemtime($file_rss) + $hclock*60*60 < time()) "

я поменял $hclock*60*60 на $hclock*60*, благодаря чему обновляться стало чаще, вожможно вам это поможет.
прохожий: Дмитрий | 29.07.2010, 00:38 #
сайт: it-tavern.ru
У кого появляются проблемы с кодировкой, исправляем вот так:

$t=iconv("Windows-1251","UTF-8",$t);
echo ($t);
прохожий: mod | 25.09.2010, 00:11 #
У меня скрипт не выполняется :(
chmod выставил, каталоги и файлы правильно прописаны. В кэш ничего не записывается. В исходном коде скрипт вырезается о_О Может хостер блокирует?
Суперадмин: | 28.09.2010, 05:41 #
Как это "В исходном коде скрипт вырезается"?
прохожий: mod | 28.09.2010, 22:15 #
Ну вот например я вставил скрипт в шаблон (инклюдом), обновляю страницу сайта, вижу что часть сайта не загрузилась, открываю исходный код страницы и вижу, что весь код после иклюда, пропал, т.е. не загрузилось.
Суперадмин: | 01.10.2010, 20:53 #
Скорее всего у вас происходит фатальная ошибка, при которой работа скрипта полностью прекращается. И также у вас похоже отключены сообщения об ошибках, поэтому ничего больше не выводится. Включите сообщения об ошибках PHP, и увидите, в чем причина.
прохожий: mod | 04.10.2010, 21:29 #
Странно. Брал скрипт, ничего не изменял, вставлял в голую хтмл страницу, и тоже не работало.
прохожий: mod | 04.10.2010, 21:38 #
Проблема частично решилась! Дело было в "htaccess", и с строке "RewriteEngine On". Теперь нужно прописать исключение для этого скрипта.

Спасибо за ответы!
прохожий: mod | 27.10.2010, 03:41 #
...и что-то не получается исключение сделать :(
прохожий: Glok | 07.11.2010, 17:50 #
Скрипт работает, подскажите только на картинки сделать, чтобы выводились?
Суперадмин: | 07.11.2010, 20:28 #
Изучаем Спецификацию RSS 2.0 (к примеру на сайте http://beshenov.ru/rss2.html), и переделываем скрипт для вывода картинок.
прохожий: Гость | 16.11.2010, 06:08 #
сайт: www.rbk2.ru
Можно мануал по установке?(((
Куда пхп файл заливать?Где папку для файла - кэш создать?
У меня сайт на движке.
прохожий: Гость | 16.11.2010, 06:09 #
сайт: www.rbk2.ru
А то мыкаюсь, блин мыкаюсь, нигде не могу найти модуль подходящий...
А это походу штучка что надо как раз ))
Суперадмин: | 01.12.2010, 22:51 #
В статье и так все написано, надо сделать как в приведенном коде.
прохожий: Гость | 12.12.2010, 21:42 #
Спасибо за скрипт! Хорошая идея с кэшем.

Но у меня не получается запустить любой пакет из google reader. Вы не пробовали тестить ленты ридера?
Суперадмин: | 13.12.2010, 03:14 #
нет, не пробовал.
прохожий: Гость | 14.12.2010, 02:04 #
А будите пробовать?
Суперадмин: | 14.12.2010, 03:04 #
Нет, не хочется :)
прохожий: ZAVcom | 16.12.2010, 14:32 #
сайт: cooldata.ru/
если бы еще при это был реализован вывод картинок к новостям
можете помочь?
прохожий: Гость | 17.12.2010, 08:07 #
а как вывести дату новости? в скрипте вроде все есть для этого но не пойму. нету и все. Может есть кака нибудь подсказка?
Суперадмин: | 17.12.2010, 21:36 #
Скачайте новую версию, в ней реализован вывод даты.
прохожий: Гость | 18.12.2010, 00:11 #
Я имею ввиду вывод даты в моих новостях, к примеру я хочу отправлять в качестве новости новое объявление, зоголовок , содержание ну и ДАТУ размещения.
прохожий: Гость | 18.12.2010, 19:41 #
Странно. В мозилле не выводит дату. А в интернет эксплорере выводит. Разные браузеры по разному выводят содержимое сайта?
Суперадмин: | 21.12.2010, 17:50 #
В самом деле странно. У меня в мозилле все нормально отображается - дату выводит.
прохожий: Евгений | 23.12.2010, 23:16 #
Для меня это тоже странно. На моем сайте (мировыеновости.рф) все выводит в том числе и даты, немного доработал что теперь картинки выдает вместе с новостью, дальше идея есть внедрить флеш проигрыватель, т.к. на некоторых новостях есть видео ролики.
прохожий: Алекс | 23.01.2011, 21:46 #
Помогите, вывод работает нормуль, но картинок нет.Что может быть, подскажите
Суперадмин: | 25.01.2011, 06:37 #
Картинки еще должны быть в потоке RSS. Не каждый сайт дает эту картинку.
прохожий: Гость | 31.01.2011, 02:27 #
Если я хочу на разных страницах сайта выводить разные новости
к примеру:

на 1-странице новости туризма:
указываю адрес
//адресс новостей (URL-адрес RSS потока)
$url_rss="http://news.yandex.ru/travels.rss";

на 2-странице новости происшествий
указываю адрес

//адресс новостей (URL-адрес RSS потока)
$url_rss="http://news.yandex.ru/incident.rss";

так вот при открытии этих страниц новости выводятся одинаковые что на 1 странице, что на 2 странице с первого адреса
Открываю эти страницы через некоторое время, выводятся уже новости со второго адреса ,но и на 1 странице и на 2 странице одинаковые
Суперадмин: | 31.01.2011, 19:44 #
Новости кэшируются, и обновляются через определенный промежуток времени. Нужно как-то сделать разделение кэширования.
прохожий: Maksim | 10.09.2014, 00:08 #
E-mail: написать сообщение
Подскажите пож-та, как можно сделать "разделение кэширования"?
прохожий: Алексей | 19.03.2011, 22:27 #
Ну так как сделать, чтобы выводились картинки? Внутри скрипта есть переменные которые их обрабатывают да и в кеш xml файле они тоже видны, но из на сайте нет в экплорере, а хроме они есть, но безразмерные плюс ссылка на них битая.
прохожий: Алексей | 19.03.2011, 22:51 #
Короче нашёл решение, как вывести картинки:
Заменить сточку:
$description[1]=preg_replace("#<\!\[CDATA\[(.*?)\]\]>#eis","'\\1'",$description[1]);

на
$description[1]=preg_replace("#<\!\[CDATA\[#eis","'\\1'",$description[1]);
$description[1]=preg_replace("#]\]>#eis","'\\1'",$description[1]);

Тогда картинки, которые передаются в дескрипшене станут отображаться.

Хорошего всем дня.
прохожий: Егор12 | 13.03.2012, 00:02 #
E-mail: написать сообщение
сайт: remtest.ru
Действительно отображаться стали, Алексей - благодарствую за помощь. Автору непременно спасибо за скрипт!, так долго искал...
прохожий: Андрей | 09.04.2011, 00:25 #
E-mail: написать сообщение
Спасибо за замечательное решение!
Особенно понравился по доступности второй вариант.
прохожий: Алексей | 11.04.2011, 02:04 #
Появилась ошибка работе скрипта:Вот она
Notice: Undefined offset: 1 in /home/h28192/data/www/torgploshad.com.ua/write_rss.php on line 72

Notice: Undefined offset: 1 in /home/h28192/data/www/torgploshad.com.ua/write_rss.php on line 72
прохожий: Alex | 14.04.2011, 23:18 #
а как сделать так, что бы выводился только заголовок и картинка?
Суперадмин: | 15.04.2011, 05:07 #
Отредактируйте скрипт.
прохожий: Alex | 15.04.2011, 06:07 #
Пробовал, не получается (
Суперадмин: | 15.04.2011, 06:46 #
Про какой спрашиваете, их два варианта на странице?
прохожий: Alex | 16.04.2011, 03:44 #
E-mail: написать сообщение
про тот, который "write rss.php"
Суперадмин: | 17.04.2011, 04:36 #
Описание находится в переменной $description. Удаляем или комментируем строки содержащие данную переменную:
$d_is=preg_match("#<description>(.*?)</description>#is",$one_item,$description);
$description[1]=preg_replace("#<\!\[CDATA\[(.*?)\]\]>#eis","'\\1'",$description[1]);

Редактируем строчку:
$t.="<div><a href='".$link[1]."' target='_blank'>".$title[1]."</a> <br>".$description[1]."</div>";

Следующим образом:
$t.="<div><a href='".$link[1]."' target='_blank'>".$title[1]."</a></div>";
прохожий: Alex | 17.04.2011, 08:03 #
Ну а картинка то не отображается тогда. Она ведь в поле $description находится, а получается мы полностью закоментировали ее. Хотя у меня та же картинка есть еще в поле <enclosure url="....." length="*" type="image/png" /> Может ее можно вытащить из этого поля?
прохожий: Alex | 18.04.2011, 02:21 #
Спасибо, разобрался. Только кодировка текста осталась непонятная ((
Русские буквы иероглифами пишет ((
Суперадмин: | 18.04.2011, 03:58 #
С помощью регулярных выражений вытаскивали url изображения? И какая кодировка у вас? Если с помощью регулярных выражений, то нужно добавить модификатор u для указания работы с многобайтовыми кодировками. Например:

$d_is=preg_match("#<description>(.*?)</description>#isu",$one_item,$description);

А также надо указать кодировку PHP в самом начале скрипта. Для кодировки utf-8:

setlocale(LC_ALL,"utf-8");
mb_internal_encoding('UTF-8');

пользователь: | 18.04.2011, 05:33 #
не помогло ((
вот сама лента: http://shop.lovethismusic.ru/rss/
Суперадмин: | 18.04.2011, 06:18 #
Кодировка сайта у вас какая? Может она отличается от utf-8?
пользователь: | 19.04.2011, 04:19 #
нет, не отличается. в эксплорере нормально отображается...
Суперадмин: | 19.04.2011, 05:35 #
Функции для работы с текстом использовали, вроде substr()? Если да, то нужно использовать специальные функции для работы с многобайтовыми кодировками, то есть вида mb_substr(). Так же в PHP должна быть библиотека для работы с многобайтовыми кодировками.
пользователь: | 19.04.2011, 06:17 #
извиняюсь, сайт в "windows-1251" кодировке. Но опять же менять не могу ((
Как же сам скрипт перекодировать в мою кодировку?
пользователь: | 19.04.2011, 06:26 #
все, получилось. Спасибо! Вот так сделал:

if (preg_match('/<?xml[^>]+encoding[\s]*=[\s]*("|\')utf-8("|\')[^>]+?>/i', $text_rss))
{

$text_rss = iconv("utf-8", "cp1251", $text_rss);
file_put_contents($file_rss, $text_rss);//пишем данные обратно в файл

}
Суперадмин: | 19.04.2011, 06:56 #
Вообще-то для варианта, при котором кодировки сайта и RSS-ленты отличаются есть второй вариант скрипта, расположенный чуть ниже ;) Немного подредактировать под свои требования и все! :)
пользователь: | 20.04.2011, 05:45 #
и снова здравствуйте! :)
Последний вопрос по поводу стилей. Можно ли отредактировать стили получившегося блока. Именно не самого айфрейма, а текста внутри. Можно, например, отредактировать линки типа (a, a:visited) ?
Суперадмин: | 21.04.2011, 04:59 #
Ну вы и так ответили на свой вопрос ;) С помощью стилей и можно изменить внешний вид. Нужно поместить выводимые RSS-ки в блок div с названием класса, например box_import_rss и в стилях прописать

.box_import_rss a { тут свойства }
.box_import_rss a:visited { тут свойства }
пользователь: | 22.04.2011, 06:19 #
вот именно, что стили типа "бэкграунд" можно задать а сам шрифт и цвет линки - нет.. Он извлекает свойства div из скрипта. А как прописать стиль в самом php - непойму ((
Суперадмин: | 23.04.2011, 05:17 #
В скрипте извлекающем данные из RSS должна быть строчка:

$t.="<div><a href='".$link[1]."' target='_blank'>".$title[1]."</a> <br>".$description[1]."</div>";

в эту строчку можно добавить класс CSS для ссылки, например добавим класс my_style_class:

$t.="<div><a href='".$link[1]."' target='_blank' class='my_style_class' >".$title[1]."</a> <br>".$description[1]."</div>";
пользователь: | 24.04.2011, 22:33 #
не пойму что же я неправильно делаю - прописал стиль в <head> .adver {font-family: bla bla bla}
в теге div прописую в class='adver' - и результат 0
что неправильно?
Суперадмин: | 25.04.2011, 05:16 #
Вы так и пишите
<head>
.adver{...}
??
Вообще-то нужно в теге <style>
<head>
...
<style type="text/css">
.adver{}
</style>
...
</head>

Также нужно не забывать от приоритете стилей. И записать так
div a.adver { ... }

Подробнее об приоритете стилей смотрите
http://design-praktik.com/2009/08/01/prioritet-css-stilej/
прохожий: Ивван | 21.04.2011, 00:30 #
сайт: domsovets.ru/
Не знаю как у остальных, но у меня получилось сразу! Спасибо, буду пользоваться. Побольше бы таких статей!
прохожий: pric | 22.12.2011, 15:25 #
сайт: pr-ic.ru
У меня тожке сразу заработало, пользуюсь
прохожий: Тарас | 01.07.2011, 01:35 #
сайт: sitear.ru
Вот это дела, 5 минут дела и у меня есть RSS лента, скрипт работает как швейцарские часы... Доволен!!!
прохожий: Ден | 03.01.2012, 03:15 #
сайт: site.ru
Приветствую! Скрипт работает, и выводит заголовок и текст + лого
Но не выводит прикреплённые Медиа файлы.
Подскажите как вывести...
Вот пример
http://www.strana.co.il/export/all.xml
прохожий: chajka | 26.01.2012, 05:20 #
E-mail: написать сообщение
Ура! Получилось! Замучилась с кодировкой - все сделала как написано - и все равно кракозябры. А оказывается кеш не поменялся. ))) Прошел час и все ок )) Спасибо огромное - столько перепробовала скриптов. Ваш - лучший.
прохожий: Дим | 23.02.2012, 21:13 #
E-mail: написать сообщение
Всё сделал по инструкции, но всё равно не выводится ничего.... Просто пустая страница.
Не подскажете, в какую сторону копать?
Спасибо.
прохожий: Dmitry | 19.03.2012, 01:28 #
E-mail: написать сообщение
сайт: zonesoftware.ru
Как можно объединить несколько рсс лент?
прохожий: Илья | 19.03.2012, 21:09 #
Спасибо!
прохожий: Вит | 21.04.2012, 09:11 #
Вместо echo ($t); нужно echo htmlspecialchars_decode ($t);
прохожий: Akkermanez | 09.08.2012, 16:23 #
сайт: akkerman24.com
Познавательно, надо покрутить. Спасибо.
прохожий: Евстропов | 17.11.2012, 17:47 #
E-mail: написать сообщение
Сейчас почти все движки обладают соответствующим модом, а если самопальный движек, то и ленту прикрутить как 2 пальца об асвальт)))
прохожий: garnir | 11.12.2012, 19:33 #
E-mail: написать сообщение
Ребят, ну подскажите что делать с кодировкой. Я ничерта не понимаю в PHP. Что тут написано - шатл в разобранном виде. Что нужно сделать со скриптом, чтобы русские буквы иероглифами небыли? Кодировки обоих сайтов cp1251
прохожий: Титан | 20.01.2013, 09:42 #
Попробуй в самом файле casha_rss.xml изменить в первой строке кодировку на Windows-1251
прохожий: Алексей | 08.03.2013, 13:59 #
E-mail: написать сообщение
В примере в адресе ссылки тип .php. Могу ли я подключить ссылку с расширением .rss? Пробовал, выдаёт пустую страницу
прохожий: MrFiks | 07.06.2013, 09:41 #
Отлично завелось с пол пинка! Хороший скрипт. Автору сенкс.
прохожий: Serg | 20.08.2013, 18:12 #
E-mail: написать сообщение
Я - новичек в PHP. Кому не в тягость. Опишите процесс прикручивания скрипта.
Имеем файл write_rss и что с ним делать
прохожий: Clipof | 25.07.2013, 20:58 #
сайт: www.clipof.ru/
как поставить ограничение на количество символов в тексте?
прохожий: Rudydu | 13.08.2013, 19:40 #
E-mail: написать сообщение
Подскажите пожалуйста как прописать исключения в htaccess для скрипта. Ну не запускается скрипт и всё не хочет работать((
прохожий: Сергей | 19.05.2014, 19:33 #
Спасибо, привинтил. Все работает!
прохожий: Сергей | 09.06.2014, 05:38 #
Подскажите
привинтил рсс от форума..показывает тему..сообщения и дату.
Но в сообщениях есть фото их тоже выводит как убрать что бы фото не показывало?
прохожий: Рамиль | 01.11.2017, 21:32 #
E-mail: написать сообщение
сайт: khamzin.ru
Спасибо за хороший скрипт. Правильно заработал сразу же после установки. Респект автору.
прохожий: Серый | 12.12.2017, 08:39 #
Могли бы поподробней про установку, не работает!!!
Вход в аккаунт
Новости сайта