PHP парсване на XML новини за твоя сайт

Ще ти покажа малко PHP код, с който много лесно можеш да извлечеш новини от някой сайт за новини, който има RSS хранилка (RSS feed). Много хора дори не предполагат, колко елементарно се прави това. Дори да имаш само бегли познания за PHP, можеш просто да копираш този код (даден с тъмнозелено долу) в някой от php файловете на твоя сайт (например index.php) и той ще покаже новини от друг сайт в твоя сайт. Изискването е новините да са в RSS 2.0 формат.

В този пример новините представляват статии от statii.net. Още като влезеш в началната страница на сайта вдясно виждаш малки оранжеви иконки и връзката „всички статии“. Това е RSS хранилка, която захранва с най-новите статии от сайта. Под всички се разбира последните 10 статии, като най-новите са най-отгоре. Това ограничение може да е различно и се задава от собственика на сайта, който осигурява RSS. Ако застанеш с мишката над линка ще видиш в статус бара на браузъра адреса http://statii.net/feed. Ако посетиш тази връзка ще видиш последните статии, като кода на страницата, която гледаш е в XML формат. Ако браузъра е нов той сам ще форматира съдържанието и ще го покаже удобно за четене, но ако погледнеш кода на страницата ще видиш XML. Кода на страницата с Internet Explorer се вижда с натискане на десен бутон на мишката в страницата и после от падащото меню се избира View Source, при Firefox опцията е View Page Source. В този пример XML-а ще изглежда така:

 

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    >

<channel>
    <title>Директория за статии</title>
    <atom:link href="http://statii.net/feed/" rel="self" type="application/rss+xml" />
    <link>http://statii.net</link>
    <description>Напиши нова статия. Вземи статии за твоя сайт.</description>
    <lastBuildDate>Sat, 08 Aug 2009 09:00:05 +0000</lastBuildDate>

    <generator>http://wordpress.org/?v=2.8</generator>
    <language>en</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
    <item>
      <title>Градинска ножица Ciso на Bosch</title>

      <link>http://statii.net/2009/%d0%b3%d1%80%d0%b0%d0%b4%d0%b8%d0%bd%d1%81%d0%ba%d0%b0
-%d0%bd%d0%be%d0%b6%d0%b8%d1%86%d0%b0-ciso-%d0%bd%d0%b0-bosch/</link>
      <comments>http://statii.net/2009/%d0%b3%d1%80%d0%b0%d0%b4%d0%b8%d0%bd%d1%81%d0%ba
%d0%b0-%d0%bd%d0%be%d0%b6%d0%b8%d1%86%d0%b0-ciso-%d0%bd%d0%b0-bosch/#comments</comments>
      <pubDate>Sat, 08 Aug 2009 08:59:49 +0000</pubDate>
      <dc:creator>toto</dc:creator>
      <category><![CDATA[Градинарство]]></category>
      <category><![CDATA[Bosch]]></category>
      <category><![CDATA[бамбук]]></category>

      <category><![CDATA[градина]]></category>
      <category><![CDATA[ножица]]></category>
      <category><![CDATA[Цветя]]></category>

      <guid isPermaLink="false">http://statii.net/?p=326</guid>
      <description><![CDATA[Първата в света акумулаторна градинска ножица с вграден
литиево-йонен акумулатор.
Хубавата градина изисква много грижи. Подрязването на клони, които следва да се почистят с
градинска ножица е уморително, а понякога може да предизвика и болки в ставите и мускулите на
ръката. Тези проблеми се разрешават с помощта на Ciso &#8211; първата в света акумулаторна
градинска ножица [...]]]></description>
      <wfw:commentRss>http://statii.net/2009/%d0%b3%d1%80%d0%b0%d0%b4%d0%b8%d0%bd%d1%81
%d0%ba%d0%b0-%d0%bd%d0%be%d0%b6%d0%b8%d1%86%d0%b0-ciso-%d0%bd%d0%b0-bosch/feed/</wfw:commentRss>
      <slash:comments>0</slash:comments>

</item>

... още елементи item ...

    </channel>
</rss>

От реда rss version=“2.0″ се вижда, че този XML е във формат RSS версия 2.0.

PHP код за извличане и на RSS новини

<?php

        # ganbox.com: парсва RSS новини в масив arrFeeds
       $url='http://statii.net/feed/'; # адрес на RSS хранилката
       $doc = new DOMDocument();
    $doc->load($url);
    $arrFeeds = array();
    foreach ($doc->getElementsByTagName('item') as $node) {
        $itemRSS = array (
            'title'=>$node->getElementsByTagName('title')->item(0)->nodeValue,
            'desc' =>$node->getElementsByTagName('description')->item(0)->nodeValue,
            'link' =>$node->getElementsByTagName('link')->item(0)->nodeValue,
            'date' =>$node->getElementsByTagName('pubDate')->item(0)->nodeValue,
            );
        array_push($arrFeeds, $itemRSS);
    }

        # ganbox.com: отпечатване на feedLimit на брой новини от масива arrFeeds
       $feedLimit=0; # ако feedLimit=0 се показват всичките
       $feedCount=0;
        foreach($arrFeeds as $oneItem){
            # ако твоя сайт има кодиране cp1251, тогава махни коментара # на следващия ред
           # foreach($oneItem as $key=>$value){$oneItem[$key]=iconv('utf-8','cp1251',$value);}
           $feedCount++;
            print '<div class="feedItem"><h3 class="feedTitle"><a href="'.$oneItem['link'].'"
                class="feedLink">'
.$oneItem['title'].'</a></h3>';
            print '<p class="feedDesc">'.$oneItem['desc'].'</p>';
            print '</div>';
            if($feedLimit>0 && $feedCount>=$feedLimit) break;
        }
