- SEO-блог Остров МЫСЛЕЙ - http://isle-blog.ru -

Проблемы с Гугл.Фидбёрниром. Виды Фида. Парсинг RSS. Классы PHP для парсинга.

Posted By admin On 22 Ноябрь 2009 @ 10:56 In Ресурсы сети,Ссылки на ресурсы | 3 Comments

Дорогие подписчики! Сейчас на блоге Остров МЫСЛЕЙ [1] имеется небольшая проблема — повторная отправка о кросспостинге [2]. Меры по лечению RSS-канала принимаются.

Управление пингами в фиде настраивается здесь:

feedburner.google.com [3] —> Publicize —> PingShot —> Activate/Inactivate

Управление сервисами, которые нужно пинговать настраивается здесь:

WordPress (ваш блог) —> Параметры —> Сервисы обновления.

Еще... файл в Гугл.Фидбёрнир [4] показывает, что "фид с ошибками", в то время, как анализатор сообщает, что "фид в порядке". Думаю, роботы не могут правильно отпарсить РСС-ленту и посчитать все вхождения, идет зацикливание кода или что-то еще… исправил, проверю, изменится ситуация или нет. Еще нашел некоторые мелкие косяки… Попробую подкрутить все "ржавые гайки"… Управление RSS-канала осуществляется здесь:

Дашборд (англ. DashBord — админ.панель) —> Параметры —> Чтение —> Настроки чтения:

  • В RSS-лентах отображать последние N записи (-ей).
  • Для каждой статьи в ленте отображать: Полный текст или Анонс (первый абзац).

Парсинг документов сети

Нужную информацию можно сграбить при помощи потокового 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 [5]), другие генерируют события, event-driven (Expat [6]). Первые дают кучу объектов один в другом, вторые генерируют событие когда попадается открывающийся тег, атрибут в теге, текст между тегами и закрывающийся тег. Далее с этими событиями и получаемыми с ними данными можно делать что угодно.

Популярные библиотеки (классы) для парсинга SimplePie [7] и другие.

Ссылки:

Парсинг RSS-канала

Фид (англ. feed — "питание, подача, подпитка, загрузка") — это общее определение всех XML-форматов передачи данных, т.е. Атом, RSS и прочие.

XML-файл, для импорта / экспорта для CMS WordPress назвали "расширенным RSS" — WXR.

Интерфейс прикладного программирования (API) постоянно развивается. Благодаря API, можно по-новому создавать статистику каналов данных. Используя в работе API управления RSS-каналами, издатели могут также создавать и управлять настройками RSS-каналов.

Ссылки:

Что такое RSS?

Зачем же собственно нужен RSS, если можно просто тупо отпарсить страницу и без него? — дело в том, что RSS — это уже отпарсенная страница, очищенная от всевозможных тегов HTML... это простой текст, который нужен для быстрого оповещения кого-либо, что очень удобно для оповещения, например, погоды, курса валют и других новостей, на которые можно подписаться по желанию. Как только система управления сайтом CMS создает (обновляет) файл данных (XML-файл), то она пингует (посылает уведомление) другим системам, который этот файл забирают...

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

XML-формат придуман как универсальный для передачи всей необходимой текстовой информации в едином универсальном виде для максимальной совместимости читающих и передающих сервисов / программ.

Далее, когда XML-файл подхвачен, можно применить свои стили для формирования красивого, удобного и понятного интерфейса. Собственно, если трансляция (оповещение о новостях) RSS-канала идет не в закрытую ленту, а на веб-ресурс, то в данном случае, эту трансляцию в SEO можно назвать "внешней оптимизацией сайта". Если ссылки на приеме будут оставаться открытыми для индексации (чтения) их поисковыми роботами, то это поможет значительно поднять видимость сайта в сети.

Парсить, т.е. извлекать нужную информацию из XML-файла довольно-таки сложновато, поэтому разработчики плагинов для CMS WordPress (Вордпресс), чтоб упростить обработку файла и вывод данных, используют классы, написанный на PHP. Таких классов много, их задача — облегчить парсинг (вытаскивание текстовой информации) из XML-файла не напрямую, а через свои внутренние теги, это позволяет не писать огромные скрипты для обработки информации, а воспользоваться уже готовыми решениями, что значительно упрощает работу. Но многие классы были заброшены и долгое время не обновлялись, их совместимость с передачей информации низка и не всегда работает... а также приходится иногда подстраиваться под определенные версии PHP, если проверка не ведется в самом классе.

Парсер RSS-каналов своими руками

Для парсинга SimplePie [7], вот так выглядит RSS [11]-граббер на классе [11]SimplePie [11] [11]в работе [12], скачать здесь [13]. Если кому нужно будет, доработаю, обращайтесь. Для тех, кто не в курсе, вставить новостную 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 [14].

Для парсинга можно также использовать готовые агрегаторы WP-o-Matic [15], который поддерживает также импорт/экспорт devthought.com [16].

Парсинг RSS средствами CMS WordPress

Продвинутый парсинг RSS средствами CMS WordPress с использованием функции fetch_rss(), выглядит так:

<?php // Get RSS Feed(s)
$uri = "http://isle-blog.ru/feed/";
include_once(ABSPATH.WPINC.'/rss.php');
$rss = fetch_rss($uri);
$maxitems = 5; //Максимум топиков одного сайта.
$items = array_slice($rss->items,0,$maxitems);
?>
<ul>
<?php
if (empty($items)) echo '<li>No items</li>';
else
  foreach ($items as $item) : ?>
    <li>
      <a href='<?php echo $item['description']; ?>' title='<?php echo $item['title']; ?>'>
        <?php echo $item['title']; ?>
      </a>
    </li>
  <?php endforeach; ?>
