Forum

Google Calendar XML-Feed einbinden / magpie RSS



 
Neues Thema eröffnen   Neue Antwort erstellen    REDAXO Forum Foren-Übersicht -> Allgemeines [R4]
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
cukabeka



Anmeldedatum: 30.05.2006
Beiträge: 498
Wohnort: Aschaffenburg

BeitragVerfasst am: Mi Dez 09, 2009 3:32 pm
Titel: Google Calendar XML-Feed einbinden / magpie RSS
Antworten mit Zitat
hi!

ich möchte gerne den veranstaltungskalender etwas komfortabler machen und dazu google calendar verwenden.

Ziel ist etwa so etwas:
http://drupal.org/project/gcal_events

Anscheinend gibt es dazu schon eine grundlegende lösung, nämlich diese hier:
http://james.cridland.net/code/google-calendar.html
leider basiert diese auf simplepie. das gibt es aber noch nicht für redaxo. hat jemand eine idee, oder einen tipp, wie man simplepie auf redaxo portieren kann? wie mache ich daraus ein addon? tipps, hinweise etc immer willkommen..Wink

grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
darwin



Anmeldedatum: 02.01.2007
Beiträge: 944
Wohnort: LA

BeitragVerfasst am: Do Dez 10, 2009 8:40 am
Titel:
Antworten mit Zitat
HI,
ich hab das Ganze mal als Modul gestrickt und simplepie einfach
in das redaxo/include/ mitreingepackt.

Eingabe:
Code:
<?php
/**
*==================================================
* REDAXO-Modul: RSS-Feed einfuegen
* Bereich: Eingabe
* Version: 0.2
* Redaxo Version: 4.1
*
* Einstellungs Moeglichkeiten
* - Link zu externen RSS-Feed
* - Titel des RSS
* - Anzahl der anzuzeigenden RSS-Feeds
*
* Erforderliche Addons/Scripts:
* http://simplepie.org/
*
* API-Referenz
* http://simplepie.org/wiki/reference/simplepie/start
*
* Install:
* /redaxo/include/simplepie/
*
*================================================== */
?>

<strong>Link zum RSS-Feed:</strong><br />
<input type=text size=80 name=VALUE[1] value="REX_VALUE[1]"><br /><br />
<strong>Überschrift im Artikel:</strong><br />
<input type=text size=80 name=VALUE[2] value="REX_VALUE[2]"><br /><br />
<strong>Anzahl der Artikel pro Seite:</strong><br />
<input type=text size=4 name=VALUE[3] value="REX_VALUE[3]">


Ausgabe:
Code:

<?php
/**
*==================================================
* REDAXO-Modul: RSS-Feed einfuegen
* Bereich: Ausgabe
* Version: 2
* Redaxo Version: 4.1
*
* Erforderliche Addons/Scripts:
* http://simplepie.org/
*
* API-Referenz
* http://simplepie.org/wiki/reference/simplepie/start
*
* Install:
* /redaxo/include/simplepie/
*
*================================================== */

// ini_set('zend.ze1_compatibility_mode', 0);
include_once($REX['INCLUDE_PATH'].'/simplepie/simplepie.inc');


$feedurl   = "REX_VALUE[1]";
$feedtitel   = "REX_VALUE[2]";
$artPerSite = "REX_VALUE[3]";


////////////////////////////////////////////////////////////////
if (!function_exists('returnImage')) {
   function returnImage ($text)
   {
      $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
      $pattern = "/<img[^>]+\>/i";
      preg_match($pattern, $text, $matches);
      $text = $matches[0];
   
      return $text;
   }
}

if (!function_exists('scrapeImage')) {
   function scrapeImage($text)
   {
      $pattern = '/src=[\'"]?([^\'" >]+)[\'" >]/';
      preg_match($pattern, $text, $link);
      $link = $link[1];
      $link = urldecode($link);
   
      return $link;
   }
}

if (!function_exists('microtime_float')) {
   function microtime_float()
   {
      if (version_compare(phpversion(), '5.0.0', '>='))
      {
         return microtime(true);
      }
      else
      {
         list($usec, $sec) = explode(' ', microtime());
         return ((float) $usec + (float) $sec);
      }
   }
}

$start = microtime_float();
////////////////////////////////////////////////////////////////


// Create a new instance of the SimplePie object
$feed = new SimplePie();
$feed->set_feed_url($feedurl);
$feed->set_cache_location($REX['INCLUDE_PATH'].'/simplepie/cache');
$feed->set_output_encoding('ISO-8859-1');
// $feed->handle_content_type();

