heise-newsticker

Post custom hacks and enhancements for phpwcms here only. Maybe some of these things will be included in official release later.
andre
Posts: 28
Joined: Sun 4. Apr 2004, 19:59

heise-newsticker

Post 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
Mario670
Posts: 59
Joined: Sun 18. Apr 2004, 23:52
Contact:

Post by Mario670 »

Sieht gut aus!! Und wie bindet man das ein, pber html klappt nicht :oops:
Pappnase

Post 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
Mario670
Posts: 59
Joined: Sun 18. Apr 2004, 23:52
Contact:

Post by Mario670 »

@Pappnase:

mal wieder wie immer: Daaaannnkkkeee! :wink:
Pappnase

Post 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:
Mario670
Posts: 59
Joined: Sun 18. Apr 2004, 23:52
Contact:

Post 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)
andre
Posts: 28
Joined: Sun 4. Apr 2004, 19:59

Post 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
duergner
Posts: 139
Joined: Fri 14. May 2004, 12:10

Post by duergner »

Willst du nicht vielleicht gleich selber einen content part dafür schreiben?
andre
Posts: 28
Joined: Sun 4. Apr 2004, 19:59

Post by andre »

ich will erst mein script zum laufen zu bringen, und dann sehen wir mal...
duergner
Posts: 139
Joined: Fri 14. May 2004, 12:10

Post 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.
andre
Posts: 28
Joined: Sun 4. Apr 2004, 19:59

Post 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 ?
duergner
Posts: 139
Joined: Fri 14. May 2004, 12:10

Post 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.
andre
Posts: 28
Joined: Sun 4. Apr 2004, 19:59

Post 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...
duergner
Posts: 139
Joined: Fri 14. May 2004, 12:10

Post 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:
User avatar
isac
Posts: 410
Joined: Tue 18. Nov 2003, 13:13
Location: Portugal
Contact:

Post by isac »

I do not understand nothing. :cry:

English for next time!! OK :P
Post Reply