Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]rss
Forum PHP.pl > Forum > Przedszkole
darkowski
Witam ściągłem z sieci czytnik rss ale jak zmieniam kanał na ten co bym chciał to nie działa

rss.php
  1. <?php
  2.  
  3.  #===========================================
  4.  # Silnik tego skryptu zapo&iquest;yczony zosta&sup3; z czytnika RSS w wersji PHP z
  5.  # oprogramowania RSS GET, oryginalna wersja programu na stronie: http://www.aarondunlap.com
  6.  #===========================================
  7.  
  8.  $czas = 1; // Co ile ma by&aelig; aktualizacja
  9.  
  10.  $folder = "rss/"; // Adres folderu, w którym znajdowa&aelig; si&ecirc; b&ecirc;d&sup1; pliki z newsami.
  11.  
  12.  $adres = "http://www.sport24.pl/feed/pilka.xml"; // Adres URL do kana&sup3;u RSS
  13.  $nazwa_kanalu = "Wiadomości sportowe"; // Tytu&sup3; kana&sup3;u RSS
  14.  $liczba = 10; // Iloœc nag&sup3;ówków newsów, które maj&sup1; by&aelig; wyswietlane
  15.  $target = "_blank"; // Opcja target="" dla newsów, mo&iquest;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&sup3;u
  23.  
  24.  #==========================
  25.  # Operacje zwi&sup1;zane ze sprawdzaniem aktualnoœci nag&sup3;ó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&sup3; aktualizowany
  31.      
  32.  } elseif (@fopen($adres,"r")) { // Sprawdza czy ma dost&ecirc;p do kana&sup3;u RSS
  33.  
  34.     #==========================
  35.   # Operacja zwi&sup1;zane z dodawaniem nowego nag&sup3;ówka do pliku
  36.   #==========================
  37.  
  38.   $rssHandle = fopen($adres,"r") ; // Otwiera plik kana&sup3;u RSS
  39.  
  40.   while (!feof($rssHandle)) {
  41.    $rssData .= fgets($rssHandle);
  42.   }
  43.  
  44.   #==========================
  45.   # Przygotowywanie newsa do w&sup3;&sup1;czenia do pliku
  46.   #==========================
  47.   $tag = "item ";
  48.   $rssData =  preg_replace("/<" . $tag . "(.|s)*?>/","<item>",$rssData);
  49.   $rssData = chop($rssData); // Usuwanie pustych spacji z ko&ntilde;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&ecirc;dnych elemntów tak aby okrojona zawartoœ&aelig; mog&sup3;a zosta&aelig; zapisana w pliku
  55.  
  56.   # Tagi <description></description> zostaj&sup1; pomini&ecirc;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&sup3;ówkami
  68.  
  69.     $title = array();
  70.   $link = array();
  71.  
  72.   #==========================
  73.   # Ten mechanizm tworzy tablice dla linków oraz nag&sup3;ó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&ecirc;œci tytu&sup3;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&iquest; nie ma nag&sup3;ówków zmienna $liczba przyjmuje wartoœ&aelig; maksumaln&sup1;.
  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&ecirc;tla zapisuje ka&iquest;dy link osobno.
  101.    fwrite($fp,"<br>\n-<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&sup3;&ecirc;du gdy podany adres jest b&sup3;&ecirc;dny.
  110. #==========================
  111. echo "<b>Nie mozna po&sup3;&sup1;czy&aelig; si&ecirc; z adresem: $adres. </b>";
  112.  
  113. }
  114.  
  115. ?>


Wychodzi mi takie coś:

Wiadomości sportowe
-
-
-
-
-
-
-
-

Może mi ktoś pomóc?
erix
Zmień bibliotekę parsującą zawartość. Wynajduje koło na nowo. Spróbuj tego: http://magpierss.sourceforge.net/

Dużo łatwiejsze w użyciu, a zapisywanie linków można łatwo dodać. smile.gif
darkowski
No nie wiem czy to jest prostrze bo mi nie wychodzi

Znalazłem inny skryp tylko że wyskajuje mi taki błąd:

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/home/neoprog/www/rss/www.sport24.pl,feed,pilka.xml_) is not within the allowed path(s): (/home/niedojeb/) in /home/niedojeb/www/bukmacherka/rss_fetch.php on line 77


