Standard RSS-Reader Charset und max. Zeichen erweitert

Gesperrt
yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Standard RSS-Reader Charset und max. Zeichen erweitert

Beitrag von yodatortenboxer » So 22. Jun 2008, 08:18

Hiho,

ich habe einmal den Standard RSS-Reader um 2 Einstellungen erweitert.

Man kan nun im Inputbereich den Charset zwischen Standard (Contenido Einstellung), UTF-8 und iso-8859-1 und die max Ausgabe der Zeichen des RSS-Feeds eingeben.

Ich hatte bei ein paar RSS-Feeds Probleme mit den Umlauten bei dem Standardmodul wie zum Beispiel bei http://www.viruslist.com/de/rss/popularnews. Dort habe ich nun im Modul UTF-8 eingestellt und weil manschmal der Text zu lang war die Zeichenanzahl zum Beispiel auf 100, und nun funktioniert alles wunderbar.

INPUT

Code: Alles auswählen

?><?php
/**
* $RCSfile$
*
* Description: Display an RSS Feed. Module "Input".
*
* @version 1.0.0
* @author Timo Hummel, Andreas Lindner
* @copyright four for business AG <www.4fb.de>
*
* {@internal
* created 2005-09-30
* }}
*
* $Id$
*/

echo '<table>';
echo '<tr><td>'.mi18n("URL").'</td><td><input type="text" name="'."CMS_VAR[0]".'" value="'."CMS_VALUE[0]".'" style="width: 320px"></td></tr>';
echo '<tr><td>';
echo mi18n("RSS-Template auswählen").':</td><td><select name="CMS_VAR[1]" size="1" style="width: 320px">
<option value="">Nichts ausgewählt</option>';
$strPath_fs = $cfgClient[$client]["path"]["frontend"].'templates/';
$handle = opendir($strPath_fs);
while ($entryName = readdir($handle)) {
    if (is_file($strPath_fs.$entryName)) { 
        if ("CMS_VALUE[1]"==$entryName) {
            echo '<option selected value="'.$entryName.'">'.$entryName.'</option>';
        } else {
            echo '<option value="'.$entryName.'">'.$entryName.'</option>';
        }
    }
}
echo '</select></td></tr>';

echo '<tr><td>'.mi18n("Anzahl Einträge").'</td><td><input type="text" name="'."CMS_VAR[2]".'" value="'."CMS_VALUE[2]".'"</td></tr>';

echo '<tr><td>'.mi18n("Charset").'</td><td>';

$SelectCode="CMS_VALUE[3]";
?>
<select name="<?php echo "CMS_VAR[3]"; ?>">
    <option value="" <?php if($SelectCode==""){echo "selected=\"selected\"";} ?>>Standard</option>
    <option value="UTF-8" <?php if($SelectCode=="UTF-8"){echo "selected=\"selected\"";} ?>>UTF-8</option>
    <option value="iso-8859-1" <?php if($SelectCode=="iso-8859-1"){echo "selected=\"selected\"";} ?>>iso-8859-1</option>
</select>
<?php
echo '</td></tr>';

echo '<tr><td>'.mi18n("max. Zeichenanzahl").'</td><td><input type="text" name="'."CMS_VAR[4]".'" value="'."CMS_VALUE[4]".'"</td></tr>';

echo '</table>';

?><?php
OUTPUT

Code: Alles auswählen

<?php
/**
* $RCSfile$
*
* Description: Display an RSS Feed. Module "Output".
*
* @version 1.0.0
* @author Timo Hummel, Andreas Lindner
* @copyright four for business AG <www.4fb.de>
*
* {@internal
* created 2005-09-30
* }}
*
* $Id$
*/

cInclude("pear", "XML/Parser.php");
cInclude("pear", "XML/RSS.php");

$SelectCode="CMS_VALUE[3]";

if ("CMS_VALUE[0]" == "")
{
  $sFeed = "http://www.contenido.org/rss/de/news";
} else {
  $sFeed = "CMS_VALUE[0]";
}

if ("CMS_VALUE[2]" == "")
{
  $FeedMaxItems = 999;
} else {
    $FeedMaxItems = intval("CMS_VALUE[2]");
}

if ("CMS_VALUE[4]" == "")
{
  $FeedMaxChars = 999;
} else {
  $FeedMaxChars = intval("CMS_VALUE[4]");
}


/* Preparse feed for an encoding due to the poorly designed
   PHP XML parser */
$sFeedContent = substr(@file_get_contents($sFeed),0,1024);

$regExp = "/<\?xml.*encoding=[\"\'](.*)[\"\']\?>/i";
        
preg_match($regExp,trim($sFeedContent),$matches);

if ($matches[1])
{
  $rss =& new XML_RSS($sFeed, $matches[1]);
} else {
  $rss =& new XML_RSS($sFeed);
}

$rss->parse();

if (!isset($tpl) || !is_object($tpl)) {
    $tpl = new Template();
}
$tpl->reset();

$i = 0;
foreach ($rss->getItems() as $item)
{
    if ($i < $FeedMaxItems) {
        $tpl->set("d", "TITLE", htmlentities($item['title'],ENT_QUOTES,$SelectCode));
        $tpl->set("d", "LINK", htmlentities($item['link'],ENT_QUOTES,$SelectCode));
        $tpl->set("d", "DESCRIPTION", substr(htmlentities($item['description'],ENT_QUOTES,$SelectCode),0,$FeedMaxChars));
        $tpl->set("d", "READ_ON", mi18n("weiterlesen"));
        $tpl->next();
    }
    $i++;
}

$tpl->generate($cfgClient[$client]["path"]["frontend"]."templates/"."CMS_VALUE[1]");
?>
gruß yodatortenboxer

TV
Beiträge: 22
Registriert: Fr 30. Jun 2006, 08:42
Kontaktdaten:

Beitrag von TV » So 22. Jun 2008, 17:45

Hi yoda,

habe heute genau nach einer Ausgabenbeschränkung des RSS-Feeds gesucht und gleich deinen Post gefunden.

Vielen Dank dafür.
Ich musst jedoch einige Änderungen durchführen damit es bei mir funktioniert.

1. folgenden Code im Output ersetzten.

Code: Alles auswählen

$regExp = "/<\?xml.*encoding=[\"\'](.*)[\"\']\?>/i"; 
durch diesen Ersetzten

Code: Alles auswählen

$regExp = "/<\?xml.*encoding=[\"\'][\"\']\?>/i"; 
2. Folgene codefolge:

Code: Alles auswählen

{ 
    if ($i < $FeedMaxItems) { 
        $tpl->set("d", "TITLE", htmlentities($item['title'],ENT_QUOTES,$SelectCode)); 
        $tpl->set("d", "LINK", htmlentities($item['link'],ENT_QUOTES,$SelectCode)); 
        $tpl->set("d", "DESCRIPTION", substr(htmlentities($item['description'],ENT_QUOTES,$SelectCode),0,$FeedMaxChars)); 
        $tpl->set("d", "READ_ON", mi18n("weiterlesen")); 
        $tpl->next(); 
    } 
durch diese ersetzen.

Code: Alles auswählen

{ 
    if ($i < $FeedMaxItems) { 
        $tpl->set("d", "TITLE",utf8_decode($item['title'])); 
        $tpl->set("d", "LINK",htmlentities($item['link'],ENT_QUOTES)); 
        $tpl->set("d", "DESCRIPTION", substr(utf8_decode($item['description']),0,$FeedMaxChars));
        $tpl->set("d", "READ_ON", mi18n("mehr &rsaquo;")); 
        $tpl->next(); 
    }
Nun ist natürlich die Auswahl für UTF hinfällig, aber die Beschränkung funktioniert.

Danke und Gruß
Tobias

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Beitrag von yodatortenboxer » So 22. Jun 2008, 18:02

Supi :)
Zumindest hat es was gebracht es ins Forum zu stallen 8)

Neofred
Beiträge: 19
Registriert: Di 16. Mai 2006, 13:49
Kontaktdaten:

Beitrag von Neofred » Di 25. Nov 2008, 11:07

Hallo zusammen, ich habe Eure Beispiele eingebaut und endlich funktioniert das mit den Umlauten. Vielen Dank :wink:
Apache/2.2.3 (Debian) mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch4 mod_ssl/2.2.3 OpenSSL/0.9.8c

Jojoweb
Beiträge: 29
Registriert: Do 21. Apr 2005, 14:59
Kontaktdaten:

Beitrag von Jojoweb » Do 1. Jan 2009, 23:20

Hi!

Vielen Dank für die Überarbeitung des Moduls, jetzt funktioniert das mit den Umlauten bestens!

Allerdings werden Anführungszeichen im Feed als Fragezeichen ausgegeben.

Bekommt man das auch noch irgendwie korrigiert?

HellaSchu

Re: Standard RSS-Reader Charset und max. Zeichen erweitert

Beitrag von HellaSchu » Mi 22. Dez 2010, 13:46

Liebes Forum,

entschuldigung, dass ich dieses alte Thema noch mal ausgraben muss, aber das mit den Anführungszeichen ist ein echtes Problem, zumal wir zwei Blog laufen haben (deutsch und englisch) und im englischen Blog immer mal wieder im Titel Anführungszeichen stehen können. Im Teaser-Text habe ich kein Problem, aber im verlinkten Titel werden immer Fragezeichen dargestellt. Kann man da noch was machen? Ich habe schon sämtliche Lösungsansätze ausprobiert, neue Versionen runter geladen und das Forum durchforsted etc. Leider alles ohne Ergebnis.

Wer also eine Lösung hat: Ich wäre sehr froh darüber.

Danke & frohe Weihnachten,
Hella

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Standard RSS-Reader Charset und max. Zeichen erweitert

Beitrag von Spider IT » Mi 4. Mai 2011, 10:22

Nimmt alternativ lieber diesen RSS-Reader: /viewtopic.php?f=60&t=23671

Gruß
René

Gesperrt