?>

Това е всичко. Сложил съм класовете feedItem, feedTitle, feedLink и feedDesc за по-лесно управление на изгледа от CSS файл. Ако искаш сложи всичко в един div контейнер.

Масива arrFeeds съдържа и поле date, в което е датата на публикуване. Ако искаш може да показваш и нея с още един ред: print ‘<p class=“feedDate“>’.$oneItem[‘desc’].'</p>’;  поставен след реда съдържащ feedDesc.

Важно е да се отбележи, че използвания метод зарежда всички новини в паметта на сървъра, където е твоя сайт. Ако новините са много или текста им е прекалено дълъг това ще доведе до счупване на страницата на твоя сайт или в най-добрия случай на забавяне на зареждането. Трябва да се увериш, че хранилката, която ползваш показва само част от текста, както е в statii.net или показва само най-новите X на брой новини. Друг вариант е да се абонираш само за тема, която те интересува. Продължавай да четеш 🙂

Избор на категория със статии

Ако не искаш да показваш всички статии, а само статии от определена категория първо влез в категорията. Например в  „Практически съвети“  тогава отдясно се показва трета връзка „тази категория“ и може да видиш, че линка има адрес http://statii.net/tema/дом-и-семейство/практически-съвети/feed/  Сложи този адрес в променливата $url в началото на кода и ще се извличат само статии от тази категория. Нещо повече – може да извличаш само статии, които съдържат определена дума например seo. За да направиш това първо извърши търсене в сайта statii.net от търсачката най-горе по думата seo. Тогава третата връзка в дясно се променя на „това търсене“ с адрес на линка http://statii.net/search/seo/feed/ сложи този адрес в променливата $url и ще получаваш само статии съдържащи думата SEO.

Ползите за твоя сайт

Получаваш автоматично и безплатно ново съдържание и посетителите на твоя сайт, започват да го посещават по-често. Търсачките забелязват, че твоя сайт е динамичен и го оценяват по-високо. Внимание! Задължително оставяй реална връзка към източника на новината (така както е в примера), защото със сигурност новината вече е индексирана от търсачките и ако няма връзка това ще се отчете като кражба на съдържание и сайта ти ще започне да се класира по-лошо.

Трябва да внимаваш съдържанието с новини което включваш на всяка страница да не бъде прекалено много. То трябва да бъде не повече от 20% от общото съдържание на страницата. В противен случай ще получиш негативен SEO ефект, защото чуждото съдържание ще размие тематиката на твоя сайт. Затова в горния пример може да ползваш feedLimit=3 в страниците с по-малко текст.

Този PHP код е тестван и все пак ако има проблем пиши коментари по статията.

Прочетена:11146
« Предишна публикация

Премахване на грешки в сайт и преминаване към XHTML

Тази статия е за често срещани HTML грешки в сайтовете и оправянето им с помощта на HTML валидатора http://validator.w3.org  Валидаторът дава доста подробни обяснения, но понякога решението не е очевидно. Тук разглеждам именно такива трудни за ... Повече информация »

Следваща публикация »

Код за шпиониране в WordPress

Код за проследяване Пиша тази статия за всички ползващи WordPress, които не обичат да ги следят без тяхно знание. Проблем: Безплатна тема за WordPress с име Red_wave от автор AskGraphics се разпространява свободно на сайта http://wordpresstemplates.name, ... Повече информация »

1 - лоша2 - слаба3 - средна4 - добра5 - отлична (Няма гласове. Дайте оценка първи!)
Loading...

30 коментара

  1. gan 14.08.2009
  2. Toshko 08.09.2009
  3. gan 08.09.2009
  4. Toshko 08.09.2009
  5. Toshko 15.09.2009
  6. gan 16.09.2009
  7. Georgy 28.09.2009
  8. gan 29.09.2009
  9. Georgy 30.09.2009
  10. gan 30.09.2009
  11. Georgy 30.09.2009
  12. gan 01.10.2009
  13. Ivaylo 30.12.2009
  14. bankera 28.01.2010
  15. gan 28.01.2010
  16. potrebitel 21.02.2010
  17. gan 21.02.2010
  18. Koev 10.03.2010
  19. gan 11.03.2010
  20. Koev 11.03.2010
  21. less is more 06.08.2010
  22. mitko 01.07.2011
  23. gan 03.07.2011
  24. Вик 27.10.2011
  25. Вик 28.10.2011
  26. Glo 29.03.2012
споделиха