i wiadomości się nie odświeżają bo albo jest za długi czas ustawiony albo przez ten błąd

example.php

  1. <!--
  2.  To include this sample on your homepage, make sure the page's extension is .php
  3.  and inside it put
  4.  include "example.php";
  5.  just make sure example is in the same folder as your main page.
  6. -->
  7.  
  8. <table style="background-color: #FFFFFF; border: solid 1px #000000;" cellpadding="2" cellspacing="1" width="70%" align="center">
  9.  <tr>
  10.    <td style="background-color: #0096D2; font-weight: bold; color: #FFFFFF; font-size: 14px; text-align: center;" width="75%" align="center">Wiadmości ze świata sportu </td>
  11.  </tr>
  12. <?php
  13. include_once "./rss_fetch.php";
  14.  
  15. $html  = "  <tr>\n";
  16. $html .= "    <td style='background-color: #DCF0FA; font-weight: bold; color: #000000; font-size: 13px;'>\n";
  17. $html .= "      <font size='+1'><a href='#{link}' target='_new'>#{title}</a></font><br />\n";
  18. $html .= "      #{description}<br />\n";
  19. $html .= "      <font size='2'>#{pubDate}<br /><br />\n";
  20. $html .= "    </td>\n";
  21. $html .= "  </tr>\n";
  22.  
  23. $rss = new rss_parser("http://www.sport24.pl/feed/pilka.xml", 5, $html, 1);
  24. ?>
  25. </table>




oraz drugi plik