$feed->init();

// If we have an error, display it.
if ($feed->error())
{
   echo '<div class="sp_errors">' . "\r\n";
   echo '<p>' . htmlspecialchars($feed->error()) . "</p>\r\n";
   echo '</div>' . "\r\n";
}

// Set our paging values
$start = (isset($_GET['start']) && !empty($_GET['start'])) ? $_GET['start'] : 0; // Where do we start?
$length = (isset($_GET['length']) && !empty($_GET['length'])) ? $_GET['length'] : $artPerSite; // How many per page?
$max = $feed->get_item_quantity();

$out = '';
$out .= '<div class="RSS_Feed_extern">'. "\n";
$out .= '<h1 class="RSS_Titel">'.$feedtitel.'</h1>';

if ($feed->data) {
   foreach($feed->get_items($start, $length) as $item):
      
      $feed = $item->get_feed();
      
      // Nur erstes Bild
      $image    = returnImage($item->get_content());
      $image    = scrapeImage($image);
      
      
      $title    = $item->get_title();
      $link    = $item->get_permalink();
      $desc   = $item->get_description();
      $date   = $item->get_date("d.m.Y");
   
      // $item->get_content();
      
      // leere Bilder rausfiltern
      if($image != "") {
         $image   = '<img src="'.$image.'" alt="'.$title.'" title="'.$title.'" width="100" height="85" />';
      } else {
         $image = '';
      }
      
      
      $out .= '<div class="RSS_Box">' . "\n";
      
      if($image != '') {
         $out .= '  <div class="RSS_Bild" style="width:'.$bildW.'px;">' . "\n";
         $out .= '    <a href="'.$link.'" target="_blank" title="'.$title.'">'.$image.'</a>' . "\n";
         $out .= '  </div>' . "\n";
      }
            
      if($image == '') {
         $out .= '  <div class="RSS_Bild" style="width:'.$bildW.'px; border: 0px;">' . "\n";
         $out .= '  </div>' . "\n";
      }
      
      $out .= '  <div class="RSS_TextBox" style="width:'.$txtW.'px;">' . "\n";
      $out .= '    <p class="Datum">'.$date.'</p>';
      $out .= '    <p class="Titel"><a href="'.$link.'" target="_blank" title="'.$title.'">'.$title.'</a></p>' . "\n";
      $out .= '    <p class="Desc">'.$desc.'</p>' . "\n";
      $out .= '   </div>' . "\n";
      $out .= '</div>' . "\n";
      $out .= '<div class="clear"></div>'. "\n";
      
            
   endforeach;
} else {
   $out .= '<em>Kein Zugriff auf den RSS-Feed: '.$feedurl.' zur Zeit möglich!</em>';
}

$out .= '</div>' . "\n";
$out .= '<div class="clear"></div>'. "\n";

// Frontend
if (!$REX['REDAXO']) {
   print $out;
}


// Navigation / Pagination
$next = (int) $start + (int) $length;
$prev = (int) $start - (int) $length;
      
// NEXT link
$nextlink = '<a href="'.rex_getUrl($articleId).'?start=' . $next . '&amp;length=' . $length . '">N&auml;chste Seite &raquo;</a>';
if ($next >= $max)
{
   $nextlink = '<span style="color: #CCC;">N&auml;chste Seite &raquo;</span>';
}
      
// PREVIOUS link
$prevlink = '<a href="'.rex_getUrl($articleId).'?start=' . $prev . '&amp;length=' . $length . '">&laquo; Vorherige Seite</a>';
if ($prev < 0 && (int) $start > 0)
{
   $prevlink = '<a href="'.rex_getUrl($articleId).'?start=0&amp;length=' . $length . '">&laquo; Vorherige Seite</a>';
}
else if ($prev < 0)
{
   $prevlink = '<span style="color: #CCC;">&laquo; Vorherige Seite</span>';
}
      
// Numbers
$begin = (int) $start + 1;
$end = ($next > $max) ? $max : $next;

$navOut = '';
$navOut .= '<hr/>';
$navOut .= '<p style="float: left; width: 235px;">Feed '.$begin.' &ndash '.$end.' ('.$max.')</p>';
$navOut .= '<p style="float: right; width: 235px;">'.$prevlink.' | '.$nextlink.'</p>';
$navOut .= '<div class="clear"></div>'. "\n";
/*
$navOut .= '<a href="'.rex_getUrl($articleId).'?start='.$start.'&amp;length=5">5</a>, ';
$navOut .= '<a href="'.rex_getUrl($articleId).'?start='.$start.'&amp;length=10">10</a>, ';
$navOut .= 'or <a href="'.rex_getUrl($articleId).'?start='.$start.'&amp;length=20">20</a>';
*/
      
// Frontend
if (!$REX['REDAXO']) {
   print $navOut;
}
   
?>


sollte laufen ... Wink

ansonsten einfach mal simplepie genauer ansehen:
http://simplepie.org/
http://simplepie.org/wiki/reference/simplepie/start

grz. Chris
_________________
Pferdefreunde/Pferdeführer der Landshuter Hochzeit 1475
### Mein Wunschzettel ###


Zuletzt bearbeitet von darwin am Fr Dez 11, 2009 9:04 am, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
cukabeka



Anmeldedatum: 30.05.2006
Beiträge: 498
Wohnort: Aschaffenburg

BeitragVerfasst am: Do Dez 10, 2009 7:55 pm
Titel:
Antworten mit Zitat
Wow, großartig, das löst mein Kalenderproblem. Werde ich mir mal anschauen. Vielen Dank!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
darwin



Anmeldedatum: 02.01.2007
Beiträge: 944
Wohnort: LA

BeitragVerfasst am: Fr Dez 11, 2009 9:02 am
Titel:
Antworten mit Zitat
joa,
berichte uns doch dann obs funktioniert Wink ...
ich nochwas daran geändert, da noch nein paar
"unwichtige" Abfragen drin waren ... ist oben bereits geändert !! ..

Danke. grz. Chris
_________________
Pferdefreunde/Pferdeführer der Landshuter Hochzeit 1475
### Mein Wunschzettel ###
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
Sabse



Anmeldedatum: 01.04.2008
Beiträge: 77
Wohnort: Wörth am Rhein

BeitragVerfasst am: Di Dez 15, 2009 12:47 pm
Titel:
Antworten mit Zitat
Hallo Chris,

das ist das erste RSS-Auslesemodul das keine Fehlermeldungen im Backend verursacht, schon mal vielen Dank dafür.

Ich habe aber leider damit das Problem, dass der Pfad zu dem Feed, mit der ich es ausprobieren wollte, ein "=" enthält, dieses wird in "%3D" umgewandelt, und die Datei wird dann logischerweise nicht gefunden.
Kann man da irgendwas machen?

Feeds ohne "=" funktionieren, es sei denn sie sind nicht utf-8 codiert, dann werden die Umlaute nicht angezeigt.

Gruß, Sabrina
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
darwin



Anmeldedatum: 02.01.2007
Beiträge: 944
Wohnort: LA

BeitragVerfasst am: Di Dez 15, 2009 1:16 pm
Titel:
Antworten mit Zitat
Hallo Sabse,
schick mir den Link doch per PM, damit ich diesen testen kann.
Sollte eigentlich so funktionieren.

grz. Chris
_________________
Pferdefreunde/Pferdeführer der Landshuter Hochzeit 1475
### Mein Wunschzettel ###
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
Sabse



Anmeldedatum: 01.04.2008
Beiträge: 77
Wohnort: Wörth am Rhein

BeitragVerfasst am: Di Dez 15, 2009 10:15 pm
Titel:
Antworten mit Zitat
Darwin hat mir per PM Lösungsmöglichen geschickt, hier das Ergebnis:


Der folgende Hinweis hilft, wenn man einen ISO-kodierten Feed in einer UTF-8 kodierten Seite anzeigen möchte:

Code:
$feed->set_output_encoding('ISO-8859-1');


ändern in

Code:
$feed->set_output_encoding('UTF-8');



Das andere Problem bekomme ich nicht gelöst. Ich habe das Modul auch mal in die ISO-kodierte Redaxo-Demo Installation eingebaut, da passiert genau das gleiche.

Das Problem tritt anscheinend auf, wenn man versucht, einen Feed von einer Wordpress Seite auszulesen, bei der kein URL-rewriting verwendet wird (?feed=rss2). Andere Feeds mit "=" funktionieren nämlich, z.B. von Blogspot-Seiten, die haben das Format "default?alt=rss".

Vielleicht hilft diese Erkenntnis ja irgendwie weiter.

Gruß, Sabrina.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    REDAXO Forum Foren-Übersicht -> Allgemeines [R4] Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group, Deutsche Übersetzung von phpBB.de