Sie sind nicht angemeldet.

1

Montag, 29. Dezember 2008, 14:35

RSS Feed für PPG

Hallo!
Meld mich nocheinmal mit einem neuen Plugin für die wunderbare Panoramagalerie! Diesmal hab ich ein Plugin zur Erstellung und Einbindung eines RSS Feed in die PPG! Funktioniert leider wieder nur mit der SQL Datenbank Version, werd mir das aber auch vielleicht ansehen, wenn ich das Keyword Plugin überarbeite. So, und hier kommt der Code:

Neue Datei "63-RSS.inc.php" im inc Ordner erstellen:

<!-- Modul 63 -->
<?php
// (c) 2008 CHCH.cc - Christian Chladek
// funktioniert zur Zeit nur mit den deutschen SQL Datenbankeinträgen

$feedname ="Feedüberschrift"; // Hier den Namen für den Feed eintragen
$feeddescription ="Hier gibt's meine Panoramen in praktischer RSS Form!"; // Hier die Beschreibung des Feeds
$feedurl ="http://adresse.at/ppgOrdner/";; //Hier URL des PPG Ordners

$linksql = mysql_connect("$Server", "$Benutzername", "$Passwort") or die("Could not connect.");
mysql_select_db($Datenbankname, $linksql);
$table_name = 'daten';

$query = "select * from " . $table_name . " order by Region desc ,Name asc";
$result = mysql_query($query, $linksql) or die("Could not complete database query");
$num = mysql_num_rows($result);
$i = -1;