</ul>

Либо можно воспользоваться встроенной функцией wp_rss():

<?php
  include_once(ABSPATH.WPINC.'/rss.php');
  wp_rss('http://isle-blog.ru/feed/',5);
?>

Ссылки:

RSS-форматы в CMS WordPress

В 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 [22].

RSS-форматы

Atom — основанный на REST [23] для интерфейсов веб-служб.

Ссылки:

GData — это новый перспективный протокол от Гугл, основанный на форматах синдикации Atom 1.0 и RSS 2.0, а также на протоколе публикации Atom. В различных контекстах полезно иметь возможность отправить серверу запрос и получить ответ, содержащий список соответствующих этому запросу результатов. Ни Atom, ни RSS не дают такой возможности, но в Atom имеется механизм расширений. С помощью этого механизма стандартных расширений GData может выполнять запросы.

Ссылки:

  • GData [26] — расширение Atom и RSS от Google.

OPML-файл — язык разметки структуры, основанный на XML-формате, служащий для переноса в стандартную электронную форму информации о потоках, которые могут группироваться в ленты. Этот стандарт пригоден для создания списков, включающих как RSS-потоки, так и потоки других форматов — RDF, Atom и др.

w3.org [27]) для описания ресурсов, в особенности — метаданных о ресурсах. В основе этой модели лежит идея об использовании специального вида утверждений, высказываемых о ресурсе. Каждое утверждение имеет вид «субъект — предикат — объект» и в терминологии RDF называется триплетом. Например, утверждение «Небо голубого цвета» в RDF-терминологии можно представить следующим образом: субъект — «небо», предикат — «имеет цвет», объект — «голубой». Для идентификации субъектов, предикатов и объектов в RDF используются URI (англ. Uniform Resource Identifier — унифицированный (единообразный) идентификатор ресурса.).

Одной из главных целей RDF является предоставление утверждений одинаково в машинно- и человеко-распознаваемом виде.

Существует несколько синтаксисов для представления RDF-информации, самые распространенные из которых: RDF/XML, триплеты (Нотация 3) и графовая модель.

Для обработки RDF имеется несколько языков запросов: например, RQL, RDQL, SPARQL.

Ссылки:

Дополнительные ссылки по теме.

Википедия: RSS-агрегатор [29]OPML [30]RDF [31], Atom [32], RDF [33]

Стандарты: opml.org [34].


Article printed from SEO-блог Остров МЫСЛЕЙ: http://isle-blog.ru

URL to article: http://isle-blog.ru/resources-internet-what-is-it/feed-channel/

URLs in this post:

[1] Остров МЫСЛЕЙ: http://isle-blog.ru/

[2] о кросспостинге: http://isle-blog.ru/advertisement-sites-focus-secrets/microbloging-crossposting-advance/

[3] feedburner.google.com: http://feedburner.google.com/

[4] Гугл.Фидбёрнир: http://feedburner.com/

[5] DOM XML: http://php.net/manual/en/ref.domxml.php

[6] Expat: http://php.net/manual/en/ref.xml.php

[7] SimplePie: http://simplepie.org/

[8] saxproject.org: http://saxproject.org/

[9] http://ru.wikipedia.org/wiki/SAX: http://ru.wikipedia.org/wiki/SAX

[10] http://code.google.com/intl/ru-RU/apis/feedburner/: http://code.google.com/intl/ru-RU/apis/feedburner/

[11] RSS: http://isle-blog.ru/news/

[12] в работе: http://isle-blog.ru/newsrss/

[13] здесь: http://isle-blog.ru/wp-content/themes/default/isle_rss.php

[14] настройки SimplePie: http://simplepie.org/wiki/plugins/wordpress/simplepie_plugin_for_wordpress/customization

[15] WP-o-Matic: http://wordpress.org/extend/plugins/wp-o-matic/

[16] devthought.com: http://devthought.com/projects/wordpress/wp-o-matic-the-wordpress-rss-agregator/

[17] wp_rss: http://codex.wordpress.org/Function_Reference/wp_rss

[18] fetch_rss: http://codex.wordpress.org/Function_Reference/fetch_rss

[19] http://codex.wordpress.org/Category:Functions: http://codex.wordpress.org/Category:Functions

[20] MagpieRSS and RSSCache: http://magpierss.sourceforge.net/

[21] http://codex.wordpress.org/Function_Reference/get_bloginfo: http://codex.wordpress.org/Function_Reference/get_bloginfo

[22] WordPress_Feeds: http://codex.wordpress.org/WordPress_Feeds

[23] REST: http://xml.com/lpt/a/2004/12/01/restful-web.html

[24] RFC 4287: http://tools.ietf.org/html/rfc4287

[25] http://w3.org/2005/Atom: http://w3.org/2005/Atom

[26] GData: http://code.google.com/intl/ru-RU/apis/gdata/

[27] w3.org: http://w3.org/

[28] http://ru.wikipedia.org/wiki/URI: http://ru.wikipedia.org/wiki/URI

[29] RSS-агрегатор: http://ru.wikipedia.org/wiki/RSS-агрегатор

[30] OPML: http://ru.wikipedia.org/wiki/OPML

[31] RDF: http://ru.wikipedia.org/wiki/RDF

[32] Atom: http://ru.wikipedia.org/wiki/Atom

[33] RDF: http://ru.wikipedia.org/wiki/Resource_Description_Framework

[34] opml.org: http://opml.org/

Copyright © 2008 SEO-блог Остров МЫСЛЕЙ. All rights reserved.