Zitat von h3ll
Beitrag anzeigen
foreach - Schleifen und arrays
Einklappen
X
-
Zitat von Melewo Beitrag anzeigenBeim 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.Zuletzt geändert von h3ll; 08.06.2013, 22:58.
Kommentar
-
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.
Kommentar
-
Zitat von newbie1955 Beitrag anzeigenDer 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);
Kommentar
-
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
Kommentar
-
Zitat von newbie1955 Beitrag anzeigenwenn ich das einfüge, kommt trotzdem bei Focus nicht, habe ich was übersehen?
Kommentar
-
Nur die Überschrift vm focus
zeigt er mir an. Habe feedreader 1.01 genommen. Spiegel oder ähnliche feeds klappen.Zuletzt geändert von newbie1955; 09.06.2013, 12:06.
Kommentar
-
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.
Kommentar
-
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
Kommentar
-
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?";
Zuletzt geändert von Melewo; 09.06.2013, 12:59.
Kommentar
-
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>";
Kommentar
-
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.
Kommentar
-
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>";
Kommentar
-
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>";
Kommentar
Kommentar