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

Mam takie zmartwienie ze skryptem: chciałbym utworzyć czytnik RSS moich aukcji, przykładowo "http://www.allegro.pl/rss.php?feed=user&uid=666". Wszystko jest fajnie, gdy posiadam jakieś aukcje smile.gif. Gdy np. nie można się połączyć z kanałem RSS, pojawia się "nie można połączyć sie z kanałem RSS". Chciałbym też, aby w przypadku gdy nie ma żadnych aukcji, w miejscu czytnika pojawiła się informacja "Brak aktualnych ofert w serwisie Allegro.pl".

Przedstawiam kod czytnika:

  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: <a href=\"http://www.aarondunlap.com\" target=\"_blank\">http://www.aarondunlap.com</a>
  6.  #===========================================
  7.  
  8.  $czas = 60; // Co ile ma być aktualizacja
  9.  
  10.  $folder = "str/aukcje/"; // Adres folderu, w którym znajdować się będą pliki z newsami.
  11.  
  12.  $adres = "http://www.allegro.pl/rss.php?feed=user&uid=613777"; // Adres URL do kanału RSS
  13.  $nazwa_kanalu = "RSS RGP Allegro"; // 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.            $title[$x] = str_replace("wieść: ","",$title[$x]);// omija dane slowa, przydatne przy zwyklych kanałach rss
  86.            $title[$x] = str_replace("galeria: ","",$title[$x]);// omija dane slowa,  przydatne przy zwyklych kanałach rss
  87.            $title[$x] = str_replace("recenzja: ","",$title[$x]);// omija dane slowa,  przydatne przy zwyklych kanałach rss
  88.        
  89.        if ($trunc != FALSE) { $title[$x] = str_replace(substr($title[$x],$trunc),"",$title[$x]); }
  90.        if ($delim != FALSE) { $title[$x] = str_replace(strstr($title[$x],$delim),"",$title[$x]); }
  91.        
  92.            if ($title[$x] == "") { $liczba = $x; break; } // Gdy już nie ma nagłówków zmienna $liczba przyjmuje wartość maksumalną.
  93.        $x++;
  94.      }
  95.  
  96.      #==========================
  97.      # Zapis do pliku
  98.      #==========================
  99.      $fp = fopen($folder, "w+");
  100.      $x=0;  
  101.      while ($x < $liczba) { // ta pętla zapisuje każdy link osobno.
  102.        fwrite($fp,"<img src=\"gwiazdka.gif\">&nbsp;<a class=\"menu3\" target=\"$target\" href=\"$link[$x]\">$title[$x]</a><br>\n");
  103.        $x++;
  104.      }
  105.     fclose($fp);
  106.     include $folder;
  107.  
  108. } else {
  109.    #==========================
  110.    # Zwracanie błędu gdy podany adres jest błędny.
  111.    #==========================
  112.    echo "<b>Nie można połączyć się z adresem RSS.</b>";
  113.  
  114. }
  115.  
  116. ?>


serdecznie dziękuję za odpowiedzi smile.gif

to jest zwykle php, chodzi o to, żeby wykonać coś w stylu "IF nie ma wyników" to wtedy write "nie ma żadnych aukcji" smile.gif tylko nie wiem jaka to ma być składnia i gdzie ją dokładnie dać... ehh
phpion
Może po prostu zmień komunikat na taki jak chcesz?

PS: bardzo ciekawe podejście do parsowania XMLa...
floydrose
jakieś propozycje? smile.gif będę wdzięczny smile.gif

Odświeżam temat smile.gif...
marek44
Dodaj po:
  1. <?php
  2. //Otwiera plik kanału rss
  3. while(!feof($rssHandle)) {
  4.     $rssData .= fgets($rssHandle);
  5. }
  6. ?>


Ten fragment kodu:
  1. <?php
  2. if(!preg_match("/item/i", $rssData)) {
  3. echo "<b>Brak aktualnych ofert w serwisie <a href='http://allegro.pl' rel='nofollow'>Allegro.pl</a></b>";
  4.  
  5. exit();
  6. }
  7. ?>

