Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Czytnik RSS na Twojej stronie WWW
Forum PHP.pl > Forum > Przedszkole
floydrose
Witam

Użyłem na swojej stronie gotowego skryptu do RSS. Niestety nie jest on na tyle złożony, aby za każdym razem omijał początkową część wiadomości, a mianowicie "wieść:"... Wygląda to tak:

wieść: Rytuał przejścia Dream Theater
wieść: Thomas Vikstrom wokalistą Therion
wieść: Fishbone jak żywy
wieść: Neurothing szykuje premierę "Murder Book"
wieść: Faith No More na "Heineken Open'er"
wieść: Basista Lynyrd Skynyrd nie żyje


Czy ktoś potrafi mi pomóc?
Kod wygląda następująco:

  1. <?php
  2.  
  3.  #===========================================
  4.  # Silnik tego skryptu zapożyczony został z czytnika RSS w wersji PHP z
  5.  # oprogramowania RSS GET, oryginalna wersja programu na stronie: http://www.aarondunlap.com
  6.  #===========================================
  7.  
  8.  $czas = 0; // Co ile ma być aktualizacja
  9.  
  10.  $folder = "rss/"; // Adres folderu, w którym znajdować się będą pliki z newsami.
  11.  
  12.  $adres = "http://www.rockmetal.pl/rss/rockmetal_news.rss"; // Adres URL do kanału RSS
  13.  $nazwa_kanalu = "RockMetal.pl"; // Tytuł kanału RSS
  14.  $liczba = 6; // Ilośc nagłówków newsów, które mają być wyswietlane
  15.  $target = "_blank"; // Opcja target="" dla newsów, możliwe: "_self" oraz "_blank"
  16.  $autoupdate = TRUE;
  17.  $trunc = FALSE;
  18.  $delim = FALSE;
  19.  
  20.  if (isset($_GET['rssHeadline'])) { $rssHeadline = $_GET['rssHeadline'];}
  21.  $basefile = $folder;
  22.  $folder .= md5($adres).".htm"; // Przygotowywanie nazw plików dla danego kanału
  23.  
  24.  #==========================
  25.  # Operacje związane ze sprawdzaniem aktualności nagłówków w pliku tekstowym
  26.  #==========================
  27.  
  28.  if (($czas > 0) && (is_file($folder)) && (((time()-filemtime($folder)) < ($czas * 60)))) {
  29.      include $folder;
  30.    $time = floor((time()-filemtime($folder)) / 60); // Sprawdza ile minut temu plik był aktualizowany
  31.      
  32.  } elseif (@fopen($adres,"r")) { // Sprawdza czy ma dostęp do kanału RSS
  33.  
  34.        #==========================
  35.      # Operacja związane z dodawaniem nowego nagłówka do pliku
  36.      #==========================
  37.  
  38.      $rssHandle = fopen($adres,"r") ; // Otwiera plik kanału RSS
  39.  
  40.      while (!feof($rssHandle)) {
  41.          $rssData .= fgets($rssHandle);
  42.      }
  43.  
  44.      #==========================
  45.      # Przygotowywanie newsa do włączenia do pliku
  46.      #==========================
  47.      $tag = "item ";
  48.      $rssData =  preg_replace("/<" . $tag . "(.|s)*?>/","<item>",$rssData);
  49.      $rssData = chop($rssData); // Usuwanie pustych spacji z końca linijek  
  50.      $rssData = ereg_replace("[r,\n]", "", $rssData); // Usuwwanie pustych linijek
  51.      $rssData = strstr($rssData,"<item>"); // Usuwanie wszystie przez <item>.
  52.  
  53.      #==========================
  54.      # Usuwanie zbędnych elemntów tak aby okrojona zawartość mogła zostać zapisana w pliku
  55.  
  56.      # Tagi <description></description> zostają pominięte
  57.      #==========================      
  58.      $tags_and_content_to_strip = Array("description");
  59.  
  60.      foreach ($tags_and_content_to_strip as $tag) {
  61.           $rssData = preg_replace("/<" . $tag . ">(.|s)*?</" . $tag . ">/","",$rssData);
  62.      }
  63.  
  64.      $rssData = str_replace("<item>","", $rssData); // usuwanie tagu <item>
  65.      $rssData = urldecode($rssData); // Zamiana wszystkich: %20 na spacje.
  66.      $rssData = str_replace(strstr("</channel>",$rssData),"",$rssData);
  67.      $rssArray = explode("</item>",$rssData); // Tworzenie tablicy z nagłówkami
  68.  
  69.        $title = array();
  70.      $link = array();
  71.  
  72.      #==========================
  73.      # Ten mechanizm tworzy tablice dla linków oraz nagłówków
  74.      #==========================  
  75.      $x = 0;
  76.      while($x < $liczba) {
  77.          $link[$x] = strstr($rssArray[$x],"<link>"); // usuwanie wszystkiego przed <link>
  78.        $link[$x] = ereg_replace("<link>","",$link[$x]);
  79.         $link[$x] = str_replace(strstr($link[$x],"</link>"),"",$link[$x]);
  80.         $link[$x] = trim($link[$x]);
  81.        $title[$x] = strstr($rssArray[$x],"<title>");
  82.          $title[$x] = ereg_replace("<title>","",$title[$x]); // Usuwanie <title> z części tytułu newsa
  83.          $title[$x] = str_replace(strstr($title[$x],"</title>"),"",$title[$x]); //  Usuwanie </title> oraz wszystkiego poza nim
  84.          $title[$x] = trim($title[$x]);
  85.        
  86.        if ($trunc != FALSE) { $title[$x] = str_replace(substr($title[$x],$trunc),"",$title[$x]); }
  87.        if ($delim != FALSE) { $title[$x] = str_replace(strstr($title[$x],$delim),"",$title[$x]); }
  88.        
  89.            if ($title[$x] == "") { $liczba = $x; break; } // Gdy już nie ma nagłówków zmienna $liczba przyjmuje wartość maksumalną.
  90.        $x++;
  91.      }
  92.  
  93.      #==========================
  94.      # Zapis do pliku
  95.      #==========================
  96.      $fp = fopen($folder, "w+");
  97.      $x=0;  
  98.      fwrite($fp,"<b><span class=\"displayname\">$nazwa_kanalu</span></b> \n"); // zapisywanie do pliku
  99.  
  100.      while ($x < $liczba) { // ta pętla zapisuje każdy link osobno.
  101.        fwrite($fp,"<br>\n<img src=\"gwiazdka.gif\"> <a class=\"headlinellink\" target=\"$target\" href=\"$link[$x]\">$title[$x]</a>");
  102.        $x++;
  103.      }
  104.     fclose($fp);
  105.     include $folder;
  106.  
  107. } else {
  108.    #==========================
  109.    # Zwracanie błędu gdy podany adres jest błędny.
  110.    #==========================
  111.    echo "<b>Nie mozna połączyć się z adresem: $adres. </b>";
  112.  
  113. }
  114.  
  115. ?>


