×
Россия +7 (495) 139-20-33

RSS новости: некоторые способы импорта ленты новостей

Россия +7 (495) 139-20-33
Шрифт:
1 23056

1. Введение
2. Как подключить RSS
3. Способы получения RSS при помощи php
4. Способы обработки xml
5. Оптимизация работы с RSS
6. Некоторые проблемы при работе с RSS
7. Заключение

1. Введение

О том, как RSS может помочь продвижению – можно почитать здесь. В общем - данные ленты новостей позволяют часто обновлять контент на сайте, это приводит к тому, что роботы начинают чаще посещать сайт. В этом МК я постараюсь дать несколько способов внедрения данной технологии на странички сайта.

«Для начала, определимся с тем, что такое RSS. Кратко, RSS – это формат синдикации web-контента. Это обычный формат представления данных, основанный на языке XML. Первоначально этот формат был разработан специально для экспорта заголовков новостей. Однако область его применения может выходить далеко за рамки этой задачи. Вы с легкостью можете экспортировать любую информацию, любые материалы. Формат примечателен тем, что дает единство представления данных. Любая информация, оформленная в RSS должна соответствовать определенной структуре... Благодаря такой формализации, конечный пользователь получает информацию в стандартизированном виде, что упрощает чтение и работу с ней. Именно удобством работы и объясняется растущий интерес к этому формату и его всё большая популяризация».
(http://www.kanban.ru/info/webmaster/)

Подробнее о том, что такое RSS можно почитать здесь (http://blogs.law.harvard.edu/tech/rss, http://podolsk.biz/p147.htm, http://www.kanban.ru/info/webmaster/).

В начале данного мастер-класса я покажу, как можно внедрить RSS непосредственно на страницу (здесь будут рассмотрены способы подключения RSS только при помощи php). Затем – некоторые способы оптимизации работы с RSS. В заключении я расскажу о некоторых проблемах RSS и способах их решения.

2. Как подключить RSS

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

  1. Получение RSS из определенного источника.
  2. Обработка RSS.
  3. Включение обработанной информации в текст страницы (это самый простой пункт. Достаточно сделать echo результата).

3. Способы получения RSS при помощи php

1. Cокетами

Пусть URL RSS = https://www.seonews.ru/rss/ (для всех остальных примеров).
Код получения rss новости будет примерно следующим:

< ?
$out = '';
$fp = fsockopen("www.seonews.ru", 80, $errno, $errstr, 1);
if ($fp) {
    $out = "GET /rss/ HTTP/1.1 ";
    $out .= "Host: www.seonews.ru ";
    $out .= "Connection: Close ";
    fwrite($fp, $out);
     $out = '';
     while (!feof($fp)) {
       $out .= fgets($fp, 128);
     }
    fclose($fp);
}
?>

Плюсы – Работает на всех версиях php, не требует дополнительных модулей.
Минусы – громоздкий код.

Возможные проблемы:

Одна из главных проблем – то, что контент скачивается с другого хоста. Соответственно, время загрузки основной страницы увеличивается на время загрузки RSS. Может быть такое, что канал будет забит, или сервер с новостью будет недоступен. Поэтому нужно ограничить время получения rss новости. Первое ограничение уже было сделано: последний параметр функции fsockopen установлен в 1 – это значит, что сокет будет открываться не дольше секунды, в случае неудачи переменная $out вернет пустую строку. Но есть еще одно «но»: сокет может открыться быстро, а данные будут скачиваться долго. Чтобы этого не произошло, перепишем код следующим образом:

< ?
$out= '';
$fp = fsockopen("www.seonews.ru", 80, $errno, $errstr, 1);
if ($fp) {
    $time = time();
    stream_set_timeout($fp, 1);
    $out = "GET /rss/ HTTP/1.1 ";
    $out .= "Host: www.seonews.ru ";
    $out .= "Connection: Close ";
    fwrite($fp, $out);
    $out = '';
    while (!feof($fp)) {
      $out .= fgets($fp, 128);
      if (time() - $time > 2) {
        $out = '';
        break;
      }
    }
    fclose($fp);
}
?>

Таким образом, в самом плохом случае задержка загрузки страницы из-за RSS не будет превышать 3 секунд: 1 секунда на открытие сокета и 2 секунды на получение данных. Функция stream_set_timeout($fp, 1); устанавливает максимальное время чтения из потока, а временем мы контролируем, чтобы вовремя выйти из цикла чтения из сокета данных.
О том, что делать, если данные не пришли – см. далее.

2. Curl

Это библиотека, которая позволяет взаимодействовать с различными серверами по различным протоколам.
Код с контролем времени будет выглядеть примерно следующим образом:

< ?
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.seonews.ru/rss/");
// вернуть значение а не вывести на страницу
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
// чтобы заголовок не входил в контент
curl_setopt($ch, CURLOPT_HEADER, 0);
// ограничение по времени получения
// (сюда уже входит и время открытия соединения
// и время получения данных)
curl_setopt($ch, CURLOPT_TIMEOUT, 3);

$out = curl_exec($ch);
curl_close($ch);
?>

Плюсы – достаточно компактный код, с возможностью быстрой модификации.
Минусы – необходимо наличие установленного расширения для php и библиотеки curl, а также версия php не ниже 4.0.2

3. Другие способы

PHP позволяет получить данные из сети и другими способами, например, при помощи include с перехватом буфера содержимого или file_get_contents. Но управлять временем получения данных будет не так просто, как в описанных выше случаях.

4. Способы обработки xml

После того как мы получили данные, их необходимо обработать. Данные RSS хранятся в xml файле определенной структуры. Поэтому чтобы вписать ленту в дизайн сайта, а также избавится от ненужной информации, данные необходимо обработать.

Для начала – общая структура RSS. Упрощенно, структура RSS-файла выглядит так:
< ?xml version="1.0" encoding="UTF-8" ?>


  
    < title >
    < link>
    < description>
    <img />
      <url/url
      < link>
      < title >
   
    <lastbuilddate> </lastbuilddate
    item
      < title >
      < link>
      < description>
    /item>
    . . .
   /channel

Подробнее см., например, http://www.kanban.ru/info/webmaster/ или http://intenter.ru/rss_links.do. Зная структуру, можно вытащить необходимые данные. Ниже перечислено несколько способов.

1. xslt

Так как RSS – это xml, можно использовать xslt преобразование. Пусть у нас в переменной $out содержится полученная rss лента новостей в виде xml.
Пусть xslt шаблон находится в файле rss_temp.xsl, и содержит код, приведенный ниже:

< ?xml version="1.0" encoding="utf-8" ?>
< xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    < xsl:output method="html" />
    < xsl:template match="rss/channel">
     


        < h1>< xsl:value-of select="title" />< /h1>
        < xsl:apply-templates select="title" />
        < xsl:apply-templates select="item" />
     

    < /xsl:template>
    < xsl:template match="title">
     

        < xsl:value-of select="text()" />
     

    < /xsl:template>
    < xsl:template match="item">
     

       

          < xsl:value-of select="title" />
       

       

          < a href="{link}">Link - < xsl:value-of select="pubDate" /> - < a href="mailto:{author}">Email
       

       

          Описание: < xsl:value-of select="description" />
       

     

    < /xsl:template>
< /xsl:stylesheet>

Чтобы использовать данное преобразование, можно воспользоваться следующим кодом:

< ?
    $result="";
    $xslt = xslt_create();
    $result = xslt_process($xslt, "arg:/_xml", "arg:/_xsl", NULL, array('/_xml' => $out, '/_xsl' => file_get_contents('rss_temp.xsl')));
    xslt_free($xslt);
?>

В результате, в переменной $result будет содержаться готовый для вставки кусок кода.
Плюсы – достаточно поменять шаблон, чтобы получить новый вид отображения ленты; достаточно гибкая технология.
Минусы – необходимо наличие модуля и библиотек xslt преобразования (sablotron для 4 версии php). Для пятой версии php код будет выглядеть иначе, т.к в пятой версии используется другая библиотека xslt преобразований: libxslt. Как вариант решения данной проблемы – можно использовать код, описанный в статье http://alexandre.alapetite.net/doc-alex/xslt-php4-php5/

2. Другие способы

В интернете можно найти достаточно большое количество готового кода для обработки RSS и адаптировать под свои нужды, например, http://www.rss.net.ua/rss_doc018.html или http://danneo.com/forum/showthread.php?t=1178. Также можно использовать регулярные выражения, например, если хостинг не поддерживает работу с xml технологиями.

5. Оптимизация работы с RSS

Одна из проблем RSS, как было сказано выше, - это то, что они находятся на других серверах. Если у вашего сайта большая посещаемость, то для каждого пользователя, зашедшего на сайт, нужно повторно вытаскивать одинаковую информацию из интернета, что забивает канал и уменьшает скорость работы сервера, а вследствии – скорость загрузки страницы. У каждой ленты есть период обновления. Поэтому приходит мысль использовать одни и те же данные повторно, то есть – кэшировать. К тому же технология xslt, например – достаточно ресурсоемкая и каждый раз использовать преобразование – это также может повлиять на скорость работы сайта.

Первый способ – это полученный результат сохранять в файле, и проверять время модификации этого файла. Если разница между текущем временем и временем модификации файла превышает заданный интервал (например, час), то попытаться снова получить данные и после обработки – переписать файл.

< ?
// Это добавить перед получением и обработкой rss
$rss_cache = 'rss_cashe.inc';
// если нет файла или время последнего изменения файла > 3600 с (1ч),
// то получить и обработать rss
if (!file_exists($rss_cache) (time() - filemtime()) > 3600) {
    // код получения и обработки rss,
    // на выходе – переменная с готовым для
    // отображения содержанием ($result)
    ...
    // запишем в кэш
    $f = fopen($rss_cache, 'wt');
    fwrite($f, $result);
    fclose($f)
} else {
    $result = file_get_contents($rss_cache);
}
?>

Второй способ – это обрабатывать новости сторонним скриптом, который запускается, например, по crontab, а результат сохранять в файле. На страницу импортировать уже готовый файл.

< ?
// предполагаем, Что скрипт лежит там-же, Где лежит страница, которая будет забирать новость.
$rss_cache = dirname(__FILE__) . '/rss_cashe.inc';
// если нет файла или время последнего изменения файла > 3600 с (1ч),
// то получить и обработать rss
if (!file_exists($rss_cache) (time() - filemtime()) > 3600) {
    // код получения и обработки rss,
    ...
    // запишем в кэш
    $f = fopen($rss_cache, 'wt');
    fwrite($f, $result);
    fclose($f)
}
?>

Этот скрипт следует поместить в файл, который будет запускаться по crontab или еще какому-либо планировщику. А на странице только в нужном месте указать:

< ?
$rss_cache = 'rss_cashe.inc';
include($rss_cache);
?>

6. Некоторые проблемы при работе с RSS
  1. Во всех примерах не указаны способы обработки ошибок. А так как и получение данных из интернета, и обработка данных в данном случае могут вызвать ошибки, то необходимо предусмотреть, как будет вести себя скрипт. Например, используя кэширование (о чем было написано выше), можно показывать последнюю удачно обработанную информацию. Или вообще ничего не показывать.
  2. Некоторые ленты могут пропадать или менять свой адрес (например, редизайн сайта, или сайт прекратил существование). Поэтому, если возникают ошибки достаточно часто, то нужно сигнализировать об этом администратору.
  3. Кодировка новости иногда не совпадает с той, что прописана в заголовке. Особенно это актуально для русских кодировок. Решения могут быть различными: можно вручную определить кодировку и конвертировать в нужную нам, можно автоматически определять кодировку (http://ivr.webzone.ru/articles/defcod_2/index.htm).

7. Заключение

Данный мастер-класс показывает лишь некоторые способы использования и обработки RSS при помощи php. Более подробную информацию можно получить из указанных источников. Код, который расположен на внешних источниках, приведен в качестве примера, его работоспособность проверена лишь частично. Код, используемый в данной статье проверен, но все мы можем ошибаться. Поэтому, при обнаружении неточностей, или неработоспособности кода – просьба сообщить автору мастер-класса.

(Голосов: 7, Рейтинг: 4.57)
Читайте нас в Telegram - digital_bar

Есть о чем рассказать? Тогда присылайте свои материалы Ане Макаровой


Новые 
Новые
Лучшие
Старые
Сообщество
Подписаться 
Подписаться на дискуссию:
E-mail:
ОК
Вы подписаны на комментарии
Ошибка. Пожалуйста, попробуйте ещё раз.
Отправить отзыв
  • Алексей
    больше года назад
    Call to undefined function xslt_create()
    -
    0
    +
    Ответить
ПОПУЛЯРНЫЕ ОБСУЖДЕНИЯ НА SEONEWS
Как выбрать CMS для интернет-магазина
demimurych
17
комментариев
0
читателей
Полный профиль
demimurych - Очередное волшебство, а не материал. все что ниже, сказано человеком который больше 20 лет своей жизни посвятил ковырянию исходных кодов систем. Битрикс по качеству кода и функциональности ровно такое же говно как и вордпресс. Заявить что он разрабатывается группой крутых программистов может только человек, который не знает что такое программирование. Единтсвенное отличие битрикса от вордпресса, это сертифицированнось на определенном локальном рынке. поставить Друпал в один ряд с вордпрессом, это видимо в продолжении предыдущей бугогашечки про крутых программистов в битриксе. тут важно отметить, что если битрикс и вордпресс являлись говном одного сорта весь цикл своего существования, то друпал имеет минимум 4 принципаильно разных кодовых базы. При этом даже самая примитивная из них - друпал 5 ветки, которому больше 12 лет, на голову выше текущих вп с битриксом вместе взятых. с точки зрения разработки - конечно. А не востребовтных на текущий момент плагинов. теория про разработку кода группой крутых программистов, не выдерживает никакой критики. достаточно просто оглянуться назад и увидеть, что в мире опенсорса есть как примеры эталонного говна - вордпресс, так и полная противоположность им типа РОР ставшего фактически во многом и на долго эталоном веб разработки. И это я еще ненапомнил автору о том, что есть такие вещи как питон, миникс и т.д. примеров качественного по в мире разработки открытым сообществом на порядки больше, чем наоборот. и тому есть ряд очень простых обьяснений. первое из которых, никто вам не даст просто так закомитить в ядро любой свой говнокод. даже в вордпресе. словом, информация в статье, как и ее выводы - это из области работы со своим воображением, чем с текущей ситуацией на рынке.
Ссылочное продвижение локальных сайтов: ТОП худших SEO-методов
demimurych
17
комментариев
0
читателей
Полный профиль
demimurych - о господи. это для регионального сайта? в яндексе? где у сайта по региону конкурентов меньше чем выдачи на двух страницах из которых перваш это реклама москвы? потешно ей богу. ктото чего то не понеимает.
Тест по SEO – проверь свой уровень знаний
Артем Дорофеев
8
комментариев
0
читателей
Полный профиль
Артем Дорофеев - Полный текст вопроса со скриншотом панели прикладываю. Итого, что имеем: - на скриншоте отмечено, что это фильтр МПК - сайт коммерческий - рекламы на сайте нет С вероятностью 95% это ошибка (которая уже дважды случалась в Яндексе), когда они случайно "закосили" неповинные сайты. Тогда по запросу Платону фильтр быстренько снимали. Но вопрос даже не на знание этого нюанса. В любой непонятной ситуации, прежде чем что-либо предпринимать (особенно переписывать весь контент на сайте или менять дизайн, как указано в других вариантах) - фильтр следует подтвердить. Правильный ответ: "Написать письмо в техподдержку Яндекса".
Автоматические SEO-аудиты: как напугать некорректными выводами
Trydogolik
25
комментариев
0
читателей
Полный профиль
Trydogolik - спасибо
Зачем подменять контент на сайте: разбираем инструмент и развенчиваем мифы
Trydogolik
25
комментариев
0
читателей
Полный профиль
Trydogolik - К мифу 1 добавлю Google optimize optimize.google.com Удобен для сотрудников со спец. знаниями и без них. Подмена контента настраивается за счет многих вариантов страниц и условий настроек распределения трафика. Варианты страниц можно легко создать копипастом. На мой взгляд удобно и бесплатно. Тот же Calibri и программисты в любом случае, пусть не за это, но где-то берут свою комиссию. (чисто мое мнение). В качестве цены отдаешь такой ресурс как личное время и копейки за внесение двух первоначальных изменений в html шаблон страниц. Но если ваша digital-кампания имеет совесть то оплата максимум час, а то и бесплатно. Интернет-маркетолог сам должен уметь это делать. Все просто + подробную инструкцию прилагают на языке пользователя. + за поддомены платить не надо, они вообще не нужны. + взаимодействие с: - Google Ads; - Google Tag; - Google Analytics просто прекрасно отслеживается по всем вариантам параллельно. Это помогает до деталей нарисовать профиль ЦА по любому "кредиту - отдельно на машину и отдельно на бизнес". Что с аналитикой у Calibri на этот счет? Сам с Calibri не разу не работал, всегда работаю с первоисточником. + к мифу 3 в том что это и есть детище поисковой системы и рекламного инструмента. Яша тоже спокоен будет так как сам везде навязывает Турбо-страницы (считаю их не удобными).- Как "-" (минус) вижу то, что может повлиять на скорость загрузки сайта. Но если у вас не конструктор, а темболее Landing Page, то о скорости можно не волноваться. Но это чисто мое мнение. В остальном согласен с автором.
100+ ресурсов по SEO для изучения поисковой оптимизации с нуля
Марина Ибушева
59
комментариев
0
читателей
Полный профиль
Марина Ибушева - Спасибо за добавление. Мы уже работаем над отдельным материалом про курсы, потому что одной статьи мало, чтобы охватить все крутое по обучению)
Монетизируйте свой сайт вместе с VIZTROM
VIZTROM
3
комментария
0
читателей
Полный профиль
VIZTROM - Добрый день! Так как мы сейчас работаем в приватном режиме, Вы врятли можете объективно оценить нашу рекламную площадку. У нас будет официальный запуск 3 марта для вебмастеров. Приглашаем Вас присоединиться к нам и лично посмотреть наш функционал.
7 способов увеличить авторитетность сайта «в глазах» поисковых систем
Юлия Гуща
1
комментарий
0
читателей
Полный профиль
Юлия Гуща - Спасибо за статью, особенно за пункт про разнообразие использования ключевых слов. А какие инструменты можете порекомендовать для анализа ключевых слов? Я чаще всего использую Ahrefs и sitechecker.pro/ru/. И нужно ли добавлять ключи в хлебные крошки?
Digital-разговор: Михаил Шакин про SEO, Google и заработок в интернете
Анна Макарова
372
комментария
0
читателей
Полный профиль
Анна Макарова - Подготовим ) Пока предлагаю почитать интервью с Денисом Нарижным из той же серии. Там стенограмма =) www.seonews.ru/interviews/digital-razgovor-denis-narizhnyy-pro-ukhod-iz-seo-i-zarabotok-na-partnerkakh/
Почему вы торгуетесь за показы, даже если платите за клики
Константин Требунских
3
комментария
0
читателей
Полный профиль
Константин Требунских - Дмитрий, спасибо за комментарий, хорошие замечания!) 1. "Какая-то подмена понятий. CPM у “Original Works” взлетает не от того, что у них РАВНАЯ цена клика, а оттого, что вы "с потолка" поставили ему CPC в 2 раза выше, чем был. Логично, что и CPM в 2 раза увеличился (см. формулу выше). Если бы вместо 5 вы всем решили поставить 2 или 1.5, то он бы наоборот уменьшился." Вы правы, что CPM уменьшился бы. В первой и второй табличке берем одинаковое количество показов (именно за них мы платим сначала) и считаем данные, в том числе CPC. Мы поставили рекламодателей в одинаковые условия и посмотрели их эффективность в разрезе цены клика при одинаковом количестве показов. А затем изменился аукцион, и, взяв получившиеся данные по кликам и CTR, мы поставили рекламодателей тоже в одинаковое положение, но уже по цене клика, ведь мы теперь за него платим. Посчитали эффективность в разрезе уже CPM. Тут если и есть подмена понятий, то она точно не моя, а рекламных систем, потому и обозначена, как "ход конем" :) 2. "Ок, смотрим таблички "как оно было" и "как оно стало". Было: система суммарно за 2 000 денег показала рекламу 4 000 раз. Стало: система суммарно за 2 000 денег показала рекламу 13 500 раз. Сомнительный профит для системы." Вы правы, именно поэтому для рекламодателей с низким CTR ставка будет выше, чем для рекламодателей с высоким CTR. Просто чтобы система окупилась. Потому что, системе выгодно продавать показы тем, у кого кликов будет больше (ведь они платят за клик). По факту реальные цены за клик в аукционе будут как в таблице 2. Но ранжирование системы проводят по таблице 5.
ТОП КОММЕНТАТОРОВ
Комментариев
910
Комментариев
834
Комментариев
554
Комментариев
540
Комментариев
483
Комментариев
373
Комментариев
372
Комментариев
262
Комментариев
249
Комментариев
171
Комментариев
156
Комментариев
139
Комментариев
121
Комментариев
111
Комментариев
97
Комментариев
97
Комментариев
96
Комментариев
86
Комментариев
80
Комментариев
77
Комментариев
67
Комментариев
60
Комментариев
59
Комментариев
59
Комментариев
57

Отправьте отзыв!
Отправьте отзыв!