• Acasă
  • Despre noi
  • Autori
  • Mărturii
  • Arhivă
  • Trimite Articol
  • Contact

WORLDIT

Lumea în 1 și 0.

  • Știri
    • Tehnologie
    • Tehnologie mobilă
    • Securitate
    • Developers
    • Știință
    • Benzi desenate
    • Jocuri
    • Intern
  • Tehnic
    • Browser
    • C#
    • C/C++
    • Challenge
    • HTML/CSS
    • Javascript, Ajax, jQuery
    • Open Source
    • PHP
    • Python
    • Securitate IT
    • Socializare
    • WordPress
    • Altele
  • Recenzii
  • Interviuri
  • Evenimente

Cum sa procesam informatiile din RSS feed?

7
  • Publicat de Andrei Avădănei
  • în PHP
  • — 19 aug., 2009 at 2:01 pm

feed_processDaca aveti proiecte ce necesita procesarea unui feed RSS al unui site pentru a urmari stirile sau orice alte motive atunci va veti izbi cu siguranta de procesarea feed-ului.In acest articol voi prezenta doua functii : una pentru a extrage informatiile de baza ale feed-ului curent si o alta pentru a extrage itemii din aceasta. Ne vom folosi de cunostintele dobandite recent,si anume de aflarea response-ului unei pagini.
Observam ca aceasta functie este de baza in cazul in care dorim sa lucram cu surse externe si nu numai. 😀 Este de precizat ca am folosit ca exemple(teste) Feed-uri RSS 2.

Vom incepe cu getFeedInfo().Aceasta functie ne va returna informatii referitoare la titlul paginii curente,link-ul,descrierea etc.

function getFeedInfo($url)
{
	//preluam raspunsul si il procesam
	$response = getResponsePage($url);
	$response = substr($response,0, strpos($response,"<item>"));          

	//cautam informatiile de care avem nevoie
	preg_match("/<title>(.*?)<\/title>/",$response,$title);
	preg_match("/<link>(.*?)<\/link>/",$response,$link);
	preg_match("/<description>(.*?)<\/description>/",$response,$description);
	preg_match("/<lastBuildDate>(.*?)<\/lastBuildDate>/",$response,$lastBuildDate);
	preg_match("/<generator>(.*?)<\/generator>/",$response,$generator);
	preg_match("/<language>(.*?)<\/language>/",$response,$language);

	//procesam informatiile colectate si le validam
	if(sizeof($title) >= 2)         $title         = $title[1];         else $title         = "";
	if(sizeof($link) >= 2)          $link          = $link[1];          else $link          = "";
	if(sizeof($description) >= 2)   $description   = $description[1];   else $description   = "";
	if(sizeof($lastBuildDate) >= 2) $lastBuildDate = $lastBuildDate[1]; else $lastBuildDate = "";
	if(sizeof($generator) >= 2)     $generator     = $generator[1];     else $generator     = "";
	if(sizeof($language) >= 2)      $language      = $language[1];      else $language      = "";

	//returnam informatiile
	return array("title"          => $title,
			 "link"           => $link,
			 "description" => $description,
			 "lastBuild"     => $lastBuildDate,
			 "generator"   => $generator,
			 "language"    => $language
		       );
}

Functia are un singur argument, si anume calea catre feed si va returna un array.
Ca exemplu ne vom folosi de WorldIT Feed, apeland functia astfel :