Domyślam się, że należy edytować tutaj:

  1. <?php
  2. $tag = "item ";
  3.      $rssData =  preg_replace("/<" . $tag . "(.|s)*?>/","<item>",$rssData);
  4.      $rssData = chop($rssData); // Usuwanie pustych spacji z końca linijek  
  5.      $rssData = ereg_replace("[r,\n]", "", $rssData); // Usuwwanie pustych linijek
  6.      $rssData = strstr($rssData,"<item>"); // Usuwanie wszystie przez <item>.
karmer
Witam,
Możesz wkleić część kodu który wyświetla link do wiadomości na stronie.
Spawnm
może substr" title="Zobacz w manualu PHP" target="_manual() ew $title[$x]=str_replace('wieść:','',$title[$x]);
floydrose
Nie byłoby problemu, gdyby w kanale RSS nie było wyświetlane na początku wiadomości zwrot "wieść: ". Oto link: http://www.rockmetal.pl/rss/rockmetal_news.rss. To samo tyczy się zwrotu "galeria: ". Na stronie rockmetal.pl jest to zrobione tak, że IF wiadomość posiada na początku "wieść: ", to wiadomość jest wyświetlana w tabeli nr 1. Natomiast IF "galeria: ", to w tabeli nr 2. Rzecz w tym, że nie chcę mieć na swojej stronie podziału na 2 tabele, ani zwrotów "wieść: " i "galeria: ".