rss_fetch.php
  1. <?php
  2. /************************************************************
  3. RSS Fetch 0.4.1
  4. RSS Feed Reader
  5. Author: Drew Phillips
  6. Copyright 2005 Drew Phillips
  7.  
  8. This program is free software; you can redistribute it and/or
  9. modify it under the terms of the GNU General Public License
  10. as published by the Free Software Foundation; either version 2
  11. of the License, or (at your option) any later version.
  12.  
  13. This program is distributed in the hope that it will be useful,
  14. but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. GNU General Public License for more details.
  17.  
  18. You should have received a copy of the GNU General Public License
  19. along with this program; if not, write to the Free Software
  20. Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  21.  
  22.  
  23.  
  24. ************************************************************/
  25.  
  26.  
  27.  
  28. class rss_parser {
  29.  var $update_interval = 60;    
  30.  /* How often to fetch the rss file
  31.      A cached version will be used between updates    */
  32.  
  33.  var $data_directory = "/home/neoprog/www/rss";
  34.  /* Where to store the rss data from the feeds
  35.      Note: an absolute path is better than a relative path here
  36.      unless you plan on keeping the script to display the feeds
  37.      in the same folder as this file and the feeds.   */
  38.  
  39.  
  40.  
  41.  /* NO NEED TO EDIT BELOW HERE UNLESS YOU KNOW WHAT YOU ARE DOING  */
  42.  
  43.  
  44.  var $rss_url;
  45.  var $num_to_show;
  46.  var $do_update;
  47.  var $tags = array();
  48.  var $content;
  49.  var $rss = array();
  50.  
  51.  var $feed_title;
  52.  var $feed_link;
  53.  var $feed_description;
  54.  
  55.  var $my_html;
  56.  
  57.  function rss_parser($url, $numtoshow = 10, $html = "", $update = 0)
  58.  {
  59.    $this->rss_url = $url;
  60.    $this->num_to_show = $numtoshow;
  61.    $this->do_update = $update;
  62.    $this->my_html = preg_replace("/(#{.*?):(.*?})/", "1__2", $html); //xx:xx tag workaround
  63.  
  64.    $this->content = $this->fetch_feed();
  65.    $this->parse_feed();
  66.    $this->show();
  67.  }
  68.  
  69.  
  70.  /* string */
  71.  function fetch_feed()
  72.  {
  73.    $url_parts = parse_url($this->rss_url);
  74.  
  75.    $filename = $url_parts['host'] . str_replace("/", ",", $url_parts['path']) . "_" . @$url_parts['query'];
  76.    if(file_exists($this->data_directory . "/$filename")) {
  77.      $last = filemtime($this->data_directory . "/$filename");
  78.      if(time() - $last > $this->update_interval * 60 || $this->update_interval == 0) {
  79.        $update = 1;
  80.      }
  81.    } else {
  82.        $create= 1;
  83.    }
  84.  
  85.    if($create == 1 || ($this->do_update == TRUE && $update == 1)) {
  86.      $fp = @fsockopen($url_parts['host'], 80, $errno, $errstr, 5);
  87.      if (!$fp) {
  88.        echo "Couldn't open rss feed {$this->feed_url} in {$_SERVER['PHP_SELF']}<br />\n";
  89.        return;
  90.      }
  91.  
  92.      fputs($fp, "GET " . $url_parts['path'] . "?" . @$url_parts['query'] . " HTTP/1.0r\n"
  93.                ."Host: " . $url_parts['host'] . "r\n"
  94.                ."User-Agent: Drew's RSS Reader 0.1r\n"
  95.                ."Connection: Closer\nr\n");
  96.  
  97.      while(!feof($fp)) {
  98.        $rss_data .= @fgets($fp, 1024);
  99.      }
  100.  
  101.      list(, $rss_data) = explode("r\nr\n", $rss_data, 2);
  102.  
  103.      $output = @fopen($this->data_directory . "/$filename", "w+");
  104.      if(!$output) {
  105.        return $rss_data;
  106.      } else {
  107.        flock($output, LOCK_EX);
  108.        fputs($output, $rss_data);
  109.        flock($output, LOCK_UN);
  110.        fclose($output);
  111.      }
  112.    } //update
  113.  
  114.    return file_get_contents($this->data_directory . "/$filename");
  115.  }
  116.  
  117.  /* void */
  118.  function parse_feed()
  119.  {
  120.    preg_match("/<title>(.*?)</title>/", $this->content, $title);
  121.    $this->feed_title = @$title[1];
  122.  
  123.    preg_match("/<link>(.*?)</link>/", $this->content, $link);
  124.    $this->feed_link = @$link[1];
  125.  
  126.    preg_match("/<description>(.*?)</description>/", $this->content, $description);
  127.    $this->feed_description = @$description[1];
  128.  
  129.    preg_match_all("/<item[^>]*>(.*?)</item>/s", $this->content, $items);
  130.    if (sizeof($items[0]) == 0) {
  131.      echo "No item elements found in rss feed.<br />\n";
  132.    }
  133.  
  134.    for($i = 0; $i < sizeof($items[0]); ++$i) {
  135.      preg_match_all("/(?:<([w:]*)[^>]*>(?:<![CDATA[)?(.*?)(?:]]>)?</1>)+?/si", preg_replace("/<item[^>]*>/", "", $items[0][$i]), $elements);
  136.      for($j = 0; $j < sizeof($elements[0]); ++$j) {
  137.        $elements[1][$j] = str_replace(":", "__", $elements[1][$j]);  //regex fix for items with : like dc:date
  138.        $this->rss[$i][$elements[1][$j]] = trim(html_entity_decode($elements[2][$j]));
  139.      }
  140.    }
  141.  }
  142.  
  143.  
  144.  /* void */
  145.  function show()
  146.  {
  147.    if($this->my_html == "") {
  148.      $this->show_html();
  149.    } else {
  150.      $this->show_user_html();
  151.    }
  152.  }
  153.  
  154.  function show_html()
  155.  {
  156.    $show = (sizeof($this->rss)  > $this->num_to_show ? $this->num_to_show : sizeof($this->rss));
  157.    for($i = 0; $i < $show; ++$i) {
  158.      echo "- <a href=\"{$this->rss[$i]['link']}\" target=\"_new\">{$this->rss[$i]['title']}</a><br />\n";
  159.    }
  160.  }
  161.  
  162.  function show_user_html()
  163.  {
  164.    $show = (sizeof($this->rss) > $this->num_to_show ? $this->num_to_show : sizeof($this->rss));
  165.    for($i = 0; $i < $show; ++$i) {
  166.      extract($this->rss[$i]);
  167.      $item = preg_replace("/#{([^}]+)}/e", "$1", $this->my_html);
  168.      echo $item;
  169.    }
  170.  }
  171.  
  172. } // end class
  173.  
  174.  
  175. ?>
