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

Posted on 2:31 ч. by wofer

Ще ти покажа малко 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){
$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 ‘

’.$oneItem['desc'].’

’; поставен след реда съдържащ 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 код е тестван и все пак ако има проблем пиши коментари по статията.

източник: ganbox.com

No Response to "PHP парсване на XML новини за твоя сайт"

Leave A Reply

Copyright

SEO оптимизация на сайтове с гаранция за резултата.

При пълно или частично цитиране на материали от блога, директния линк е задължителен!