if ($num != 0) {

 $file= fopen("feed.xml", "w");
 $_xml ="<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\r\n";
 $_xml .="<rss version=\"2.0\">\r\n";

 $_xml .="<channel>\r\n";

 $_xml .="<title>$feedname</title>\r\n";
 $_xml .="<description><![CDATA[$feeddescription]]></description>\r\n";
 $_xml .="<link>" . $feedurl . "</link>\r\n\r\n";
 
 while ($row = mysql_fetch_array($result)) {
$i++;
  if ($row["Name"] && $row["Name"] != "2-Name-") {

  $datumx = explode(".", $row[Datum]);
  $datumy = date("D, d M Y", @mktime(0, 0, 0, $datumx[1], $datumx[0], $datumx[2]));

  $_xml .="\t<item>\r\n";
  $_xml .="\t\t<title>" . $row["Name"] . "</title>\r\n";
  $_xml .="\t\t<pubDate>$datumy 15:00:00 +0100</pubDate>\r\n";  // Feed-Einträge haben immer die Uhrzeit 15:00
  $_xml .="\t\t<description><![CDATA[<img src=\"" . $feedurl . "panos/thumbs/" . $row["Link"] . ".jpg\"  alt=\"\" title=\"" . $row["Name"] . "\" /><br /><br /> " . $row["de_Kurztext"] . "<br /><br />Datum: " . $row["Datum"] . "<br />Region: " . $row["Region"] . "<br />GPS: " . $row["googlemappos"] . "<br /><br />]]></description>\r\n";
  $_xml .="\t\t<link><![CDATA[" . $feedurl . "index2.php?datei=" . $row["Link"] . "&version=Equirectangular&player=krplayer]]></link>\r\n";
  $_xml .="\t\t<guid><![CDATA[" . $feedurl . "index2.php?datei=" . $row["Link"] . "&version=Equirectangular&player=krplayer]]></guid>\r\n"; 
  $_xml .="\t</item>\r\n\r\n";
 } else {
  $_xml .="";
 }
}

$_xml .="</channel>";
$_xml .="</rss>";
fwrite($file, $_xml);

fclose($file);

echo " <!--XML has been written.  <a href=\"feed.xml\">View the XML.</a>-->";
//}
} else {
 echo "No Records found";
echo "\r\n";?>



In der aktuellen layoutX.inc.php im layouts Ordner folgenden Schnipsel nach "<!-- Neue Panoramen ////////////////////////////////////// -->" eintragen:

<?php include('inc/63-RSS.inc.php'); ?>

und das innerhalb des <head></head> Teils in der layoutX.inc.php

<link rel="alternate" type="application/rss+xml" title="CHCH.cc Panoramic" href="http://chch.cc/panoramic/feed.xml"; /> 



Zuletzt im Ordner, in dem die PPG liegt noch die Datei 

"feed.xml" 

erstellen und die Schreibrechte "777" geben.


Ich hoff, das ist wieder was, was ein paar von euch gebrauchen können! Nachdem ich nämlich selbst sehr gerne Panorama feeds abonniere, wollt ich auch, dass meine Panoramen in RSS Form gelesen werden können. 

Schöne Grüße,
Christian
"Warum sind denn da alle Linien so krumm?!"

panoramaleben

Profi-User

Beiträge: 204

Wohnort: Waizenreuth, BT

Beruf: Arborist

  • Nachricht senden

2

Montag, 29. Dezember 2008, 16:25

Nach so einer Möglichkeit hatte ich schon mal gesucht. Bisher aktualisiere ich meinen Feed mit ListGarden. Das hat natürlich den Vorteil, dass ich dort individuelle Texte schreiben kann. Eine automatische Lösung sorgt aber für weniger Arbeit. Ich werde das gleich mal Testen.

panoramaleben

Profi-User

Beiträge: 204

Wohnort: Waizenreuth, BT

Beruf: Arborist

  • Nachricht senden

3

Montag, 29. Dezember 2008, 16:43

Danke, funktioniert.

Allerdings wäre es schön, wenn nur die letzten x Einträge, am besten absteigend nach Position oder id, ausgegeben werden.

edit: Sortierung hab' ich entdeckt

Auf jeden Fall wieder ein sehr nützliches Plugin.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »panoramaleben« (29. Dezember 2008, 16:51)


panoramaleben

Profi-User

Beiträge: 204

Wohnort: Waizenreuth, BT

Beruf: Arborist

  • Nachricht senden

4

Montag, 29. Dezember 2008, 21:37

Sorry, ich schon wieder

Die Sortierung habe ich jetzt nach meinen Bedürfnissen angepasst. Ein Problem in Newsreadern könnte es evtl. noch geben, wenn Bilder älteren Datums veröffentlicht werden bzw. allgemein wenn das Bilddatum mit dem Veröffentlichungsdatum nicht übereinstimmt. Ich habe das jetzt mal so gelöst, in dem ich in eine zusätzliche SQL-Spalte das VÖ-Datum eintrage.

5

Montag, 29. Dezember 2008, 22:11

Stimmt! Es wird das Datum, das auch bei den Panoramen in normaler Ansicht dabeisteht verwendet und zur Reihung der Einträge verwendet. Das hab ich mich eh auch schon selbst einmal gefragt, welches Datum das eigentlich darstellen soll: das der Aufnahme des Panoramas oder das der Veröffentlichung auf der Seite. 
Ist aber eine gute Idee, eine zusätzliche Spalte in der Datenbank für's Veröffentlichen anzulegen.
Und freut mich sehr, dass das Plugin auch schon genutzt wird!!!
Dann macht das Programmieren nämlich gleich noch mehr Spaß!

"Warum sind denn da alle Linien so krumm?!"

willybear

Administrator

Beiträge: 663

Wohnort: Bautzen

Beruf: Panograf

  • Nachricht senden

6

Dienstag, 30. Dezember 2008, 09:57

Ich habe das jetzt mal so gelöst, in dem ich in eine zusätzliche SQL-Spalte das VÖ-Datum eintrage.
Würde es nicht sinn machen nach der ID zu sortieren? Da kann man sich das mit dem zusätzlichen VÖ-Datum sparen.

7

Dienstag, 30. Dezember 2008, 12:10

Die Idee hab ich auch schon gehabt, aber so ein RSS Feed braucht ein echt mühsam genaues Datum für jeden Eintrag. Und das Datum kann man nicht wirklich aus der Sortierung mit der ID herauskitzeln. Deshalb muss man entweder das Datum nehmen, das sowieso schon verwendet wird oder eine neue Zeile mit Veröffentlichungsdatum anlegen und das Plugin halt dementsprechend umprogrammieren. 
"Warum sind denn da alle Linien so krumm?!"

panoramaleben

Profi-User

Beiträge: 204

Wohnort: Waizenreuth, BT

Beruf: Arborist

  • Nachricht senden

8

Dienstag, 30. Dezember 2008, 17:18

Kurze Frage:
Ich habe jetzt in der Datenbank die Spalte VO-Datum und rufe die mit
  $_xml .="\t\t<pubDate>" . $row["VO-Datum"] . "</pubDate>\r\n"; 
ab. Das Datum ist im Format 2008-12-30 17:02:08 gespeichert. Wie kann ich das im Script als Thu, 30 Dec 2008 17:02:08 GMT umwandeln/ausgeben?

9

Dienstag, 30. Dezember 2008, 18:25

Hallo Panoramaleben,
folgendes kurzes Code-Segment sollte das schnell erledigen:

$explodedDate = explode(" ", $row["VO-Datum"]);
$datez = explode("-", $explodedDate[0]);
$timez = explode(":", $explodedDate[1]);

$_xml .="\t\t<pubDate>" . date("D, d M Y H:i:s O", @mktime($timez[0], $timez[1], $timez[2], $datez[1], $datez[2], $datez[0])) . "</pubDate>\r\n";

LG
Andreas

panoramaleben

Profi-User

Beiträge: 204

Wohnort: Waizenreuth, BT

Beruf: Arborist

  • Nachricht senden

10

Dienstag, 30. Dezember 2008, 18:35

Herzlichen Dank, funktioniert.

11

Dienstag, 30. Dezember 2008, 18:36

Eine alternative Lösung zur stabilen und für RSS geeigneten Sortierung habe ich mir heute überlegt. Sortiert wird absteigend nach ID und die Uhrzeit wird nun nicht mehr fest auf 15:00:00 gestellt, sondern auf 15:00:59. Sollten mehrere Panoramen am selben Tag entstanden sein, wird die Uhrzeit um 1 Sekunde erniedrigt.

Ein paar kleine Voraussetzung für den erfolgreichen Einsatz gibt es jedoch:

- es dürfen max. 59 Panoramen an einem Tag erstellt worden sein
- IDs sollten mit dem Erstellungsdatum des Panoramas kongruieren, d.h. die IDs für einen Erstellungstag sollten nicht durch einen anderen Tag unterbrochen werden. Sollte das vorkommen, kann man dem mit ein wenig PHP-Code auch problemlos Herr werden. Für mich ist das nicht nötig gewesen, ich poste nie Panoramen vom Tag x, nachdem ich schon Bilder vom Tag y gepostet habe (x < y).Hier nun der Code.

<!-- Modul 63 -->
<?php
    // (c) 2008 CHCH.cc - Christian Chladek
    // funktioniert zur Zeit nur mit den deutschen SQL Datenbankeinträgen

    $feedname ="awokenMIND - Panoramagalerie"; // Hier den Namen für den Feed eintragen
    $feeddescription ="interaktive 360° Panoramen"; // Hier die Beschreibung des Feeds
    $feedurl ="http://panoramen.awokenmind.de/";;; //Hier URL des PPG Ordners

    $linksql = mysql_connect("$Server", "$Benutzername", "$Passwort") or die("Could not connect.");
    mysql_select_db($Datenbankname, $linksql);

    $query = "select * from `daten` order by `id` desc";
    $result = mysql_query($query, $linksql) or die("Could not complete database query");
    $num = mysql_num_rows($result);
    $i = -1;

    if ($num != 0) {
        $file= fopen("feed.xml", "w");
        $_xml ="<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\r\n";
        $_xml .="<rss version=\"2.0\">\r\n";

        $_xml .="<channel>\r\n";

        $_xml .="<title>$feedname</title>\r\n";
        $_xml .="<description><![CDATA[$feeddescription]]></description>\r\n";
        $_xml .="<link>" . $feedurl . "</link>\r\n\r\n";

        $datumz = "";
        $k = 1;
        while ($row = mysql_fetch_array($result)) {
            $i++;
            if ($row["Name"] && $row["Name"] != "2-Name-") {
                if($datumz == $row["Datum"]) $k++;
                else {
                    $datumz = $row["Datum"];
                    $k = 1;
                }
               
                $datumx = explode(".", $row[Datum]);
                $datumy = date("D, d M Y H:i:s O", @mktime(15, 0, (60-$k), $datumx[1], $datumx[0], $datumx[2]));
               
                $_xml .="\t<item>\r\n";
                $_xml .="\t\t<title>" . $row["Name"] . "</title>\r\n";
                $_xml .="\t\t<pubDate>$datumy</pubDate>\r\n";
                $_xml .="\t\t<description><![CDATA[<a href=\"" . $feedurl . "index.php?datei=" . $row["Link"] . "&region=" . $row["Region"] . "&version=Quicktime&player=auto\"><img src=\"" . $feedurl . "panos/thumbs/" . $row["Link"] . ".jpg\"  alt=\"\" title=\"" . $row["Name"] . "\" /></a><br /> " . $row["de_Kurztext"] . "<br /><br />Datum: " . $row["Datum"] . "<br />Region: " . $row["Region"] . "<br />GPS: " . $row["googlemappos"] . "<br /><br />]]></description>\r\n";
                $_xml .="\t\t<link><![CDATA[" . $feedurl . "index.php?datei=" . $row["Link"] . "&region=" . $row["Region"] . "&version=Quicktime&player=auto]]></link>\r\n";
                $_xml .="\t\t<guid><![CDATA[" . $feedurl . "index.php?datei=" . $row["Link"] . "&region=" . $row["Region"] . "&version=Quicktime&player=auto]]></guid>\r\n";
                $_xml .="\t</item>\r\n\r\n";
            }
            else $_xml .="";
        }

        $_xml .="</channel>";
        $_xml .="</rss>";
        fwrite($file, $_xml);
        fclose($file);

        echo " <!--XML has been written.  <a href=\"feed.xml\">View the XML.</a>-->";
    }
    else echo "No Records found";
    echo "\r\n";
?>

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »awokenMIND« (30. Dezember 2008, 18:49)


12

Dienstag, 30. Dezember 2008, 18:54

Cool! Das freut ich, dass sich da so viel tut! Die Idee mit der Sortierung durch die ID und der Zeit find ich auch gut! Werd schaun, dass ich beide Versionen zusammenfügen kann und man dann mit einer Variable zwischen den 2en herumschalten kann. Dann wär das find ich fertig…
Dankeschön für's weiterentwickeln!
"Warum sind denn da alle Linien so krumm?!"