nightstalker Opublikowano 20 Kwietnia 2006 Zgłoś Opublikowano 20 Kwietnia 2006 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... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 20 Kwietnia 2006 Zgłoś Opublikowano 20 Kwietnia 2006 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 :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
nightstalker Opublikowano 20 Kwietnia 2006 Zgłoś Opublikowano 20 Kwietnia 2006 (edytowane) 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 21 Kwietnia 2006 przez nightstalker Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ParanoiK Opublikowano 21 Kwietnia 2006 Zgłoś Opublikowano 21 Kwietnia 2006 Taka mała sugestia: jak już się rzucasz na obiektowość lepiej pisz w php5 :> Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...