Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Newsy z kanalów RSS, Podkradanie treści newsów :)
Nightstalker
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 6.11.2005

Ostrzeżenie: (0%)
-----


Cześć! Nigdy nie robiłem nic przy RSS, a tu nagle wyskakuje takie zlecenie... Musze napisać skrypt który będzie wyświetlać na stronie treść newsa z jakiegoś kanału RSS ( np. z onetu ) Dajcie mi jakieś namiary na tutoriale czy artykuły o tym zagadnieniu... W RSS jestem kompletnie zielony! (IMG:http://forum.php.pl/style_emoticons/default/mad.gif) :|
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Nightstalker
post
Post #2





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 6.11.2005

Ostrzeżenie: (0%)
-----


No dzisiaj dopracowalem troche skrypt :

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

  1. CREATE TABLE `newsy` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `txt` text NOT NULL,
  4. PRIMARY KEY (`id`)
  5. ) TYPE=MyISAM AUTO_INCREMENT=0;


Plik rss.php :

  1. <?php
  2.  
  3. /*
  4. +-------------------------------------------------------
  5. | Zlodziej newsow
  6. +-------------------------------------------------------
  7. | version: 1.1
  8. +-------------------------------------------------------
  9. | author: nightstalker / www.php.xfree.pl
  10. +-------------------------------------------------------
  11. */ 
  12.  
  13. class system { // przekleilem sobie z mojego cms'a - lenistwo (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
  14.  
  15. function db_connect ( $host, $user, $pass ) {
  16.  
  17. if ($dbc = @mysql_connect ( $host, $user, $pass ) ) {
  18.  
  19. } else {
  20.  
  21. die ('<p>Nie można połaczyć się z bazą danych poniweaż<b>' . mysql_error() .'</b></p>');
  22.  
  23. }
  24.  
  25. }
  26.  
  27. function db_select ( $database ) {
  28.  
  29. if (!@mysql_select_db ( $database )) {
  30.  
  31. die ('<p>Nie można wybrać bazy danych ponieważ:<b>' . mysql_error() . '</b></p>');
  32.  
  33. }
  34.  
  35. }
  36.  
  37. }
  38.  
  39. system::db_connect ('localhost','root','krasnal'); // wiadomo co 
  40. system::db_select( 'newsy_rss' ); // nazwa bazy danych
  41.  
  42.  
  43. $akcja=$_GET['akcja'];
  44.  
  45. switch($akcja) {
  46.  
  47. case 'czytaj':
  48.  
  49. {
  50.  
  51. $readFile = file_get_contents( 'http://wiadomosci.onet.pl/2,kategoria.rss' ); // sciagamy zawartosc kanalu
  52.  
  53. $preg = "#<guid isPermaLink=\"false\">(.*?)</guid>#is"; // definiujemy wyrazenie regularne dla linku do strony z newsem
  54.  
  55. $o = preg_match_all( $preg, $readFile, $out ); // wycinamy linki
  56.  
  57. foreach ( $out[ 1 ] as $w ) // przejscie petli po wszsytkich linkach
  58.  
  59. {
  60.  
  61. $arrContent = file_get_contents( $w ); // sciagamy zawartosc strony z newsem
  62.  
  63. /* 
  64.  * Teraz definiujemy wyrazenie regularne dla newsa, to najtrudniejsza czesc, 
  65.  * bo na roznych stronach roznie sie newsy zapisuje... 
  66.  * Najlepiej jak strona jest w 100% zgodna z xhtml, bo wtedy latwo zdefiniowac wyrazenie i wszystko odczytac
  67.  */ 
  68.  
  69. $preg = "#<DIV class=a2b style=\"margin-bottom:10px\">(.*?)<BR class=a2 clear=all>#is"; // to bedzie dzialac tylko na onecie
  70.  
  71. $o = preg_match_all( $preg, $arrContent, $out ); // znowu wycinka
  72.  
  73. // teraz wypada wyczyscic tresc newsa z znakow ktore maga zepsuc zapytanie sql
  74.  
  75. $news = $out[0][0]; 
  76. $news=stripslashes($news);
  77. $news=strip_tags($news);
  78. $news=str_replace("'","",$news);
  79.  
  80. // banalne zapytanie ktore zapobiega zapisywaniu tych samych newsow
  81.  
  82. $zapytanie = "SELECT * FROM newsy WHERE txt='$news'";
  83.  
  84. @mysql_query ($zapytanie);
  85.  
  86. if (mysql_affected_rows() > 0) {
  87. print '<p>W bazie jest juz taki news.. pomijam...</p>'; // jak news juz jest to nie zapisujemy go drugi raz...
  88. } else {
  89.  
  90. // jak go jeszcze nie ma to zapisujemy
  91.  
  92. $zapytanie = "INSERT INTO newsy VALUES (0, '$news')";
  93.  
  94. if(@mysql_query ($zapytanie)) {
  95.  
  96. print '<p>Tresc newsa zostala zapisana do bazy...</p>'; // to sie wyswietli jak wszystko bedzie ok 
  97.  
  98. } else {
  99.  
  100. print "<p>Nie mozna zapisac newsa do bazy ponieważ:<b>" . mysql_error() . "</b></p>"; // a to jak ni ebedize ok :)
  101.  
  102. }
  103.  
  104. }
  105.  
  106. }
  107.  
  108. print '<p><a href="'.$_SERVER['PHP_SELF'].'?akcja=pokaz">Pokaz newsy</a></p>';
  109.  
  110. break;
  111. }
  112.  
  113. case 'pokaz':
  114.  
  115. {
  116.  
  117. // tu chyba nie trzeba nic opisywac... wypisujemy wszystko z tabeli newsy
  118.  
  119. $zapytanie = "SELECT * FROM newsy ORDER BY id ASC";
  120.  
  121. if ($r = mysql_query ($zapytanie)){
  122.  
  123. while ($news = mysql_fetch_array ($r)) {
  124.  
  125. print '<p>'.$news['txt'].'</p>';
  126.  
  127. }
  128.  
  129. } else {
  130.  
  131. print '<p>Nie mozna odczytac informacji o komentarzach ponieważ:<b>' .mysql_error() . '</b></p>';
  132.  
  133. }
  134.  
  135. break;
  136. }
  137.  
  138. default:
  139.  
  140. print '<p><a href="'.$_SERVER['PHP_SELF'].'?akcja=czytaj">Odczytaj newsy z onetu i zapisz do bazy</a></p>';
  141. print '<p><a href="'.$_SERVER['PHP_SELF'].'?akcja=pokaz">Pokaz newsy z bazy</a></p>';
  142.  
  143. }
  144.  
  145. ?>


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) 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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ) 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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.10.2025 - 00:59