Originally posted by h3ll
View Post
foreach - Schleifen und arrays
Collapse
X
-
Originally posted by Melewo View PostBeim Webspace habe ich aber einige bei, die noch bei PHP Version 5.2 sind, so bei Strato, all-inkl und noch bei einem anderen Hoster. Könnte mir vorstellen, dass es nicht nur mir so geht.
All-inkl unterstützt sogar PHP 5.4.
Also die Hoster als Ausrede zu verwenden ist ganz billig. Wenn man wirklich einen Hoster haben sollte, der keine zeitgemäße PHP-Version anbietet, dann ist das höchstens ein Grund zum Wechseln.Last edited by h3ll; 08-06-2013, 21:58.
Comment
-
Ja, aber nur von mir kann ich nicht ausgehen, ich benutze die Scripts ja nicht, ich teste die ja nur. Wie jetzt so ein Script für Feeds, für den eigenen Bedarf habe und benötige ich nur ein kleines, welches nur für eigene Feeds ausgelegt ist, mit denen es eh keine Probleme gibt. Doch so zum Download, der Aufwand hält sich in Grenzen, wenn ich da noch eine Variante anbiete. Da kommt dann ein Hinweis mit zu, für welche PHP Version geeignet und wenn der größte Teil umgestellt ist, ein deutlicher Hinweis: Bitte nicht mehr verwenden, nur noch für Anschauungszwecke.
Comment
-
Originally posted by newbie1955 View PostDer focus-feed
FOCUS Online - Politik-News
z. B. ist nicht valide, das habe ich gemerkt und werde auch noch ein wenig forschen, wie man das ausgleichen kann.
PHP Code:if (($data = file_get_contents($seite)) != false) {
$data = preg_replace("/></", ">\n<", $data);
Comment
-
Hallo
@Melewo, wenn ich das einfüge, kommt trotzdem bei Focus nicht, habe ich was übersehen? Hier der Code mit Deinem Einschub, aber ausgegeben wird nix.
PHP Code:<?php
/*------------------------------------------------------------------------------------------------------------------
Beschreibung: Feedreader für RSS- und Atom-Feeds (http://www.coder-welten.de/projekte/feedreader.htm)
Autor: Horst Müller
Version: Beta 0.2
Lizenz: MIT-Lizenz (http://de.wikipedia.org/wiki/MIT-Lizenz) - Der Autor muss in einem Urheberrechtsvermerk
erwähnt werden.
-------------------------------------------------------------------------------------------------------------------
*/
ini_set("user_agent", "Mozilla/5.0 (compatible; Feedreader/PHP +".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].")");
header("Content-Type: text/html; charset=UTF-8");
error_reporting(E_ALL); // Der Wert kann nach Erprobung auf 0 gesetzt werden.
$seite = "http://rss2.focus.de/c/32191/f/443313/index.rss"; // Die Web-Adresse des zu ladenden Feeds eintragen
$link = ""; // Dient nur der Bekanntmachung der Variablen $link
define("SCHLIESSE", ">"); // Für valides HTML je nach Dokumenttyp-Deklaration bei HTML ">" oder bei XHTML " />"
?>
<!DOCTYPE html>
<html>
<head>
<title>Feedreader</title>
<link href="navi1.css" type="text/css" rel="stylesheet" media="screen" />
</head>
<body>
<div class="border">
<?php
function wandleTags($daten) {
$daten = str_replace("content:encoded", "content", $daten);
$daten = str_replace("dc:creator", "creator", $daten);
$daten = preg_replace_callback("/(&[#a-z0-9]+;)/",
function($enti) {
return mb_convert_encoding($enti[1], "UTF-8", "HTML-ENTITIES");
}, $daten);
return $daten;
}
function filtereHTML($daten) {
$daten = preg_replace("/<p.*?>(.+?)<\/p>/is", "$1[br]\n", $daten);
$daten = preg_replace("/<div.*?>(.+?)<\/div>/is", "$1[br]\n", $daten);
$daten = preg_replace("/<span.*?>(.*?)<\/span>/is", "$1", $daten);
$daten = preg_replace("/<br.*?>/i", "[br]\n", $daten);
$daten = preg_replace("/<a href.+?>(.*?)<\/a>/is", "$1", $daten);
$daten = preg_replace("/<img.*?src=\"(.+?)\.(jpg|png).*?>/is", "[img]$1.$2[/img]", $daten);
$daten = str_replace("<b>", "[b]", $daten);
$daten = str_replace("</b>", "[/b]", $daten);
return $daten;
}
function formeHTML($daten) {
$daten = str_replace("[br]", "<br".SCHLIESSE, $daten);
$daten = str_replace("[b]", "<b>", $daten);
$daten = str_replace("[/b]", "</b>", $daten);
$daten = preg_replace_callback("/\[img\](.+?)\[\/img\]/",
function ($bilder) {
@$format = getimagesize($bilder[1]);
if($format != false) {
if ($format["mime"] == "image/jpeg" or $format["mime"] == "image/png") {
$height = $format[1];
$width = $format[0];
if ($height > 250){$height = 250;
$prozent = ($format[1] / $height);
$width = ($format[0] / $prozent);
}
if ($width > 250){$width = 250;
$prozent = ($format[0] / $width);
$height = ($format[1] / $prozent);
}
return "<img src=\"".$bilder[1]."\" alt=\"Ein Bild\" height=\"".round($height)."\" width=\"".round($width)."\"><br".SCHLIESSE;
}
}
}, $daten);
return $daten;
}
function formeDatumZeit($daten) {
$daten = preg_replace("/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})/", "$3.$2.$1 um $4:$5 Uhr", $daten);
$daten = substr($daten, 0, 23);
return $daten;
}
if (($data = file_get_contents($seite)) != false) {
$data = preg_replace("/></", ">\n<", $data);
$pxml = simplexml_load_string(wandleTags($data), "SimpleXMLElement", LIBXML_NOCDATA);
$si = 0;
$cw = 18;
if ($pxml->channel->item) $leseaus = $pxml->channel->item; // RSS
if ($pxml->entry) $leseaus = $pxml->entry; // Atom
if ($leseaus != false) {
foreach ($leseaus as $nachricht) {
if ((string)$nachricht->link != "") {
$link = $nachricht->link;
} elseif ($nachricht->link->attributes() != "") {
$attr = $nachricht->link->attributes();
$link = $attr["href"];
}
if ($nachricht->title) {
echo "<h3><a href=\"".htmlspecialchars($link, ENT_QUOTES)."\" target=\"_blank\">".htmlspecialchars($nachricht->title, ENT_QUOTES)."</a></h3>\n";
}
if ($nachricht->description) {
echo htmlspecialchars(filtereHTML($nachricht->description), ENT_QUOTES)."<br".SCHLIESSE."\n";
}
if ($nachricht->content) {
echo "<br".SCHLIESSE."\n".formeHTML(htmlspecialchars(filtereHTML($nachricht->content), ENT_QUOTES))."<br".SCHLIESSE."\n";
} elseif ($nachricht->summary) {
echo formeHTML(htmlspecialchars(filtereHTML($nachricht->summary), ENT_QUOTES))."<br".SCHLIESSE."\n";
}
if ($link != "") {
echo "<a href=\"".htmlspecialchars($link, ENT_QUOTES)."\" target=\"_blank\">Weiterlesen</a><br".SCHLIESSE."\n";
}
if ($nachricht->pubDate) {
echo "<br".SCHLIESSE."".htmlspecialchars(substr($nachricht->pubDate, 0, 16), ENT_QUOTES).
" um ".htmlspecialchars(substr($nachricht->pubDate, 17, 5), ENT_QUOTES)." Uhr";
} elseif ($nachricht->updated) {
echo "<br".SCHLIESSE.formeDatumZeit($nachricht->updated)."\n";
} elseif ($nachricht->published) {
echo "<br".SCHLIESSE.formeDatumZeit($nachricht->published)."\n";
}
if ($nachricht->author) {
echo " von ".htmlspecialchars($nachricht->author, ENT_QUOTES)."<br".SCHLIESSE."\n<br".SCHLIESSE."\n";
} elseif ($nachricht->creator) {
echo " von ".htmlspecialchars($nachricht->creator, ENT_QUOTES)."<br".SCHLIESSE."\n<br".SCHLIESSE."\n";
}
echo "<hr".SCHLIESSE;
$si++;
if ($si == $cw) {break;
}
}
}
} else { echo "Feed konnte nicht geladen werden!\n";
}
?>
</div>
</body>
</html>
newbie1955
Comment
-
Originally posted by newbie1955 View Postwenn ich das einfüge, kommt trotzdem bei Focus nicht, habe ich was übersehen?
Comment
-
Nur die Überschrift vm focus
zeigt er mir an. Habe feedreader 1.01 genommen. Spiegel oder ähnliche feeds klappen.Last edited by newbie1955; 09-06-2013, 11:06.
Comment
-
Du könntest es höchstens statt mit ">\n<" noch einmal mit ">\r\n<" versuchen, sonst wüsste ich nicht, was noch sein könnte, bei mir ladet der Feed ja nun.
Die Laufzeit des Scripts ist beim Focus reichlich hoch, weil der Feed viele kleine Images enthält und das Script ja jedes Image einzeln überprüft. Das könnte im ungünstigsten Fall zu einem Abbruch führen, wenn das Script länger als 30 Sekunden rödelt. Doch dann sollte wohl gar nichts mehr ausgegeben werden. Überlege so, wie man am besten zählen könnte, dass nicht mehr als ein Image pro Item überprüft und geladen wird.
Vielmehr fällt mir gerade nicht ein.
Comment
-
Naja,
lange rödeln tut er nicht. Aber zur Not könnte ich den Focus auch separat behandeln. Ich müsste ohnehin den feedreader abspecken, weil ich ja nur die Links, title und descriptions bräuchte. Die (descr.) ich ja, wie gesagt, gerne in tooltips packen würde. Doch irgendwie scheitere ich an der Syntax. Wenn ich meinen beschränkten magpie parser so modifiziere
PHP Code:echo "<li><a href = '$href' target='_blank' title = '$desc' >$title</a></li>";
PHP Code:echo "<li><a href=\"".htmlspecialchars($href)."\" target=\"_blank\" title = \" .htmlspecialchars($desc)">".htmlspecialchars($title)."</li></a>";
Gruß und Dank
newbie1955
Comment
-
Beim Focus 42.34s (onload: 42.37s) und davon entfallen 41,43 auf Wartezeit. Werde mal sehen, was sich da machen lässt. Im Vergleich den Feed von der Tagesschau mit 1.05s (onload: 1.06s) wobei der auch schon einmal schneller war.
Aber das ist doch ganz einfach. Du brauchst doch nur alle einfachen Anführungszeichen gegen doppelte Gänsefüßchen auszutauschen und alle doppelten Gänsefüßchen im String mit einem Backslash \ zu maskieren. Wo liegt Dein Problem?
PHP Code:"Ich bin ein String und enthalte einige \"Gänsefüßchen\" und was ist dabei?";
dann fügst Du das halt da ein, wie bei:
PHP Code:"Ich bin ein String und enthalte einige \"". Hier ist doch Platz für Code im String ."\" und was ist dabei?";
PHP Code:"Ich bin ein String und enthalte einige ". Hier ist doch Platz für Code im String ." und was ist dabei?";
Last edited by Melewo; 09-06-2013, 11:59.
Comment
-
Zu blöd
Habe es so versucht, kriege es aber nicht auf die Reihe
PHP Code:echo "<li><a href=\".htmlspecialchars($href).\" target=\"_blank\" title = \" .htmlspecialchars($desc)"> htmlspecialchars($title)."</li></a>";
PHP Code:foreach ($pxml->channel->item as $nachricht) {
if ($nachricht->title) {
echo "<li><a href=\"".htmlspecialchars($nachricht->link)."\" target=\"_blank\" title = \"".htmlspecialchars($nachricht->description).">".htmlspecialchars($nachricht->title)."</li></a>";
Comment
-
Gebe es doch einfach mit echo aus, schaue in den Quelltext und Du siehst, was du vergessen hast. Ohne Testausgabe, lösche aus
PHP Code:"... title = \"".htmlspecialchars($nachricht->description)."> ..."
PHP Code:".htmlspecialchars($nachricht->description)."
PHP Code:"... title = \" > ..."
Das mit den fehlenden Zeilenumbrüchen habe ich jetzt erst einmal noch etwas sauberer gelöst, nur der Feed enthält insgesamt 221 img-Tags und ich weiß immer noch nicht, wie ich die Dinger auf 10 reduziere. Reduzieren wäre ja nicht das Problem, doch bei anderen Feeds können die mal in description, mal in content und mal in summary vorkommen.
Comment
-
Also
ich bin da total behämmert in der Angelegenheit. Also nochmal: Vorlage:
PHP Code:foreach ($pxml->entry as $nachricht) {
if ($nachricht->title){ $attr = $nachricht->link->attributes();
echo "<li><a href=\"".htmlspecialchars($attr["href"])."\" target=\"_blank\">".htmlspecialchars($nachricht->title)."</li></a>";
}
PHP Code:foreach ($pxml->entry as $nachricht) {
if ($nachricht->title){ $attr = $nachricht->link->attributes();
echo "<li><a href=\"".htmlspecialchars($attr["href"])."\" target=\"_blank\" title = ". htmlspecialchars($nachricht->summary).">".htmlspecialchars($nachricht->title)."</li></a>";
Comment
-
Anführungszeichen
nächster Versuch, klappt auch nicht:
PHP Code:foreach ($pxml->entry as $nachricht) {
if ($nachricht->title){ $attr = $nachricht->link->attributes();
echo "<li><a href=\"".htmlspecialchars($attr["href"])."\" target=\"_blank\" title = \"". htmlspecialchars($nachricht->summary)"\".">".htmlspecialchars($nachricht->title)."</li></a>";
Comment
Comment