Przepraszam za błąd z mojej strony. Czy mimo to da się coś z tym zrobić?

Sprawdziłem
Cytat
substr() ew $title[$x]=str_replace('wieść:','',$title[$x]);
wklejając na końcu:

Cytat
#==========================
# Przygotowywanie newsa do włączenia do pliku
#==========================
$tag = "item ";
$rssData = preg_replace("/<" . $tag . "(.|\s)*?>/","<item>",$rssData);
$rssData = chop($rssData); // Usuwanie pustych spacji z końca linijek
$rssData = ereg_replace("[\r,\n]", "", $rssData); // Usuwwanie pustych linijek
$rssData = strstr($rssData,"<item>"); // Usuwanie wszystie przez <item>.
$rssData = substr() ew $title[$x]=str_replace('wieść:','',$title[$x]);


Sprawdziłem też bez "$rssData = ", ale również bez efektów...
Cypherq
blinksmiley.gif

  1. <?php
  2. $rssData = substr()
  3. ?>
ew -> ewentualnie ->
  1. <?php
  2. $title[$x]=str_replace('wieść:','',$title[$x]);
  3. ?>


Tutaj masz gotowe:

  1. <?php
  2. #==========================
  3. # Ten mechanizm tworzy tablice dla linków oraz nagłówków
  4. #==========================
  5. $x = 0;
  6. while($x < $liczba) {
  7. $link[$x] = strstr($rssArray[$x],"<link>"); // usuwanie wszystkiego przed <link>
  8. $link[$x] = ereg_replace("<link>","",$link[$x]);
  9. $link[$x] = str_replace(strstr($link[$x],"</link>"),"",$link[$x]);
  10. $link[$x] = trim($link[$x]);
  11. $title[$x] = strstr($rssArray[$x],"<title>");
  12. $title[$x] = ereg_replace("<title>","",$title[$x]); // Usuwanie <title> z części tytułu newsa
  13. $title[$x] = str_replace(strstr($title[$x],"</title>"),"",$title[$x]); // Usuwanie </title> oraz wszystkiego poza nim
  14. $title[$x] = trim($title[$x]);
  15.  
  16. /* TUTAJ DODAŁEM TO, CO PROPONOWAŁ KOLEGA  */
  17. $title[$x]=str_replace('wieść:','',$title[$x]);
  18. ?>
floydrose
Dziękuję, wprowadziłem też małe modyfikacje. Zauważyłem też, że kodowanie mam ustawione na iso-8859-2 (zmienię na UTF-8), dlatego też nie należało wpisać "wieść: " yahoo.gif . Dodałem więc linie:

Cytat
$title[$x] = str_replace("wieść: ","",$title[$x]);
$title[$x] = str_replace("galeria: ","",$title[$x]);
$title[$x] = str_replace("recenzja: ","",$title[$x]);


Bardzo dziękuję za pomoc. Każdemu po piwku! smile.gif

Witajcie ponownie!

tym razem potrzebuję bardzo linijkę z kodem, który będzie wyświetlał jakiś komunikat w przypadku, jeśli nie będzie żadnej wiadomości RSS (mam już "nie można się połączyć z kanałem RSS" - to co innego).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.