nie sprawdzałem.
floydrose
Zamieszczam cały skrypt. Mam jeszcze jedno pytanie. Skrypt spełnia swoje funkcje jeśli znajdują się wiadomości (aukcje) w kanale RSS Allegro. Jeśli nie ma żadnych aukcji, to warunek "$czas = 0;" jest konieczny, inaczej nie wyświetla komunikatu "Brak aktualnych ofert<br>w serwisie Allegro.pl.". Tutaj pytanie: dlaczego smile.gif? przyznam, że chciałbym, aby aktualizacja była sprawdzana co 30 minut, ale wg obecnego skryptu nie będzie pokazywało "brak aktualnych ofert...". Co zrobić?

  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: <a href=\"http://www.aarondunlap.com\" target=\"_blank\">http://www.aarondunlap.com</a>
  6.  #===========================================
  7.  
  8.  $czas = 0; // Co ile ma być aktualizacja
  9.  
  10.  $folder = "str/aukcje/"; // Adres folderu, w którym znajdować się będą pliki z newsami.
  11.  
  12.  $adres = "http://www.allegro.pl/rss.php?feed=user&uid=613777"; // Adres URL do kanału RSS
  13.  $nazwa_kanalu = "RSS RGP Allegro"; // Tytuł kanału RSS
  14.  $liczba = 8; // 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.      # Operacje związane z brakiem wiadomości RSS   exit();  
  55.      #==========================
  56.        if (!preg_match("/item/i", $rssData)) {
  57.        echo "<center>Brak aktualnych ofert<br>w serwisie Allegro.pl.</center>";
  58.                }
  59.      #==========================
  60.      # Usuwanie zbędnych elemntów tak aby okrojona zawartość mogła zostać zapisana w pliku
  61.  
  62.      # Tagi <description></description> zostają pominięte
  63.      #==========================      
  64.      $tags_and_content_to_strip = Array("description");
  65.  
  66.      foreach ($tags_and_content_to_strip as $tag) {
  67.           $rssData = preg_replace("/<" . $tag . ">(.|s)*?</" . $tag . ">/","",$rssData);
  68.      }
  69.  
  70.      $rssData = str_replace("<item>","", $rssData); // usuwanie tagu <item>
  71.      $rssData = urldecode($rssData); // Zamiana wszystkich: %20 na spacje.
  72.      //$rssData = str_replace(strstr("</channel>",$rssData),"",$rssData);
  73.        $rssArray = explode("</item>",$rssData); // Tworzenie tablicy z nagłówkami
  74.  
  75.        $title = array();
  76.      $link = array();
  77.  
  78.      #==========================
  79.      # Ten mechanizm tworzy tablice dla linków oraz nagłówków
  80.      #==========================  
  81.      $x = 0;
  82.      while($x < $liczba) {
  83.          $link[$x] = strstr($rssArray[$x],"<link>"); // usuwanie wszystkiego przed <link>
  84.        $link[$x] = ereg_replace("<link>","",$link[$x]);
  85.         $link[$x] = str_replace(strstr($link[$x],"</link>"),"",$link[$x]);
  86.         $link[$x] = trim($link[$x]);
  87.        $title[$x] = strstr($rssArray[$x],"<title>");
  88.          $title[$x] = ereg_replace("<title>","",$title[$x]); // Usuwanie <title> z części tytułu newsa
  89.          $title[$x] = str_replace(strstr($title[$x],"</title>"),"",$title[$x]); //  Usuwanie </title> oraz wszystkiego poza nim
  90.          $title[$x] = trim($title[$x]);
  91.        
  92.        if ($trunc != FALSE) { $title[$x] = str_replace(substr($title[$x],$trunc),"",$title[$x]); }
  93.        if ($delim != FALSE) { $title[$x] = str_replace(strstr($title[$x],$delim),"",$title[$x]); }
  94.        
  95.            if ($title[$x] == "") { $liczba = $x; break; } // Gdy już nie ma nagłówków zmienna $liczba przyjmuje wartość maksumalną.
  96.        $x++;
  97.      }
  98.  
  99.      #==========================
  100.      # Zapis do pliku
  101.      #==========================
  102.      $fp = fopen($folder, "w+");
  103.      $x=0;  
  104.      while ($x < $liczba) { // ta pętla zapisuje każdy link osobno.
  105.        fwrite($fp,"<img src=\"gwiazdka.gif\">&nbsp;<a class=\"menu3\" target=\"$target\" href=\"$link[$x]\">$title[$x]</a><br>\n");
  106.        $x++;
  107.      }
  108.     fclose($fp);
  109.     include $folder;
  110.  
  111. } else {
  112.    #==========================
  113.    # Zwracanie błędu gdy podany adres jest błędny.
  114.    #==========================
  115.    echo "<b>Nie można połączyć się z adresem RSS.</b>";
  116.  
  117. }
  118.  
  119. ?>


Odświeżam temat smile.gif i proszę o sugestie smile.gif
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.