$info = getFeedInfo(„http://www.worldit.info/feed/”);

  • [title] => WorldIT
  • [link] => http://www.worldit.info
  • [description] => The world which goes bigger and bigger every day.
  • [lastBuild] => Wed, 19 Aug 2009 09:13:50 +0000
  • [generator] => http://wordpress.org/?v=2.8.4
  • [language] => en

Pentru a folosi oricare din informatiile de mai sus ne vom folosi de array-ul returnat,spre exemplu codul de mai jos va afisa link-ul feed-ului :

echo $info[‘link’];

Atentie : Aceasta functie are toate atributele returnate valide pentru orice feed (main feed,article feed etc).

Trecem mai departe si vom incerca sa procesam item-urile(articole,comentarii etc) feed-ului curent.Functia getLastItems() ne va ajuta in aceasta situatie.

function getLastItems($url)
{
	//extragem response-ul,pregatim item-urile pentru procesare
	$itemsFeed = array(array());
	$response = getResponsePage($url);
	preg_match_all("/<item>(.*?)<\/item>/s",$response,$items);

	//procesam fiecare item in parte

	foreach($items[1] as $item)
	{
		$new = array();

		//extragem informatiile
		preg_match("/<title>(.*?)<\/title>/",$item,$new['title']);
        preg_match("/<link>(.*?)<\/link>/",$item,$new['link']);
		preg_match("/<comments>(.*?)<\/comments>/",$item,$new['commentsURL']);
		preg_match("/<pubDate>(.*?)<\/pubDate>/",$item,$new['date']);
		preg_match("/<dc:creator>(.*?)<\/dc:creator>/",$item,$new['author']);
		preg_match("/<description>(.*?)<\/description>/s",$item,$new['description']);
		preg_match("/<content:encoded>(.*?)<\/content:encoded>/s",$item,$new['content']);
		preg_match("/<wfw:commentRss>(.*?)<\/wfw:commentRss>/",$item,$new['commentsRSS']);
		preg_match("/<slash:comments>(.*?)<\/slash:comments>/",$item,$new['commentsCount']);

		//procesam informatiile colecatate si le validam
		if(sizeof($new['title']) >= 2)         $new['title']          = $new['title'][1];          else $new['title']         = "";
		if(sizeof($new['link']) >= 2)          $new['link']           = $new['link'][1];		      else $new['link']        	 = "";
		if(sizeof($new['commentsURL']) >= 2)   $new['commentsURL']    = $new['commentsURL'][1];	  else $new['commentsURL']   = "";
		if(sizeof($new['date']) >= 2)          $new['date']           = $new['date'][1];		      else $new['date']          = "";
		if(sizeof($new['author']) >= 2)        $new['author']         = $new['author'][1];		  else $new['author']        = "";
		if(sizeof($new['description']) >= 2)   $new['description']    = $new['description'][1];	  else $new['description']   = "";
		if(sizeof($new['content']) >= 2)       $new['content']        = $new['content'][1];		  else $new['content']       = "";
		if(sizeof($new['commentsRSS']) >= 2)   $new['commentsRSS']    = $new['commentsRSS'][1];	  else $new['commentsRSS']   = "";
		if(sizeof($new['commentsCount']) >= 2) $new['commentsCount']  = $new['commentsCount'][1];  else $new['commentsCount'] = "";	

		//procesam informatii ce au nevoie de o atentie speciala
		$new['description'] = str_replace(array("<![CDATA[","]]>"),"",$new['description']);
		$new['content']     = str_replace(array("<![CDATA[","]]>"),"",$new['content']);

		//adaugam informatiile la lista de cele procesate
		$itemsFeed[] = $new;
	}
	return $itemsFeed;
}

Aceasta functie are deasemenea un singur argument, linkul catre feed.Functia returneaza un array de item-uri.Practic fiecare item(incepand indexarea de la 1) reprezinta un articol/comentariu al feed-ului respectiv.
Fiecare item,ca si in primul caz, este caracterizat deasemenea prin mai multe atribute :

  • [title]
  • [link]
  • [commentsURL]
  • [date]
  • [author]
  • [description]
  • [content]
  • [commentsRSS]
  • [commentsCount]

Un exemplu de folosire a functiei ,afisand toate titlurile itemurilor feedului:

$items = getLastItems(„http://www.worldit.info/feed/”);
for($i = 1; $i < sizeof($items); $i++)
{
echo „Item „.$i.” : „.$items[$i][‘title’].”<br>”;
}

Atentie!!! Aceasta functie poate fi folosita si in cazul feed-urilor unui articol,insa in aceasta situatie unele atribute nu vor avea nici o valoare.Cele valide se afla in lista de mai jos :

  • [title]
  • [link]
  • [date]
  • [author]
  • [description]
  • [content]

Cateva exemple de folosire.

Cam atat din acest articol,daca aveti intrebari(sau completari),sau intampinati probleme de implementare nu ezitati sa le prezentati.

Etichete: feedPHPprocesare feedprogramarerssrss feed

— Andrei Avădănei a scris 1246 articole

Andrei scrie pe worldit.info din vara lui 2011. Este fondatorul Asociatiei Centrul de Cercetare in Securitate Informatica din Romania - CCSIR si coordoneaza DefCamp, cea mai importanta conferinta de securitate informatica & hacking din Europa Centrala si de Est. Andrei ofera in cadrul Bit Sentinel servicii de securitate informatica, penetration testing, security management, recuperarea de pe urma unui atac cibernetic, training-uri si workshop-uri.

  • Articolul anterior Web Cam from Microsoft
  • Articolul următor GrepIT , 6-12 septembrie 2009

7 Comentarii

  1. razvan spune:
    august 19, 2009 la 2:04 pm

    sooper…:)

  2. razvan spune:
    august 19, 2009 la 2:04 pm

    sooper…

  3. Avadanei Andrei spune:
    august 19, 2009 la 2:07 pm

    😀 Sper sa iti fie folositor! 😀

  4. Leocrux spune:
    august 19, 2009 la 3:01 pm

    Se poate folosi rss feed pentru a vedea ultimul post de pe blog, sau sa te anunte cand se adauga un post?

  5. Avadanei Andrei spune:
    august 19, 2009 la 3:16 pm

    Daca te inscrii la feed bineinteles.Uita-te in colt dreapta sus,si dai subscribe. 😀

  6. dage spune:
    august 20, 2009 la 6:35 pm

    Nu am incercat functia de mai sus, dar am as vrea sa stiu daca merge pentru orice feed rss, pentru ca difera un rss 1.0 ; rss 2.0 ; feedburner .

  7. Avadanei Andrei spune:
    august 20, 2009 la 11:03 pm

    Evident ca difera, am precizat faptul ca e special facut pentru RSS 2.0 , insa daca vei analiza sursa se pot face modificarile pentru taguri pentru a rezolva aceasta problema. 😀


  • Facebook

    WorldIT.info
  • Ultimele Atacuri Cibernetice din Romania – RO Hacked

    [wp_rss_retriever url="https://rohacked.bit-sentinel.com/feed/" excerpt="none" items="5" read_more="false" new_window="true" thumbnail="false" cache="0"] RO Hacked este registrul atacurilor cibernetice din România.
  • Caută

  • Articole Recomandate

    • Recent Posts
    • Tags
    • Număr record de participanți la DefCamp 2015, cel mai important eveniment dedicat securității cibernetice din Europe Centrala si de Estdecembrie 2, 2015
    • La DefCamp 2015 vei afla prin ce tehnici pot fi evitate măsurile de securitate ale sistemelor informatice criticeoctombrie 16, 2015
    • Ultima sansa sa rezervi bilete de tip Early Bird la DefCamp 2015septembrie 1, 2015
    • 15 sfaturi despre cum poti deveni un programator bun venite de la specialisti romaniaugust 4, 2015
    • algoritmica Android antivirus Apple Avadanei Andrei benzi desenate BitDefender blog browser C++ Chrome concurs eveniment Facebook Firefox Google google chrome hacking html5 infografic informatica internet Internet Explorer IT javascript linux Microsoft Mozilla Firefox online PHP programare retea sociala review Romania securitate Tehnologie Twitter web Windows Windows 7 Wordpress WorldIT worldit.info Yahoo! YouTube
  • mai 2022
    L Ma Mi J V S D
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031  
    « dec.    
  • Link-uri Sponsorizate

    • laptop second hand

    • Calculatoare Second Hand

    • cod voucher pc garage

  • Home
  • Tehnic
  • PHP
  • Cum sa procesam informatiile din RSS feed?
  • Important

    • Bit Sentinel
    • Centrul de Cercetare în Securitate Informatică din România
    • DefCamp
  • Prieteni

    • BetiT.ro
    • bijuterii handmade
    • Computerica | Resurse gratuite PC
    • Descopera.org
    • Gadgeturi si IT – Giz.ro
  • Prieteni

    • PC – Config
    • RO Hacked
    • Stiri IT

Copyright © 2009-2014 WORLDIT. Toate drepturile Rezervate.
Termeni și condiții | Contact | Licența Creative Commons