Begrenzte Zahl News auslesen

PC Freak

Erfahrenes Mitglied
hi ;) habe ein php script, welches RSS News aus einer rss datei ausliest und auf meiner homepage anzeigt, doch ich möchte gerne, dass nur die letzten 5 newstitel ausgelesen werden und angezeigt werden.

Kann mir einer helfen ... hab keine ahnung davon ... die bedingung muss wohl geändert werden

PHP:
<?php 
 
$file = 'http://www.compu-zone.de/rss.php?catid=8'; 
 
$f = fopen($file,'r'); 
$blub = fread($f,65535); 
fclose($f); 
 
$p = xml_parser_create(); 
xml_parse_into_struct(&$p,&$blub,&$values,&$index); 
xml_parser_free($p); 
 
$pointer = 0; 
 
for ($i=0;$i<=sizeof($values);$i++) { 
if ($values[$i][tag]=='TITLE') { 
$linktitle[$pointer] = $values[$i][value]; 
} 
 
if ($values[$i][tag]=='LINK') { 
$linkurl[$pointer] = $values[$i][value]; 
} 
 
if ($values[$i][tag]=='DESCRIPTION') { 
$linkdesc[$pointer] = $values[$i][value]; 
$pointer++; 
} 
} 
 
for ($i=1;$i<sizeof($linktitle);$i++) { 
echo '- <a href="'.$linkurl[$i].'">'.$linktitle[$i].'</a><br />'; 
 
} 
 
 
?>
 
