Проблемы с Гугл.Фидбёрниром. Виды Фида. Парсинг RSS. Классы PHP для парсинга.
Дорогие подписчики! Сейчас на блоге Остров МЫСЛЕЙ имеется небольшая проблема — повторная отправка RSS-канала при исправлении топика, пока не известно как с этим бороться. Может, кто в курсе? Пока отключил пинги (оповещение сервисов об обновлении ленты). Что касается задержки публикации RSS — это сделано нарочно, задержка составляет примерно 4 часа, зачем она нужна можно узнать из топика о кросспостинге. Меры по лечению RSS-канала принимаются.
Еще... файл в XML-формате доступен роботам не более, чем 512 кб, следовательно, это порядка 30-50 анонсов постов на выдачу в RSS-канал, сейчас выдается 50 анонсов, раньше более 70, т.е. примерно 1 мб данных… Фид (РСС-канал) в этом случае выдается "сломанный", т.е. без конечных тегов кода, как бы "оборванный"… Гугл.Фидбёрнир показывает, что "фид с ошибками", в то время, как анализатор сообщает, что "фид в порядке". Думаю, роботы не могут правильно отпарсить РСС-ленту и посчитать все вхождения, идет зацикливание кода или что-то еще… исправил, проверю, изменится ситуация или нет. Еще нашел некоторые мелкие косяки… Попробую подкрутить все "ржавые гайки"… Управление RSS-канала осуществляется здесь:
Для каждой статьи в ленте отображать: Полный текст или Анонс (первый абзац).
Парсинг документов сети
Нужную информацию можно сграбить при помощи потокового RSS-канала, но иногда такой способ бывает не совсем удобен, поэтому, программисты используют регулярные выражения в функциях PHP preg_match() и preg_match_all(), если требуется украсть (отпарсить, от агл. parse — "анализ, разбор") какую-либо информацию с какой-либо страницы сети Интернет. Но эти функции рассмотрим в следующих статьях.
Парсинг (англ. parsing) — это анализ, разбор данных на составляющие. Роль парсера в двух словах заключается в следующем: найти файл, загрузить его в память сервера (ОЗУ), найти в нем определенные теги, присвоить их значения переменным, закрыть файл, выгрузить его содержимое из памяти и передать переменные обработчику, который в зависимости от условий выведет значения переменных на экран. Чтобы не выполнять столько сложных манипуляций и не писать сложный PHP-код, существуют готовый классы, которые просто передают нужные значения, их не нужно обрабатывать, а можно сразу же выводить на экран.
Некоторые полагают, что проще работать со стандартным DOM (для php5, DOM XML для php4), а также XSL (XSL расшифровывается как "The Extensible Stylesheet Language Family", для php5, XSLT — для php 4) или использовать SAX-парсеры («Simple API for XML») — способ последовательного чтения/записи XML-файлов. Обычно SAX-парсеры требуют фиксированного количества памяти для своей работы, но не позволяют изменять содержимое документа. Все, что делает SAX-парсер, это сообщает вызвавшему приложению о встреченных распознанных элементах XML-разметки или о встреченных ошибках. Связь парсера с вызывающим приложением, как правило, осуществляется посредством функций обратного вызова.
Есть два типа парсеров. Одни строят дерево элементов (DOM XML), другие генерируют события, event-driven (Expat). Первые дают кучу объектов один в другом, вторые генерируют событие когда попадается открывающийся тег, атрибут в теге, текст между тегами и закрывающийся тег. Далее с этими событиями и получаемыми с ними данными можно делать что угодно.
Популярные библиотеки (классы) для парсинга RSS: XMLReader, SimpleXML, SimplePie и другие.
Ссылки:
saxproject.org
http://ru.wikipedia.org/wiki/SAX
Парсинг RSS-канала
Фид (англ. feed — "питание, подача, подпитка, загрузка") — это общее определение всех XML-форматов передачи данных, т.е. Атом, RSS и прочие.
XML-файл, для импорта / экспорта для CMS WordPress назвали "расширенным RSS" — WXR.
Интерфейс прикладного программирования (API) постоянно развивается. Благодаря API, можно по-новому создавать статистику каналов данных. Используя в работе API управления RSS-каналами, издатели могут также создавать и управлять настройками RSS-каналов.
Зачем же собственно нужен RSS, если можно просто тупо отпарсить страницу и без него? — дело в том, что RSS — это уже отпарсенная страница, очищенная от всевозможных тегов HTML... это простой текст, который нужен для быстрого оповещения кого-либо, что очень удобно для оповещения, например, погоды, курса валют и других новостей, на которые можно подписаться по желанию. Как только система управления сайтом CMS создает (обновляет) файл данных (XML-файл), то она пингует (посылает уведомление) другим системам, который этот файл забирают...
XML-файл — обычный текстовый файл, содержащий в себе весь текст сайта, но стоит помнить об ограничении... Файл импортируется правильно программами и онлайн-скриптами (RSS-агрегаторами), если он не превышает 512 кб.
XML-формат придуман как универсальный для передачи всей необходимой текстовой информации в едином универсальном виде для максимальной совместимости читающих и передающих сервисов / программ.
Далее, когда XML-файл подхвачен, можно применить свои стили для формирования красивого, удобного и понятного интерфейса. Собственно, если трансляция (оповещение о новостях) RSS-канала идет не в закрытую ленту, а на веб-ресурс, то в данном случае, эту трансляцию в SEO можно назвать "внешней оптимизацией сайта". Если ссылки на приеме будут оставаться открытыми для индексации (чтения) их поисковыми роботами, то это поможет значительно поднять видимость сайта в сети.
Парсить, т.е. извлекать нужную информацию из XML-файла довольно-таки сложновато, поэтому разработчики плагинов для CMS WordPress (Вордпресс), чтоб упростить обработку файла и вывод данных, используют классы, написанный на PHP. Таких классов много, их задача — облегчить парсинг (вытаскивание текстовой информации) из XML-файла не напрямую, а через свои внутренние теги, это позволяет не писать огромные скрипты для обработки информации, а воспользоваться уже готовыми решениями, что значительно упрощает работу. Но многие классы были заброшены и долгое время не обновлялись, их совместимость с передачей информации низка и не всегда работает... а также приходится иногда подстраиваться под определенные версии PHP, если проверка не ведется в самом классе.
Парсер RSS-каналов своими руками
Для парсинга RSS-канала выбран класс SimplePie, вот так выглядит RSS-граббер на классе SimplePieв работе, скачать PHP-файл можно здесь. Если кому нужно будет, доработаю, обращайтесь. Для тех, кто не в курсе, вставить новостную RSS-ленту своих друзей очень легко, достаточно просто заинклюдить файл (один файл вставить во второй) в нужный шаблон своей Темы, например, в удобное место файла index.php вот так:
<?php include('isle_rss.php'); ?>
К сожалению, данный вариант имеет 100%-ю совместимость только для CMS WordPress и подобных, каналы бесплатных блогохостингов принимает только частично, т.е. там нет некоторых данных, например, источник РСС, автор и т.д., потому как они изначально не заложены в передачу, кроме самого поста, даты публикации и некоторых других данных. Еще неудобством является то, что нужно указывать для правильного парсинга не только доктейп HTML-документа, но и его HTML-версию:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://w3.org/1999/xhtml" xml:lang="en">
Также можно почитать документацию о настройках, кому интересно: настройки SimplePie.
Для парсинга можно также использовать готовые агрегаторы RSS-каналов (англ. agregator), например, самый популярный для WordPress — WP-o-Matic, который поддерживает также импорт/экспорт OPML-файлов и, кстати, тоже использует класс SimplePie, подробней об этом можно узнать на сайте devthought.com.
Парсинг RSS средствами CMS WordPress
Продвинутый парсинг RSS средствами CMS WordPress с использованием функции fetch_rss(), выглядит так:
В CMS WordPress встроенны следующие форматы Фида в функцию get_bloginfo():
rdf_url: URL for the blog's RDF/RSS 1.0 feed (/feed/rfd).
rss_url: URL for the blog's RSS 0.92 feed (/feed/rss).
rss2_url: URL for the blog's RSS 2.0 feed (/feed).
atom_url: URL for the blog's Atom feed (/feed/atom).
comments_rss2_url: URL for the blog's comments RSS 2.0 feed (/comments/feed).
Вывести Фиды на экран можно так ($show — формат Фида):
<?php $rss = get_bloginfo($show); echo $rss; ?>
либо так:
<?php bloginfo($show); ?>
Ссылки в CMS WordPress без редиректа (подстройки ЧПУ) имеют такие адреса:
http://isle-blog.ru/?feed=rss
http://isle-blog.ru/?feed=rss2
http://isle-blog.ru/?feed=rdf
http://isle-blog.ru/?feed=atom
С редиректом выглядят так:
http://isle-blog.ru/?feed=rss
http://isle-blog.ru/?feed=rss2
http://isle-blog.ru/?feed=rdf
http://isle-blog.ru/?feed=atom
Подробней о настройке ЧПУ см. WordPress_Feeds.
RSS-форматы
Atom — основанный на XML формат, появившийся позже RSS, с исправлениями его недостатков, активно поддерживается компанией Google во многих проектах. Атом предназначен для новостных лент, анонсов статей и прочего, удобен для использования в блогах, но может применяться и для любых других новостных и периодических изданий в Интернете. Существенной частью спецификации является протокол публикации Atom (APP) и протокол на основе HTTP для публикации и редактирования веб-ресурсов. Например, с помощью APP можно отправить HTTP-запрос GET для получения определенного ресурса (например фида или отдельной записи); сервер вернет представление данного ресурса в формате синдикации Atom. Кроме того, можно создавать, изменять и удалять ресурсы с помощью запросов POST, PUT и DELETE соответственно. Такое использование HTTP-запросов для протокола публикации и редактирования соответствует идеологии REST для интерфейсов веб-служб.
Ссылки:
RFC 4287
http://w3.org/2005/Atom
GData — это новый перспективный протокол от Гугл, основанный на форматах синдикации Atom 1.0 и RSS 2.0, а также на протоколе публикации Atom. В различных контекстах полезно иметь возможность отправить серверу запрос и получить ответ, содержащий список соответствующих этому запросу результатов. Ни Atom, ни RSS не дают такой возможности, но в Atom имеется механизм расширений. С помощью этого механизма стандартных расширений GData может выполнять запросы.
Ссылки:
GData — расширение Atom и RSS от Google.
OPML-файл — язык разметки структуры, основанный на XML-формате, служащий для переноса в стандартную электронную форму информации о потоках, которые могут группироваться в ленты. Этот стандарт пригоден для создания списков, включающих как RSS-потоки, так и потоки других форматов — RDF, Atom и др.
RDF-файл — разработанная консорциумом W3C модель (w3.org) для описания ресурсов, в особенности — метаданных о ресурсах. В основе этой модели лежит идея об использовании специального вида утверждений, высказываемых о ресурсе. Каждое утверждение имеет вид «субъект — предикат — объект» и в терминологии RDF называется триплетом. Например, утверждение «Небо голубого цвета» в RDF-терминологии можно представить следующим образом: субъект — «небо», предикат — «имеет цвет», объект — «голубой». Для идентификации субъектов, предикатов и объектов в RDF используются URI (англ. Uniform Resource Identifier — унифицированный (единообразный) идентификатор ресурса.).
Одной из главных целей RDF является предоставление утверждений одинаково в машинно- и человеко-распознаваемом виде.
Существует несколько синтаксисов для представления RDF-информации, самые распространенные из которых: RDF/XML, триплеты (Нотация 3) и графовая модель.
Для обработки RDF имеется несколько языков запросов: например, RQL, RDQL, SPARQL.
Ссылки:
http://ru.wikipedia.org/wiki/URI
Дополнительные ссылки по теме.
Википедия: RSS-агрегатор, OPML, RDF, Atom, RDF
Стандарты: opml.org.
Нашли ошибки, знаете больше? - Пишите, исправим и дополним.
Просмотров: 1,441 Комментариев: Комментарии (3) Опубликованно: Воскресенье, Ноябрь 22nd, 2009 в 10:56 Обновлено:
23 Ноябрь 2009 в 7:02.
Директории:Ресурсы сети, Ссылки на ресурсы Автор:admin, все авторы.
Понравилась статья? - Не пропустите следующую, подпишитесь на
RSS-канал[?],
e-mail
или читайте блог Остров МЫСЛЕЙ через
Яндекс.Ленту или
Google.Reader.
Насколько я знаю, данная проблема не лечится. Даже такие серьезные ресурсы как 3DNews.ru ей страдают и подобное заметно на очень многих новостных ресурсах.
ИМХО, лучший и возможно единственный способ решения проблемы – это перед публикацией все тщательно проверять и делать нужные правки
Рекламный блок РБ3 (360x60 или 125х125 пх). Здесь может быть Ваша реклама (текст, ссылки, баннеры) -
сквозная прямая ссылка на всех страницах всего за 40 $/мес.
Подробности по размещению рекламы в блоге Остров МЫСЛЕЙ:
463768885,
zgr@bk.ru...
Блогер-сеошник, веду сайты:
Остров ПОЭЗЫ,
Остров УСЛУГ,
Остров ЛИТЕРАТУРЫ.
Это техническая страница, более подробно обо мне смотрите здесь.Также приглашаю заглянуть в раздел
О блоге и посетить
личный блог.
Декабрь 4th, 2009 Комментариев: 1
Цитировать
Насколько я знаю, данная проблема не лечится. Даже такие серьезные ресурсы как 3DNews.ru ей страдают и подобное заметно на очень многих новостных ресурсах.
ИМХО, лучший и возможно единственный способ решения проблемы – это перед публикацией все тщательно проверять и делать нужные правки
Январь 7th, 2010 Комментариев: 1
Цитировать
У самого такое было. Думал с фидбернером проблемы были. Только проблема была только при редактировании заголовка поста.
Апрель 20th, 2010 Комментариев: 1
Цитировать
На одном из моих новостных порталов тоже происходило подобное, но я не смогла исправить ситуацию…