[PHP] RSS-Auslesen "umdrehen"

BartTheDevil89

Devilution Media
ID: 87739
L
2 Mai 2006
3.960
103
Hi, ich möchte folgende Datei auslesen:

https://rss.golem.de/rss.php?tp=av&feed=RSS2.0

Das funktioniert auch, hab mir jetzt dieses Script gebastelt:

PHP:
        $xml_parser = xml_parser_create();                            
        $daten      = implode (file ("https://rss.golem.de/rss.php?tp=av&feed=RSS2.0"), "");                  
        xml_parse_into_struct ($xml_parser, $daten, &$werte, &$index); 
        xml_parser_free ($xml_parser);
			$count = 1;
			$titel = "";
			$link = "";
			$text = "";
            foreach ($werte as $w) {  		
				if ($w["tag"] == "TITLE" and $count != 3){
				$titel = $w['value'];
				}elseif($w["tag"] == "LINK" and $count != 9 and $count != 25){
				$link = $w['value'];
				}elseif($w["tag"] == "DESCRIPTION" and $count != 6 and $count != 28){
				$text = $w['value'];
				$news_newss = $db -> query_first("SELECT COUNT(*)FROM table WHERE link='$link'");
				if ($news_newss[0]!= 0){
				$db->unbuffered_query ("UPDATE table SET name='$titel',text='$text' WHERE link='$link'");
                echo "Führe das Update aus...<br>";
				}else{
				$db->query("INSERT INTO table(userid,name,text,link)VALUES ('1','$titel','$text','$link')");
				echo "Trag die Daten ein<br>";
				}
				}
				$count++;
            }

Also das Prinzip ist, dass er die Daten ausließt und ich dann anhand der namen der Zeile mir jeweils die News zusammenbastle(diese $count != sind Ausnahmen, wo der tag nochmal in der Datei verwendet wird aber zu keinem Eintrag gehört; also nicht wundern, das ist einfach nur, dass das ausgelassen wird) und wenn ich die letzte info des Eintrages habe die Daten eintrage. Dann macht er das mit dem nächsten Eintrag....

Das funktioniert auch alles ohne Probleme. Nur ein Problem hab ich und zwar wird das ganze ja so ausgelesen, dass der neuste Eintrag zuerst verarbeitet wird. Dadurch wird ja beim eintragn zum Beispiel in die Datenbank der neuste Beitrag als erstes eingetragen und der älteste als letztes....somit passt die Reihenfolge nichtmehr.

Sehr ihr ne Möglichkeit das so zu verändern, dass er erst mir eventuell die Datensätze zusammenbaut und ich sie dann in der anderen Reihenfolge verarbeite?
 
moin,

hab jetzt nicht so viel Ahnung in php, aber will trotzdem mal nen Ansatz reinbringen.

Also falls es gehen sollte, dann nur über den xml-Tag <link>.
Denn dieser immer fortlaufend und hat immer die gleiche Struktur.
Man könnte auch <pubDate> nehmen, aber da wäre zu viel wegzumachen...
Also der <link> sieht immer so aus:
<link>https://www.domain.de/0712/56616.html</link>
Mein Gedanke ist, den Inhalt des Tags auszulesen und dann alles vor und nach der 56616 wegzufiltern (also " https://www.domain.de/*/ " und " .html ").
Damit hätte man die fortlaufende Nummer der Nachrichten.
Diese müsste man nur noch umgekehrt sortieren und das war ja gefragt :)

So, die Umsetzung in php muss jetzt jemand anderes übernehmen, ich kann nur das Konzept geben ;)


MfG kbot

Edit: es geht scheinbar auch mit dem <guid>-Tag, der hat irgendwie auch immer die gleichen Inhalte...
 
Entweder ganz primtiv nach den Links sortieren beim auslesen, oder man machts ordentlich und verarbeitet das Datum mit und sortiert danach.
 
Naja, wie ich es auslese ist ja verständlich, das hab ich ja alles hinbekommen....aber hier mal die vereinfachte Form, wie das da oben abläuft:

dieser String ist da: "1,auto,link1,2,brum,link2,3,boot,link3.."

Also immer id, name, link, id, name, link.....das script zählt im prinzip durch($count zählt einfach die Position:

if ($count == 1 or $count == 4 or $count == 7){
$id = $data;
}
if ($count == 2 or $count == 5..){
$name = $data;
}
if ($count == 3 or $count == 6..){
$link = $data;
INSERT into table...id = $id, name = $name, link = $link..
}

Also er nimmt immer die zusammengehörigen und trägt sie dann ein, sobald er die letzte variable zu hat.

Aber jetzt möchte ich eben den Insert erst später machen lassen und zwar anders herum...also gibts ne möglichkeit diese 3 Daten, die da immer rauskommen zu speichern (sodass erkenntlich ist, welche 3 Daten zusammengehören) und dann diese 3-Datensätze nochmal aufzurufen, nur eben anders herum. (denn dann könnte ich ja einfach mein INSERT dort machen)
 
Sortier doch einfach beim Auslesen der Datenbank! Was denkst du was passiert wenn du irgendwann mal ein paar Datensätze löschst? Dann werden neue Datensätze nicht mehr ans Ende der Tabelle gesetzt sondern an die Stellen frei gewurden sind. Und bei Golem brauchst du noch nichtmal was ändern... die Links sind so gestalltet dass diese einfach Sortieren kannst und eine chronologische Reihnfolge erhälst.

Ansonsten pack die Werte in ein Array und durchlauf den Array danach rückwärts und mach dabei deine Inserts.