Wenn ich das alles richtig sehe, müsste folgendes reichen:
PHP:
for ($i=0;$i<=4;$i++) {
Vielleicht muss der Fall noch abgefangen werden, dass weniger als 5 News enthalten sind - aber probiers erstmal aus ...
 
Probleme mit RSS News auslesen

habe auf meiner homepage eine rss.php datei, welche aus meinem newssystem einen rss feed erstellt:

PHP:
<? 
   /* MySQL-Teil */ 
   $mysql['host'] = 'nicht angegeben'; // MySQL Host 
   $mysql['user'] = 'nicht angegeben'; // MySQL User 
   $mysql['passwort'] = 'nicht angegeben'; // MySQL Passwort 
   $mysql['tabelle'] = 'artikelnews_news'; // Tabelle aus der der Inhalt kommt
   $mysql['db'] = 'nicht angegeben'; // Datenbank Name 
   
   Header("Content-Type: text/xml"); 
   
   $query="SELECT * FROM artikelnews_news ORDER BY id DESC LIMIT 0, ".$_GET['id']." WHERE category=".$_GET['catid']; 
   
   if($_GET['id']>10 || empty($_GET['id'])) $_GET['id']=5; 
   
   echo '<?xml version="1.0" encoding="ISO-8859-1" ?> 
   <rss version="0.91">
    
   <channel> 
   
   <title>meineurl.de Hardware Newsfeed</title> 
   <link>http://www.meineurl.de.de</link> 
   <description>Die '.$_GET['id'].' aktuellsten News aus der Hardware-Branche</description>
   <language>de-de</language> 
   <copyright>'.date("Y").' meineurl.de</copyright> 
   <image>
   <url>http://www.meineurl.de/Bilder/small_banner.gif</url>  
   '; 
   
 @mysql_connect($mysql['host'], $mysql['user'], $mysql['passwort']) or die('Verbindung zum MySQL Server kann nicht aufgebaut werden'); 
   @mysql_select_db($mysql['db']) or die('Datenbank kann nicht selektiert werden'); 
   
   $laenge = 300;
   
 $ergeb=mysql_query("SELECT * FROM artikelnews_news WHERE category=".$_GET['catid']." ORDER BY id DESC LIMIT 0,".$_GET['catid']);
   	while($array=mysql_fetch_array($ergeb)) {
   
   echo '<item> 
   <title>'.$array['news_title'].'</title> 
   <description>'.$news_text = substr($array['news_text'], 0, $laenge).'...</description> 
   <link>http://www.meineurl.de/artikel.php?news_id='.$array['id'].'</link> 
   </item> 
   '; 
   } 
   echo '</channel> 
   </rss>'; 
   ?>

Auf meiner Homepage habe ich ein script am laufen welches die letzten 5 Newstitel ausliest und anzeigt (bsp. von rss.php?catid=2)

PHP:
<?php
   
   $file = 'http://www.meineurl.de/rss.php?catid=10';
   
   $f = fopen($file,'r');
   $blub = fread($f,65535);
   fclose($f);
   
   $p = xml_parser_create();
   xml_parse_into_struct(&$p,&$blub,&$values,&$index);
   xml_parser_free($p);
   
   $pointer = 0;
   
   for ($i=0;$i<=sizeof($values);$i++) {
   if ($values[$i][tag]=='TITLE') {
   $linktitle[$pointer] = $values[$i][value];
   }
   
   if ($values[$i][tag]=='LINK') {
   $linkurl[$pointer] = $values[$i][value];
   }
   
   if ($values[$i][tag]=='DESCRIPTION') {
   $linkdesc[$pointer] = $values[$i][value];
   $pointer++;
   }
   }
   
   for ($i=0;$i<=4;$i++) { 
   echo '- <a href="'.$linkurl[$i].'">'.$linktitle[$i].'</a><br />';
   
   }
   
   ?>

Nun habe ich jedoch folgende 2 Probleme:

wenn die letzten 5 news auf der hp ausgegeben werden steht oben immmer an erster stelle:

- compu-zone.de Hardware Newsfeed
- news 2
- news 3
- news 4
- news 5

an 2 stelle, der ausgelesene News Titel ist immer zu der seite verlinkt auf der man sich grade befindet.

danach die news sind kreuz und quer verlinkt ... z.b. news 4 hat den link den eigenltich news 3 haben müsste usw.

Was ist falsch ?
 
Zuletzt bearbeitet:
Re: Probleme mit RSS News auslesen

Wieso greifst du nicht direkt auf die Datenbank zu sondern gehst den umständlichen Weg über den RSS-Feed?
 
Re: Probleme mit RSS News auslesen

Du parst wohl die Seitenbeschreibung mit und kommst da durcheinander:
Code:
<title>meineurl.de Hardware Newsfeed</title>
   <link>http://www.meineurl.de.de</link>
   <description>Die '.$_GET['id'].' aktuellsten News aus der Hardware-Branche</description>

Mit den XML-Funktionen hab ich mich bei PHP leider noch nicht grossartig beschäftigt...so dass ich dir eine Lösung liefern könnte...der Parser sollte sich auf jeden Fall auf die <item>'s beschränken.
Ich würd das Ganze wahrscheinlich aus Bequemlichkeit per RegExp lösen
 
Re: Probleme mit RSS News auslesen

@ Gumbo

über die datenbank krieg ich es garnicht hin .... aber werd es wohl auch nicht per rss hinkriegen. Häng jetzt schon seit 3 tagen fast durchgehend dadran
 
Re: Probleme mit RSS News auslesen

soo hab mal versucht direkt über die datenbank die letzten 5 Newstitel aus der kategorie 3 auszulesen, aber es funktioniert irgendwie nicht:

PHP:
<? 
 /* MySQL-Teil */ 
 $mysql['host'] = 'nicht angegeben'; // MySQL Host 
 $mysql['user'] = 'nicht angegeben'; // MySQL User 
 $mysql['passwort'] = 'nicht angegeben'; // MySQL Passwort 
 $mysql['tabelle'] = 'nicht angegeben'; // Tabelle aus der der Inhalt kommt
 $mysql['db'] = 'nicht angegeben'; // Datenbank Name  
 
 $query="SELECT * FROM artikelnews_news ORDER BY id DESC LIMIT 0, ".$_GET['id']." WHERE category=".$_GET['3']; 
 
 if($_GET['id']>10 || empty($_GET['id'])) $_GET['id']=5; 
 
 @mysql_connect($mysql['host'], $mysql['user'], $mysql['passwort']) or die('Verbindung zum MySQL Server kann nicht aufgebaut werden'); 
 @mysql_select_db($mysql['db']) or die('Datenbank kann nicht selektiert werden'); 
 
 $laenge = 300;
 
 $ergeb=mysql_query("SELECT * FROM artikelnews_news WHERE category=".$_GET['3']." ORDER BY id DESC LIMIT 0,".$_GET['catid']);
 
 echo '- <a href="http://www.compu-zone.de/artikel.php?news_id='.$array['id'].'">'.$array['news_title'].'</a><br />';
  
 ?>

Was ist alles falsch ?
 
Re: Probleme mit RSS News auslesen

Was im letzten Posting falsch ist, habsch jetzt nicht genau nachgeschaut.
Komisch kommen mir jedenfalls diese Sachen vor:
$array['id'] + $array['news_title'](was/wo ist $array)

$_GET['3'] :confused:

was genau verbirgt sich hinter den GET-Variablen, und in welcher Spalte der Tabelle steht was?


Hier mal nen Beispiel mit dem erwähnten RegExp:

Code:
<?php

function get_detail($item,$tag)
{
    preg_match('@<'.$tag.'>(.*)</'.$tag.'>@s',$item,$out);
    return preg_replace('@(<!\[CDATA\[|\]\]>)@','',$out[1]);
}

function get_rss($url,$limit)
{

    preg_match_all('@<item>(.*)</item>@Us',file_get_contents($url),$rss,PREG_SET_ORDER);
    echo '<ul>';
    for($i=0;$i<$limit;++$i)
        {
            echo '<li><a href="'.get_detail($rss[$i][0],'link').'">'.get_detail($rss[$i][0],'title').'</a><br>'.get_detail($rss[$i][0],'description').'</li>';
        }
    echo '</ul>';
}

//z.B.tutorials.de-Newsfeed 
get_rss('http://www.tutorials.de/external2.php?limit=5&orderby=lastpost',5);

?>

.....so funktioniert es dann: Test
(zur Demo gleich mal mit 5 verschiedenen Feeds;))
 
In welcher Reihenfolge stehen die News im File?
Die neusten zuerst oder zuletzt?
Wenn sie zuerst drinstehen kannst Du auf den Code von suye zurueckgreifen, ansonsten musst Du den Offset feststellen und dazu addieren. Oder $i mit einem hoeheren Wert, also der Anzahl der News - 5, beginnen lassen.

Der Hinweis von jaylibII bringt Dir nichts, da sich das auf eine SQL-Abfrage bezieht.
 
Zurück