erix
Cytat
i wiadomości się nie odświeżają bo albo jest za długi czas ustawiony albo przez ten błąd

Podejrzewam, że właśnie przez ten błąd. Zapisuj pliki na swoim koncie.
darkowski
Odświeżają się tylko jest długi czas ustawiony a błąd dalej jest i nie wiem jak go usunąć
erix
Cytat
a błąd dalej jest i nie wiem jak go usunąć

Wyłącz safe_mode w php.ini, a jeśli nie możesz tego osiągnąć - zmień hosting.
darkowski
A innego sposobu nie ma? może jakieś chmody zmienić albo coś
erix
Nie da się, gdyż safe_mode sprawdza za każdym razem właściciela pliku: http://pl.php.net/features.safe-mode

Wniosek: Tylko i wyłącznie wyłączenie trybu bezpiecznego lub zmiana miejsca przechowywania plików.
darkowski
Safe_mode jest wyłączone na serwerze ale nadal jest błąd
erix
  1. <?php
  2. ini_set('open_basedir', '');
  3. ?>
darkowski
Dobra tylko gdzie mam to wrzucić?
erix
Gdzieś na początku skryptu. Lub zmienić tę wartość w php.ini, jeśli masz możliwość go zmodyfikować.
darkowski
Wrzuciłem na początek skryptu i nic to nie dało
erix
A w phpinfo" title="Zobacz w manualu PHP" target="_manual wstawionym zaraz po ini_set" title="Zobacz w manualu PHP" target="_manual dalej to samo?

Najlepiej by było, gdybyś po prostu zmienił ścieżki.
darkowski
Na jakie ścieżki? A po drugie to ty piszeszo rss_fetch.php, example.php czy rss.php bo troch tego tu podałem i sam się już motam
erix
Sam przecież podałeś treść błędu:
Cytat
Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/home/neoprog/www/rss/www.sport24.pl,feed,pilka.xml_) is not within the allowed path(s): (/home/niedojeb/) in /home/niedojeb/www/bukmacherka/rss_fetch.php on line 77

Kubuś developer: debuguj, debuguj, debuguj - ~nospor winksmiley.jpg
darkowski
No czyli rss_fetch ale niestety chyba sobie z tym nie poradzimy bo błąd cały czas jest

A może ma ktoś jakiś inny czynik rss( w miare prosty) który mógłbym umieścić na swojej stronie bo gdyby nie ten błąd to ten byłby ok
erix
Nie możesz po prostu zmienić
  1. <?php
  2. var $data_directory = "/home/neoprog/www/rss";
  3. ?>
?
darkowski
Nie uwieżysz ale ZROBIŁEM, Twoja ostatnia podpowiedź była rewelacyjna błędu nie ma wszysko git!!

Poradziliśmu już sobie z błędem ale wymyśliłem jeszcze coś tzn. na tym kanale http://www.sport24.pl/feed/pilka.xml zauważyłem że są zdjęcia do newsów a moje pytanie brzmi czy da się żeby w moim rssie były widozne te zdjęcia a jak tak to jak to zrobić
erix
Cytat
newsów a moje pytanie brzmi czy da się żeby w moim rssie były widozne te zdjęcia a jak tak to jak to zrobić

Da się. Bardzo ciężko podejrzeć pierwszy lepszy RSS ze zdjęciami i zobaczyć, jak jest realizowane? Wykaż odrobinę samodzielności.
darkowski
no aleto do kodu jkoś bedzie trzeba dodać a ja jak widzisz za bardzo sie ne znam
erix
A ja Ci gotowca nie dam. winksmiley.jpg

Chyba wiesz, jak wygląda tag HTML wstawiający obrazek, to Ci wystarczy.
darkowski
<img src="zdjecie.jpg" width="75" height="100" />

o to chodzi?
erix
Sprawdź w kursie HTML. winksmiley.jpg

Tylko nie zapomnij o CDATA dla tagu obejmującego opis (mam nadzieję, że go już masz). Co to CDATA? Google.
darkowski
Chodzi ci o <embed>?? a CDATA szukam winksmiley.jpg

Dobra ja się poddaje wstydnis.gif Szukałem, czytałem ale i tak bym tego nie potrafił zastosować więc chyba nie ma sensu, trudno będzie bez zdjęć
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.