Skocz do zawartości

problem ze skryptem


Stwor

Rekomendowane odpowiedzi

Witajcie

Mam skrypt dzięki, któremu wyświetlam na innych stronach nagłówki artów z innej strony, ale mniejsza o to. Chodzi o fakt, że skrypt ten nie może poradzić sobie z wyświetlaniem nagłówków rss pochodzących z wordpress, z innych stron (dla testu) wszystko działa jak trzeba.

Oto kod skryptu (jakiś darmowy był - więc można sobie używać - choć pewnie jest nieefektywny - bo ma ze 3-4 lata)

<?php
class rss_parser {
 var $update_interval = 60;	
 var $data_directory = "https://www.strona.pl";
 var $rss_url;
 var $num_to_show;
 var $do_update;
 var $tags = array();
 var $content;
 var $rss = array();

 var $feed_title;
 var $feed_link;
 var $feed_description;

 var $my_html;

 function rss_parser($url, $numtoshow = 10, $html = "", $update = 0)
 {
$this->rss_url = $url;
$this->num_to_show = $numtoshow;
$this->do_update = $update;
$this->my_html = preg_replace("/(#{.*?):(.*?})/", "\\1__\\2", $html); //xx:xx tag workaround

$this->content = $this->fetch_feed();
$this->parse_feed();
$this->show();
 }

 function fetch_feed()
 { 
$url_parts = parse_url($this->rss_url);

$filename = $url_parts['host'] . str_replace("/", ",", $url_parts['path']) . "_" . @$url_parts['query'];
if(file_exists($this->data_directory . "/$filename")) {
  $last = filemtime($this->data_directory . "/$filename");
  if(time() - $last > $this->update_interval * 60 || $this->update_interval == 0) {
	$update = 1;
  }
} else {
	$create= 1;
}

if($create == 1 || ($this->do_update == TRUE && $update == 1)) {
  $fp = @fsockopen($url_parts['host'], 80, $errno, $errstr, 5);
  if (!$fp) {
	echo "Couldn't open rss feed {$this->feed_url} in {$_SERVER['PHP_SELF']}<br />\n";
	return;
  }

  fputs($fp, "GET " . $url_parts['path'] . "?" . @$url_parts['query'] . " HTTP/1.0\r\n"
			."Host: " . $url_parts['host'] . "\r\n"
			."User-Agent: Drew's RSS Reader 0.1\r\n"
			."Connection: Close\r\n\r\n");

  while(!feof($fp)) {
	$rss_data .= @fgets($fp, 1024);
  }

  list(, $rss_data) = explode("\r\n\r\n", $rss_data, 2);

  $output = @fopen($this->data_directory . "/$filename", "w+");
  if(!$output) {
	return $rss_data;
  } else {
	flock($output, LOCK_EX);
	fputs($output, $rss_data);
	flock($output, LOCK_UN);
	fclose($output);
  }
} //update

return file_get_contents($this->data_directory . "/$filename");
 }

 /* void */
 function parse_feed()
 {
preg_match("/<title>(.*?)<\/title>/", $this->content, $title);
$this->feed_title = @$title[1];

preg_match("/<link>(.*?)<\/link>/", $this->content, $link);
$this->feed_link = @$link[1];

preg_match("/<description>(.*?)<\/description>/", $this->content, $description);
$this->feed_description = @$description[1];

preg_match("/<content:encoded>(.*?)<\/content:encoded>/", $this->content, $encoded);
$this->feed_encoded = @$encoded[1];

preg_match("/<pubDate>(.*?)<\/pubDate>/", $this->content, $pubDate);
$this->feed_pubDate = @$pubDate[1];

preg_match_all("/<item[^>]*>(.*?)<\/item>/s", $this->content, $items);
if (sizeof($items[0]) == 0) {
  echo "No item elements found in rss feed.<br />\n";
}

for($i = 0; $i < sizeof($items[0]); ++$i) {
  preg_match_all("/(?:<([\w:]*)[^>]*>(?:<!\[CDATA\[)?(.*?)(?:]]>)?<\/\\1>)+?/si", preg_replace("/<item[^>]*>/", "", $items[0][$i]), $elements);
  for($j = 0; $j < sizeof($elements[0]); ++$j) {
	$elements[1][$j] = str_replace(":", "__", $elements[1][$j]);  //regex fix for items with : like dc:date
	$this->rss[$i][$elements[1][$j]] = trim(html_entity_decode($elements[2][$j]));
  }
}
 }


 /* void */
 function show()
 {
if($this->my_html == "") {
  $this->show_html();
} else {
  $this->show_user_html();
}
 }

 function show_html()
 {
$show = (sizeof($this->rss)  > $this->num_to_show ? $this->num_to_show : sizeof($this->rss));
for($i = 0; $i < $show; ++$i) {
  echo "- <a href=\"{$this->rss[$i]['link']}\" target=\"_new\">{$this->rss[$i]['title']}</a><br />\n";
}
 }

 function show_user_html()
 {
$show = (sizeof($this->rss) > $this->num_to_show ? $this->num_to_show : sizeof($this->rss));
for($i = 0; $i < $show; ++$i) {
  extract($this->rss[$i]);
  $item = preg_replace("/#\{([^}]+)}/e", "$\\1", $this->my_html);
  echo $item;
}
 }

}


?>

a kod do wyświetlania na tego cuda na stronie docelowej to:

<?
		$html  = "";
		$html .= "<h4><a href=\"#{link}\" title=\"#{title}\">#{title}</a></h4>\n";
		$rss = new rss_parser("https://adreskanalu.pl/rss.xml", 5, $html, 1);
		?>

coś takiego mam, i teraz tak:

dla kanału powiedzmy: https://www.pb.pl/RSS.aspx?topic=1150e5f1-d...9e-9aece7816e00 nie ma najmieszych problemów

natomiast dla kanału: https://www.qazeta.pl/feed/ - wyświetla że nic nie znaleziono

czy to z kanałem coś nie tak czy ze skryptem ?

Za rozwiązanie niezmiernie dziękuje.

niezaleznosc-finansowa.pl - czasami coś napiszę

Hippos - Katalog stron PREMIUM

Odnośnik do komentarza
Udostępnij na innych stronach

Najwidoczniej inaczej zbudowane są jest dokumenty XML i przez to twój skrypt nie działa w obydwu przypadkach.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Pobierasz magpierss, wrzucasz na serwer i

require_once('magpierss/rss_fetch.inc');

define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');

$url='https://muzyka.onet.pl/0,72571,feed.rss';

$rss = fetch_rss($url);

foreach ($rss->items as $item)

echo '<h4><a href=''.$item['link'].'' title=''.$item['title'].''>'.$item['title'].'</a></h4>';

Oczywiście w pierwszej linijce musisz podać ścieżkę do rss_fetch.inc, w kolejnej definiujesz kodowanie, następnie podajesz URL do kanału RSS.

Treść wpisu, znajduje się w $item['description'].

pozdrawiam

logo-stat4seo-blue-small.png

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności