Skocz do zawartości
nightstalker

Newsy Z Rss [php]

Rekomendowane odpowiedzi

Nigdy sie z RSS nie bawilem, a wyskoczylo mi takie zlecenie :

 

"napisac skrypt ktory bedzie wyswietlal zformatowane newsy z jakiegos kanalu RSS, podawal skad jest ten news, ale zeby nie bylo linku do źródła newsa"

 

Mi to wyglada na podkradanie newsow z innych serwisow wykorzystujac rss. Ktos moze mi dac namiar na inforamcje o tym jak to zrobic ? Jakies przykladowe skrypty ? Cokolwiek zebym wiedzial od czego zaczac...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

zacznij od struktury xmlowej pliku RSS.. Wystarczy go sparsować i wyciągnąc informacje o newsie :)

 

Przy okazji jakbyś znalazł skrypt generujący RSS.xml za pomocą jakichś funkcji typu DodajNewsa() to mógłbyś sie tu pochwalić... bo nie chce mi się na stronce osobno tworzyć newsów i osobno RSSa :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Problem został rozwiązany! Przypomne tylko ze nie chodzi o wyciąganie tresci z RSS'a ale o wyciąganie tresci ze strony na którą taki RSS prowadzi. W związku z tym ze jestem leniwy, wstawiam tu treśc posta z php.pl :P

 

No dzisiaj dopracowalem troche skrypt :

 

Struktura tabeli w bazie ( u mnie nazwa bazy to newsy_rss ) :

 

CREATE TABLE `newsy` (
 `id` int(11) NOT NULL auto_increment,
 `txt` text NOT NULL,
 PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=0;

 

Plik rss.php :

 

<?php/*+-------------------------------------------------------| Zlodziej newsow+-------------------------------------------------------| version: 1.1+-------------------------------------------------------| author: nightstalker / www.php.xfree.pl+-------------------------------------------------------*/ class system { // przekleilem sobie z mojego cms'a - lenistwo :Pfunction db_connect ( $host, $user, $pass ) {	  	  if ($dbc = @mysql_connect ( $host, $user, $pass ) ) {	  	  } else {	  	  die ('<p>Nie można połaczyć się z bazą danych poniweaż<b>' . mysql_error() .'</b></p>');	  	  }}function db_select ( $database ) {	  if (!@mysql_select_db ( $database )) {	  	  die ('<p>Nie można wybrać bazy danych ponieważ:<b>' . mysql_error() . '</b></p>');	  	  }		 }}system::db_connect ('localhost','root','krasnal'); // wiadomo co system::db_select( 'newsy_rss' ); // nazwa bazy danych	$akcja=$_GET['akcja'];	switch($akcja) {			case  'czytaj':			{		$readFile = file_get_contents( 'http://wiadomosci.onet.pl/2,kategoria.rss' ); // sciagamy zawartosc kanalu	$preg = "#<guid isPermaLink=\"false\">(.*?)</guid>#is"; // definiujemy wyrazenie regularne dla linku do strony z newsem	$o = preg_match_all( $preg, $readFile, $out ); // wycinamy linki	foreach ( $out[ 1 ] as $w ) // przejscie petli po wszsytkich linkach		{		$arrContent = file_get_contents( $w ); // sciagamy zawartosc strony z newsem	 	/* 	 *  Teraz definiujemy wyrazenie regularne dla newsa, to najtrudniejsza czesc, 	 *  bo na roznych stronach roznie sie newsy zapisuje... 	 *  Najlepiej jak strona jest w 100% zgodna z xhtml, bo wtedy latwo zdefiniowac wyrazenie i wszystko odczytac	 */ 	 	$preg = "#<DIV class=a2b style=\"margin-bottom:10px\">(.*?)<BR class=a2 clear=all>#is"; // to bedzie dzialac tylko na onecie		$o = preg_match_all( $preg, $arrContent, $out ); // znowu wycinka	// teraz wypada wyczyscic tresc newsa z znakow ktore maga zepsuc zapytanie sql		$news = $out[0][0]; 	$news=stripslashes($news);	$news=strip_tags($news);	$news=str_replace("'","",$news);		// banalne zapytanie ktore zapobiega zapisywaniu tych samych newsow		$zapytanie = "SELECT * FROM newsy WHERE txt='$news'";		@mysql_query ($zapytanie);		if (mysql_affected_rows() > 0) {	print '<p>W bazie jest juz taki news.. pomijam...</p>';  // jak news juz jest to nie zapisujemy go drugi raz...	} else {		// jak go jeszcze nie ma to zapisujemy		$zapytanie = "INSERT INTO newsy VALUES (0, '$news')";	if(@mysql_query ($zapytanie)) {	print '<p>Tresc newsa zostala zapisana do bazy...</p>'; // to sie wyswietli jak wszystko bedzie ok 	} else {	print "<p>Nie mozna zapisac newsa do bazy ponieważ:<b>" . mysql_error() . "</b></p>"; // a to jak ni ebedize ok :)	}	}		}		print '<p><a href="'.$_SERVER['PHP_SELF'].'?akcja=pokaz">Pokaz newsy</a></p>';		break;	}		case  'pokaz':			{		// tu chyba nie trzeba nic opisywac... wypisujemy wszystko z tabeli newsy		$zapytanie = "SELECT * FROM newsy ORDER BY id ASC";	  	if ($r = mysql_query ($zapytanie)){   	while ($news = mysql_fetch_array ($r)) {	  	print '<p>'.$news['txt'].'</p>'; 	}	  	} else {		  print '<p>Nie mozna odczytac informacji o komentarzach ponieważ:<b>' .mysql_error() . '</b></p>';	  	  }		break;	}		default:		print '<p><a href="'.$_SERVER['PHP_SELF'].'?akcja=czytaj">Odczytaj newsy z onetu i zapisz do bazy</a></p>';	print '<p><a href="'.$_SERVER['PHP_SELF'].'?akcja=pokaz">Pokaz newsy z bazy</a></p>';		}?>

Najgorsze jest to ze na niektorych stronach jest straszny balagan i ciężko wyciąć treść newsa z kodu... najlepiej jak strona będzie w czystym xhtml to wtedy odczytamy wszystko, tresc, tytul, autora - bez problemów :) No ale w związku z tym ze większość ludzi olewa standardy ( tak jak i ja do niedawna, o czym swiadczy moja nie zaktualizowana do xhtml strona domowa :P ) jest jak jest i trzeba się męczyć... No mam nadzieje że komus sie przyda to co napisałem... Jeszcze raz dzięki dla Strife'a, bo mi duzo wyjasnil ;)

Edytowane przez nightstalker

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...