RSS для вебмастера.
или как сделать RSS ленту за пять минут
С.Трофимов | 17.10.2014, 09:48 |
Как создать rss ленту Как вставить новостную ленту (rss) в html? Rss персер на php подскажите как доработать Не могу сделать RSS ленту |
логи говорят про ошибку 500 и больше ничего, а что значит связана с настройкой .htaccess ? там у меня только редирект прописан и больше ничего, а на данный файл ничего не установлено.
p.s. файл ошибок ругается на 29 строку,[20-Oct-2014 06:53:54 UTC] PHP Parse error: syntax error, unexpected ‘;’ in /home/davinnip/public_html/personaastro.ru/personaastrorss.php on line 29
Добавлено через 6 минут
убрал точку из этой строки, заработало, но выводит в другой кодировке, как это можно исправить?
Добавлено через 8 минут
с кодировкой разобрался, все работает, спасибо.
RSS на PHP: Создание RSS ленты на PHP
Добрый вечер пользователи сайта red-star.pro. В сегодняшнем уроке мы будем создавать свой RSS-канал с помощью PHP и MySQL.
Для начала рассмотрим, что такое RSS и зачем он нужен.
Простой пример RSS-канала:
Ладно, хватит теории, переходим к практике.
Для данного урока нам понадобится MySQL база данных с одной заполненной таблицей.
Итак, начнем.
Шаг 1. Создаем документ
Первым шагом нам нужно создать документ с расширением .php. Я назвал созданный файл rss.php. Данный файл должен быть пустым, не должно быть ни одной строчки кода.
Шаг 2. База данных
В этом шаге нам нужно соединение с базой данных, в которой находится таблица с новостями. Если нет таблицы в БД, то создайте ее. Я вынес соединение в отдельный файл и здесь просто его подключил:
Также мы здесь указываем, что тип файла xml и указываем кодировку.
Шаг 3. Выводим данные из базы
Теперь после подключения к базе пишем код дальше. А дальше мы начинаем писать стандартную конструкцию RSS-канала. Вернее ее первую часть
Теперь берем вторую часть конструкции и вставляем ее в наш код. Но, не просто вставляем, а делаем запрос к БД и вытаскиваем из нее нужные нам строки. А строки, которые нам нужны: id, title, description и date. Выводим все это в цикле do/while.
И в самом конце кода закрываем теги канала.
На этом код RSS-канала закончен. Теперь нам осталось только подключить данный файл к нашей странице. А подключается это очень просто. Между тегами пишем такой код:
В коде запроса LIMIT 10 — означает, что новостей будет выведено 10, но вы можете поставить слово число.
Чтобы код был более понятен — я выложу исходники файла rss-канала.
На этом данный урок окончен. Спасибо за внимание.
Делаем свой RSS-канал
После серии статей о том, что такое RSS, у многих владельцев сайтов, у которых нет RSS (а таких не так уж и мало, как могут думать некоторые), может возникнуть желание заполучить его себе:-) В этой статье я хочу перечислить способы организации RSS-канала для своего сайта. Начиная с самых простых способов и заканчивая сложными.
Изначально нужно быть уверенным, что вы знаете о том, что RSS-документ – это, по сути своей, обычный файл, в котором специальным образом в виде текста описаны те или иные новости (или статьи). В итоге понятие «у меня (у моего сайта) есть RSS-канал» будет выражаться на практике в виде интернет адреса к этому самому документу (у меня на блоге это, к примеру, адрес: http://feeds.feedburner.com/devezoterik). Ваши же читатели, имея этот адрес, в дальнейшем смогут следить за изменениями в этом файле с помощью специальных программ.
Использование сторонних сервисов (блогов)
Способ, пожалуй, один из самых простых (не требует специальных знаний в области программирования, денежных затрат и т.д.), но при этом, как не парадоксально, он не плох. Можно использовать бесплатные сервисы, предоставляющие возможность вести свои блоги. Блоги или по-русски говоря «дневники», это чаще всего что-то вроде специфических домашних страниц (здесь можно более подробно об этом прочесть) :). Во-первых, на всех таких серверах вам выдают ссылку на RSS-документ (RSS-канал) вашего блога. Во-вторых, блоги имеют именно новостную структуру, т.к. все ваши записи в блоге идут последовательно, и каждая из них привязана к какой-либо дате, а это как раз то, что нам нужно.
То есть идея в том, что где бы вы не содержали свой сайт, вы можете параллельно поддерживать на другом сайте (сервисе, о них чуть позже) актуальную новостную ленту. На своем же сайте вы можете указать ссылку на RSS-документ, которой смогут воспользоваться посетители, желающие следить за вашими новостями.
Подобных сервисов для ведения своих блогов предостаточное количество в интернете. Одни из самых популярных и надежных это: www.blogger.com, my.ya.ru и livejournal.com (но вообще их просто несметное количество, отличающихся обычно немногим). На каждом из указанных мной сервисов есть русская версия с подробной помощью, описывающей, как «завести» свой блог.
Использование сервисов генерации RSS из обычных страниц
Этот способ так же не требует навыков программирования и подходит в первую очередь людям, которые имеют свой сайт и имеют на нем некую страницу новостей, которые они могут обновлять тем или иным способом, но, тем не менее, не имеют на этом сайте RSS-канала.
Конечно, можно воспользоваться первым способом: создать где-нибудь блог и дублировать в него новости со своего сайта (обычно это те новости, которые выводят на первой странице сайта). Но тогда ведь постоянно придется дублировать новости с сайта на блог… Предлагаемый же способ дает альтернативу для более прогрессивных/ленивых (иногда грань между этими понятиями бывает мала :)) владельцев сайта.
Смысл заключается в том, чтобы использовать сервисы, которые будут сами следить за вашей страницей новостей и создавать каждый раз (при обновлении вами страницы) актуальный RSS-документ. О подробностях этого процесса я уже писал. Писал в первую очередь для тех, кто хочет следить за чужими сайтами, но никто нам не мешает посмотреть с другой точки зрения и следить за своим В итоге мы будет иметь ссылку на автоматически обновляемый RSS-документ, отражающий все новости на вашем сайте (правда, с задержкой около одного часа). Вам лишь нужно будет добавлять новости на свою страницу, не изменяя внутреннего форматирования html документа, чтобы сервисы «слежения» не потерялись на странице в поисках искомых новостей (чтоб узнать более подробную информацию, читайте статью по выше приведенной ссылке).
Создание RSS-документа вручную
Если по каким-либо причинам вы не хотите, чтоб RSS-документ обитал вне вашего сайта, и при этом вы не программист, остается еще один способ: создавать и обновлять этот документ у себя на сайте вручную (здесь уже понадобится опыт работы с html). В случае использования хостинга без поддержки скриптов и при не слишком частом появлении новостей (иначе вся эта затея будет очень утомительной), это вполне востребованный вариант.
Для создания и редактирования такого файла лучше всего использовать редактор Notepad++ или любой другой редактор, поддерживающий работу с кодировкой UTF-8 (без BOM). Документ должен быть в кодировке UTF-8 (без BOM). Вот пример того, как может выглядеть RSS-документ внутри (пример снабжен комментариями):
Сохранять такой файл в большинстве случаев лучше под именем «rss.xml». Имя rss уже как традиция, но можно использовать и любое другое имя, а расширение xml просто желательно (в этой статье я не способен оговорить и объяснить всех деталей, так как тогда она была бы явно слишком большой :)).
Автоматическая генерация RSS-документа на своем сервере
Этот способ подходит уже только для более искушенных веб-программированием людей. Если информация на сайте хранится в базе данных, а сами страницы являются серверными скриптами (а ля PHP), тогда становится возможным использовать самый автономный и не обременяющий в дальнейшем способ – создавать в автоматическом режиме RSS-документ при запросе оного пользователями. Описывать, как создать подобный скрипт, не имеет смысла, так как уже есть достаточно статей на эту тему с готовыми примерами и разъяснениям к ним. Вот одни из них (для языка PHP): ссылка 1, ссылка 2, ссылка 3, ссылка 4, ссылка 5.
Скромный посредник — Feedburner
И вот у вас, наконец, есть желанный адрес своей RSS-ленты. Казалось бы, чего еще можно желать? Конечно же, подробной статистики. Именно для этого и был создан сервис feedburner. Он позволит вам получать максимально возможную статистику, такую, например, как: количество подписчиков, распределение подписчиков по странам, степень интереса подписчиков к тем или иным новостям, возможность получать ваши RSS-новости по e-mail и т.д.
Основной принцип работы feedburner`а заключается в том, что он является посредником между вашим RSS-документом и читателями. Вы указываете feedburner`у адрес своей RSS-ленты, после чего feedburner сможет отдавать эту ленту уже из другого адреса (адрес будет таким: http://feeds.feedburner.com/ + имя вашей RSS-ленты). И если пользователи будут подписываться именно на адрес от feedburner`а, вы сможете в полной мере использовать все функции данного сервиса. При этом нужно помнить, что если кто-то подпишется на настоящий адрес вашего канала, вы не сможете получить прелести использования feedburner`а.
Эта схема поможет придать больше наглядности вышеописанному:
О настройках feedburner можно прочесть здесь. А так же здесь, здесь и здесь.
На самом деле, помимо всего прочего, этот сервис несет в себе еще один плюс. Так как все подписчики будут подписываться на RSS-ленту, находящуюся на feedburner, то вы можете, когда захотите, поменять адрес оригинального источника RSS-ленты (например, пробуя со временем разные способы создания RSS, описанные в этой статье, или, может, вы смените адрес сайта), не потеряв при этом всех своих подписчиков (они всегда будут видеть адрес ленты на feedburner, не подозревая о изменении ваших настроек). Если же люди подписывались бы на оригинальный адрес RSS-документа (без посредника в виде feedburner), то при его смене (вами) они перестанут получать новости, так как документа по старому адресу не будет существовать.
Fonclub`s blog
Для одного проекта появилась задача — читать ленты rss, для последующего постинга статей из этих лент. Погуглил, посмотрел свои старые работы — нашел много интересных решений, в том числе и с помощью функии simplexml_load_file , но все не подходило по ряду причин. Тот же simplexml_load_file не все rss ленты читает, проблема у него с кодировкой windows-1251, на некоторых сайтах. Потому и пришлось искать другие варианты.
В итоге была найдена библиотека, состоящая из нескольких функций для чтения и разбора rss лент. Всю библиотеку мне не нужно было использовать, потому я оставил только 2 необходимые функции, немного подправил под себя и все работает отлично!
Как видно по коду, функция RSS_Tags возвращает нам заголовок, ссылку, дату публикации и краткое описание конкретной записи, а функция RSS_Read проходит по ленте в цикле, выбирает все записи, вызывает функцию RSS_Tags для каждой записи, записывает ответ в массив $RSS_Content и отдает его нам! Все просто А ниже пример использования этой библиотеки:
А далее уже можно использовать полученные записи по своему усмотрению.
PHPDesigner
Вы здесь: Главная » PHP » Парсинг RSS ленты на PHP
Парсинг RSS ленты на PHP
RSS — вид XML-формата, предназначенных для описания лент новостей, анонсов статей. Информация из различных источников, представленная в формате RSS, может быть собрана, обработана и представлена пользователю в удобном для него виде. Для этого делают программы-агрегаторы.
Сказать по другому: RSS — это специфически структурированный XML документ. Если в RSS есть открывающий тег, то должен быть и закрывающий (например: Заголовок ). Нам нужно получить информацию заключенную между тегами. Любая RSS лента имеет заголовок заключенный между тегами и сам текст статьи заключенный между тегами , именно нам они и нужны.
Простой пример RSS ленты:
В данном примере, будем рассматривать парсинг RSS ленты с помощью SimpleXML.
SimpleXML – это расширение для PHP5 устанавливаемое в него по умолчанию, представляет самый простой и элегантный способ обработки XML (а значит и RSS) файлов. Это и наиболее предпочтительный способ, но он стал доступным только в 5 версии PHP. Это, наверно, самой простой способ пропарсить XML.
Вот пример парсера RSS с использование SimpleXML:
В переменную $url записываем адрес фида RSS. Весь полученный документ сохраняется в переменной $rss. Теперь остается обойти все нужные нам элементы ( в примере обход делается по chanel, а из него в item) и вывести их на экран.
Для большей практики, можно записывать полученную информацию сразу в БД. А при повторном проходе файла, сравнивая даты публикаций, записывать только то, чего у нас нет.
Вот такой несложный пример. Таким образом, зная структуру, можно парсить любой XML документ.
Парсинг RSS-лент и других XML-файлов на PHP
Зачастую нам приходится работать с большими объемами данных, такими как новости, товары и другая немаловажная информация.
В некоторых случаях лучше всего часть работы отдать скриптам, например – парсинг и представление этих данных на вашем сайте.
Сегодня мы подробно рассмотрим, как осуществить парсинг RSS-ленты и по аналогии – XML-файлов типа прайсов и других.
Итак, предположим, что вы нашли сайт, который предоставляет RSS-ленту в таком формате:
Что мы здесь видим? Это блок информации о ленте и два материала, заключенных в теге «item».
Давайте теперь постараемся получить все необходимые нам данные.
Поскольку основная наша идея – это сформировать свою ленту новостей на основе полученных данных, для начала мы получим информацию о текущей ленте.
Во всем примере мы будем использовать «SimpleXML», помогающий без особого труда обрабатывать XML-файлы.
Тогда код для получения основной информации о ленте будет выглядеть следующим образом:
Здесь мы получаем ссылку на источник, заголовок ленты и ее описание, и на примере описания – выводим его на странице.
Обратите внимание, что название тегов может немного отличаться – это не играет никакой роли, в вашем же случае – вы все делаете по аналогии.
Так, с основной информацией разобрались, теперь самое интересное – парсинг материалов.
В отличие от основной информации, материалов может быть несколько, и для того, чтобы получить их все – мы будем использовать цикл «foreach».
И получение уже самих материалов на примере нашей RSS-ленты будет выглядеть следующим образом:
На выходе вы получите примерно такую картину:
Если у вас это не произошло – пишите об этом в комментариях.
По такому принципу парсятся все XML-файлы, меняется лишь их структура. Если в вашем файле присутствуют параметры в тегах и вы не знаете, как их получить – рекомендуем почитать эту статью.
RSS на PHP
В этом небольшом уроке мы будем создавать свою собственную RSS ленту средствами PHP. С помощью этой ленты можно облегчить себе и окружающим поисковым роботам жизнь. Все файлы будут браться из базы данных и превращаться в список с пунктами.
В предыдущей статье вывод новостей RSS с помощью PHP мы уже показывали взаимодействия с лентой.
На текущий момент самая актуальная версия RSS является версией 2.0, на это и будем опираться. Пример готового решения можно увидеть, посмотрев на наш rss поток. Давайте рассмотрим исходный код xml файла:
При этом свойств одного материала очень много, все данные предоставлены ниже.
Обязательные элементы channel:
title — название rss потока.
description — небольшое описание проекта.
link — прямая ссылка на главную страницу канала.
Необязательные элементы channel:
language — язык канала. Большинство современных ретрансляторов автоматический определяют данный элемент.
copyright — авторский копирайт.
managingEditor — email пользователя, который отвечает за данный канал.
webMaster — email технической поддержки по данной ленте.
pubDate — дата создания канала (RFC 822).
lastBuildDate — время последнего изменения (RFC 822).
category — как понятно из названия категория канала (можно указать несколько).
generator — программа с помощью, которой вы создали ленту.
docs — документы по использованию вашего канала.
ttl — time to live определяет через какой промежуток времени лента потеряет актуальность.
image — изображение отвечающее за \»дизайн\» ленты.
skipHours — количество часов запрещающее ридерам проверят ленту.
skipDays — количество дней запрещающее ридерам проверят ленту.
Обязательные элементы item:
title — имя новости или сообщения.
description — небольшое описание item.
link — ссылка на страницу с полным описанием.
Необязательные элементы item:
author — email автора.
category — категория item
comments — ссылку на страницу, где можно обсудить новость.
enclosure — Медиа-объект который бил прикреплён к новости.
guid — уникальный текст которые не вкоем случае не должен повторяться (можно использовать ссылку на страницу или ID новости).
pubDate — дата создания item (RFC 822).
После того как вы узнали, какие параметры вам необходимы приступим к созданию самой ленты. Для этого создадим в главной директории файл rss.php и запишем в него следующий текст
Теперь необходимо зайти в свою базу данных, используя phpmyadmin или другой клиент, и посмотреть заголовки таблицы, которая отвечает за вывод материалов с сайта. После чего, отредактировать rss.php. Как только вы закончите работу, и у вас будет полностью рабочая лента, её необходимо подключить к проекту, для этого нужно открыть исходный код и в раздел head написать следующий текст:
Если посмотреть на это со стороны, реализация ленты не такое уж и сложное занятие. Если уделить этому несколько минут своего времени, можно склепать несколько таких потоков, и каждый из них будет отвечать за определённую категорию или раздел. Во многих популярных CMS эта технология уже применяется.
RSS из любого сайта средствами PHP
Здравствуйте, хабра-сообщество! В своём первом посте хотелось бы затронуть тему сбора данных с любого сайта, и формирования из них лент RSS.
Предисловие
Варианты
Я стал искать решения, для того чтобы побороть эту проблему. И они находились: Feed43, feedfire.com, но по тем или иным соображениям они мне не подходили. Уж больно ленты специфичные мне потребовались.
Задача
Выдернуть новости с этого сайта и с этого форума (на момент, когда я писал этот код, на форуме не было RSS-подписки на темы).
Сложность первого сайта в том, что там нет семантики, и какого то отделения новостей. Новости — на нём текст сплошняком. А второго как раз наоборот, в сложности и излишних данных. Я расчехлил шашечки и ринулся писать код.
Решение
Я решил совместить два способа для поиска и отделения новостей:
- использование CSS-синтаксиса для поиска элементов
- использование регулярных выражений для дополнительной фильтрации
Вот что собственно из этого вышло (просьба сильно не придираться, код был написан очень быстро, буквально на коленке):
Класс CHTML2RSS (файл CHTML2RSS.class.php):
params = $params; > // загружаем страницу и немного обрабатываем function getDocument($url) < $cnt = $this->params[‘charset’] ? ‘ params[‘charset’].'»>’ : »; $cnt.=file_get_contents($url); $cnt = preg_replace(‘/(?s)
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.