Page 1 of 2

heise-newsticker

Posted: Wed 9. Jun 2004, 21:43
by andre
hi,

weil ich kein "blah blah" auf meine seite ausdenken kann hab ich eine kleine script gebastelt um heise-news (http://www.heise.de/news-extern/news.shtml) auf meine seite zu linken:

Code: Select all

<?php
$rss_uri = "http://www.heise.de/newsticker/heise.rdf";
$lines = "10"; //wieviele news sollten angezeigt werden
$emplem = ":: "; //vorzeichen 

$fp = fopen($rss_uri,"r")	or die("Error opening file: ".$rss_uri);
$data = fread($fp, 4096) or die("Error reading file: ".$rss_uri);;
$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parse_into_struct($parser,$data,&$d_ar,&$i_ar)
	or die(sprintf("XML Error: %s at line %d",
		xml_error_string($xml_get_error_code($parser)),
		xml_get_current_line_number($parser)
	));

for ($i=1; $i<=$lines; $i++){
	$title = $d_ar[$i_ar['title'][$i]]['value'];
	$link = $d_ar[$i_ar['link'][$i]]['value'];
	echo '<a href="'.$link.'" target="_blank">'.$emplem.$title.'<a><br>';
}

xml_parser_free($parser);
fclose($fp);
?>
cheers
-andre
ps. ihr könnt es in aktion sehen auf meine SEHR unfertigen seite - andres.homelinux.net

Posted: Wed 9. Jun 2004, 23:27
by Mario670
Sieht gut aus!! Und wie bindet man das ein, pber html klappt nicht :oops:

Posted: Wed 9. Jun 2004, 23:29
by Pappnase
hallo mario

das ding als php datei im root speichern und mit dem {PHP:news.php} oder
http://www.phpwcms.de/forum/viewtopic.php?t=2300#14382

Posted: Thu 10. Jun 2004, 00:06
by Mario670
@Pappnase:

mal wieder wie immer: Daaaannnkkkeee! :wink:

Posted: Thu 10. Jun 2004, 00:11
by Pappnase
Mario670 wrote:@Pappnase:

mal wieder wie immer: Daaaannnkkkeee! :wink:
hallo mario

nicht zu danken mache ich doch gerne! ich leb ja online zwar nicht mit t-offline aber mit phpwcms!! :wink: :oops:

Posted: Thu 10. Jun 2004, 00:27
by Mario670
...und das "schlimme" ist, mal wieder hat's auf anhieb geklappt :lol:

Der Tag wird kommen, da lern ich's auch noch 8)

Posted: Thu 10. Jun 2004, 11:37
by andre
moin,

hab mein script bischen weiter entwickelt:

Code: Select all

<?php
if (isset($_GET['uri'])) $rdf_uri = $_GET['uri'];
	else $rdf_uri = "http://www.heise.de/newsticker/heise.rdf";
if (isset($_GET['lines'])) $lines = $_GET['lines'];

	else $lines = 6; //wieviele news sollten angezeigt werden
$emplem = ":: "; //vorzeichen 

$fp = fopen($rdf_uri,"r")	or die("Error opening file: ".$rdf_uri);
$data = fread($fp, 4096) or die("Error reading file: ".$rdf_uri);;
$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parse_into_struct($parser,$data,&$d_ar,&$i_ar) 
	or die("Parse error on line: ".xml_get_current_line_number($parser));

if ($lines==0){ $lines = count($i_ar['title'])-1; }
for ($i=1; $i<=$lines; $i++){
	$title = $d_ar[$i_ar['title'][$i]]['value'];
	$link = $d_ar[$i_ar['link'][$i]]['value'];
	echo '<a href="'.$link.'" target="_blank">'.$emplem.$title.'</a><br />';
}

xml_parser_free($parser);
fclose($fp);
?>
jetzt kann mann url variables benutzen:

ext_rdf.php?uri=http://www.heise.de/newsticker/heise.rdf&lines=5
würde die 5 neuesten news von http://www.heise.de/newsticker/heise.rdf ausgeben

ext_rdf.php?uri=http://www.heise.de/newsticker/heise.rdf&lines=0
würde alle news von http://www.heise.de/newsticker/heise.rdf ausgeben

ABER !
ich glaub mein script hat ein "fehler" weil ich beim folgenden feeds parse errors griege:
http://www.linux-knowledge-portal.org/lkp_news_de.rdf
http://www.linux-knowledge-portal.org/lkp_de.rdf
http://www.linux-community.de/Ticker/news.rdf
http://www.linux-community.de/Ticker/fragen.rdf
http://www.pl-forum.de/backend/pro-linux.rdf

aber die folgenden funktionieren
http://www.heise.de/newsticker/heise.rdf
http://www.heise.de/security/news/news.rdf
http://www.heise.de/mobil/newsticker/heise.rdf
http://www.heise.de/tp/news.rdf
http://www.linuxinfozentrum.ch/rdf/linuxinfozentrum.rdf

werde meine script neu schreiben müssen :roll:

cheers
-andre

Posted: Thu 10. Jun 2004, 11:41
by duergner
Willst du nicht vielleicht gleich selber einen content part dafür schreiben?

Posted: Thu 10. Jun 2004, 11:47
by andre
ich will erst mein script zum laufen zu bringen, und dann sehen wir mal...

Posted: Thu 10. Jun 2004, 12:26
by duergner
Wenn du willst, dann kann ich den content part übernehmen. Dann brauch mer da dann eigentlich dein Script nur noch als Funktion einbinden.

Wenn möglich kannst du das Script ja vielleicht schon gleich als Funktion schreiben. Dann würde das Einbinden schneller gehn.

Posted: Thu 10. Jun 2004, 17:15
by andre
yo,

hab hier jetzt (scheinbar) funktionierendes code;

Code: Select all

<?php
// ext_srdf.php v0.2 - a simple rdf parser
// modified by Andre Schmidt from code at http://martin.f2o.org/php/xml-feed
//
// usage:
//  require(<filename>);
//  srdf(<headers>,<mode>,<emblem>,<uri>);
//
// example:
//  require("ext_srdf.php");
//  srdf(0,2,":: ","http://www.pl-forum.de/backend/pro-linux.rdf");
//
// reference:
// headers > amount of headers to print; 0 = all headers
// mode > what do we want to print; 0 = only header, 1 = header as link, 2 = header as link + description
// emblem > something to show in front of the header
// uri > the path and filename to the news
function srdf($headers,$mode,$emblem,$rdf_uri) {
	function untag($string, $tag) {
		$tmpval = array();
		$preg = "|<$tag>(.*?)</$tag>|s";
		preg_match_all($preg, $string, $tags);
		foreach ($tags[1] as $tmpcont){	$tmpval[] = $tmpcont;	}
		return $tmpval;
	}
	if (!($fp = fopen($rdf_uri, "r"))) { die("Error opening file: $rdf_uri"); }
	while (!feof($fp)) { $rdf .= fread($fp, 128); }
	fclose($fp);
	$items = untag($rdf, 'item');
	$line = 0;
	foreach ($items as $item) {
		if ($headers>0){ if($line==$headers) break;	$line++; }
		$title = untag($item, 'title');
		$link = untag($item, 'link');
		if ($mode==0) {	echo $emblem.$title[0]."<br />"; }
		if ($mode==1) {	echo '<a target="_blank" href="'.$link[0].'">'.$emblem.$title[0]."</a><br />"; }
		if ($mode==2) {
			$description = untag($item, 'description');
			$d = html_entity_decode($description[0]);
			echo '<a target="_blank" href="'.$link[0].'">'.$emblem.$title[0]."</a><br />".$d."<br /><br />";
		}
	}
}
?>
is nur noch die frage wie wir die output formatiieren wollen, ideen ?

Posted: Thu 10. Jun 2004, 17:35
by duergner
Hmm das geht denke ich zur Zeit leider nur eher schlecht. Wenn wir das ganze als Content Part machen und Oliver sein Template System für Content Parts fertig hat, denke ich sollte das kein so großes Problem mehr darstellen.

Posted: Thu 10. Jun 2004, 18:26
by andre
ok,

hab hier jetz was läuft:

Code: Select all

<?php
////////////////////////////////////////////////////////////////////////////
// ext_srdf.php v0.3 - a simple rdf parser
// modified by Andre Schmidt from code at http://martin.f2o.org/php/xml-feed
//
// usage:
//  require(<filename>);
//  srdf(<headers>,<mode>,<emblem>,<uri>);
//
// example:
//  require("ext_srdf.php");
//  srdf(0,2,":: ","http://www.pl-forum.de/backend/pro-linux.rdf");
//
// reference:
//  headers > amount of headers to print; 0 = all headers
//  mode > what do we want to print; 0 = only header, 1 = header as link, 2 = header as link + description
//  emblem > something to show in front of the header
//  uri > the path and filename to the news
// css:
//  news_header
//  news_description
////////////////////////////////////////////////////////////////////////////
function srdf($headers,$mode,$emblem,$rdf_uri) {
	function untag($string, $tag) {
		$tmpval = array();
		$preg = "|<$tag>(.*?)</$tag>|s";
		preg_match_all($preg, $string, $tags);
		foreach ($tags[1] as $tmpcont){	$tmpval[] = $tmpcont;	}
		return $tmpval;
	}
	if (!($fp = fopen($rdf_uri, "r"))) { die("Error opening file: $rdf_uri"); }
	while (!feof($fp)) { $rdf .= fread($fp, 128); }
	fclose($fp);
	$items = untag($rdf, 'item');
	$line = 0;
	foreach ($items as $item) {
		if ($headers>0){ if($line==$headers) break;	$line++; }
		$title = untag($item, 'title');
		$link = untag($item, 'link');
		if ($mode==0) {	echo '<font class="news_header">'.$emblem.$title[0]."</font><br />"; }
		if ($mode==1) {	echo '<a class="news_header" target="_blank" href="'.$link[0].'">'.$emblem.$title[0]."</a><br />"; }
		if ($mode==2) {
			$description = untag($item, 'description');
			$d = html_entity_decode($description[0]);
			echo '<a class="news_header" target="_blank" href="'.$link[0].'">'.$emblem.$title[0].
				'</a><br /><font class="news_description">'.$d."</font><br /><br />";
		}
	}
}
?>
guckst du hier:
http://andres.homelinux.net/index.php?id=18,0,0,1,0,0

meine article inhalt:
<b>Pro-Linux News</b><br /><br />
[PHP]
require ("ext_srdf.php");
srdf(6,2,":: ","http://www.pl-forum.de/backend/pro-linux.rdf");
[/PHP]

meine default css:
.news_header {
font-size:16px;
}
.news_description {
font-style:italic;
}

cheers
-andre
ps. wäre schön wenn ich die print css in phpwcms editieren könnte...

Posted: Thu 10. Jun 2004, 18:44
by duergner
andre wrote:guckst du hier:
http://andres.homelinux.net/index.php?id=18,0,0,1,0,0

meine article inhalt:
<b>Pro-Linux News</b><br /><br />
[PHP]
require ("ext_srdf.php");
srdf(6,2,":: ","http://www.pl-forum.de/backend/pro-linux.rdf");
[/PHP]

meine default css:
.news_header {
font-size:16px;
}
.news_description {
font-style:italic;
}
Gut wenn ich dazu komm, dann pack ich das Ganze dann heut Abend mal noch ein einen eigenen Content Part. :lol:

Posted: Fri 11. Jun 2004, 11:20
by isac
I do not understand nothing. :cry:

English for next time!! OK :P