Naja,
und wenn Dir noch ein tooltip-Tip einfällt, bin ich Dir dankbar, manchmal macht mich diese ganze PHP-HTML-CSS-Syntax auch irre.
foreach - Schleifen und arrays
Collapse
X
-
Alles älter als PHP 5.3 sollte nicht mehr verwendet werden, da dafür keine Sicherheitsupdates mehr erscheinen und du somit ein unsicheres System hast.
Leave a comment:
-
Das mit dem Focus ist mir bekannt, hatte den auch bei meinen Testfeeds, mit dem bin ich nicht klar gekommen. Wenn ich nur den Feed per Socket abhole, ist alles in Ordnung und der Quelltext vom Feed wird richtig angezeigt. Sowie ich den aber als Feed anzeigen möchte, wird geblockt. Ich weiß aber noch nicht, was da eigentlich blockt, habe da auch nicht weiter gesucht. Werde es noch einmal mit deaktivierten Images versuchen, vielleicht hängt es damit zusammen.
Nur wo ich es jetzt noch einmal testen wollte, bin ich auf einen anderen Fehler gestoßen, der ist erst einmal wichtiger. Eigentlich kein Fehler, doch
PHP Code:$daten = preg_replace_callback("/Muster/",
function($enti) {
PHP Code:$daten = preg_replace_callback("/Muster/",
create_function('$enti',
Leave a comment:
-
Habe
das tooltip-Problem so zu lösen versucht, mich aber irgendwie vertan
PHP Code:foreach ($leseaus as $nachricht) {
if ((string)$nachricht->link != "") {
$link = $nachricht->link;
} elseif ($nachricht->link->attributes() != "") {
$attr = $nachricht->link->attributes();
$link = $attr["href"];
$summ = ($nachricht->summary);
}
if ($nachricht->title) {
echo "<h3><a href=\"".htmlspecialchars($link, ENT_QUOTES)."\" target=\"_blank\" "title=\"".htmlspecialchars($summ, ENT_QUOTES)."\"">".htmlspecialchars($nachricht->title, ENT_QUOTES)."</a></h3>\n";
Leave a comment:
-
feedreader
@melewo
Hallo, teste weiter Deinen klasse feedreader und versuche jetzt, die description mit "title = " in einen tooltip unterzubringen. Das klappt auch bei vielen feeds, bei manchen kommt gar nix, ich hoffe, ich habe nix zerschossen. Aber ich dachte, es interessiert Dich auch, wenn manche feeds nicht funktionieren. Der 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. Der Zeit-feed dagegen
ZEIT ONLINE: Politik
ist valide und es kommt nix, nicht mal eine Fehlermeldung. Das Einbinden von descriptions scheint ja sowieso schwierig zu sein, weil in der ganz viel Unterschiedliches steht, z. B. auch Werbung oder Bilder, die man für tooltips wieder ausschließen müsste.
Hier noch mal der Code, den ich mir von Deinem Link geholt habe (Werde Dich natürlich auch als QUelle angeben, wenn alles fertig ist)
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://newsfeed.zeit.de/politik/index"; // 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) {
$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>
Leave a comment:
-
Okay
nochmals Danke (war ein paar Tage unterwegs und habe erst jetzt Deine Antwort gesehen) - wieder was dazugelernt!.
Gruß
newbie1955
Leave a comment:
-
Originally posted by newbie1955 View Post-Lösung war ich in anderen Fällen ganz gut gefahren.
PHP Code:echo gettype($nachricht->title); // object
PHP Code:// Entweder:
(string) $nachricht->title
// Oder:
"".$nachricht->title.""
PHP Code:$alttitle = "-";
if($pxml->channel->item) {
foreach ($pxml->channel->item as $nachricht) {
if (($nachricht->title) and ((string)$nachricht->title != $alttitle)) {
// ... ... ...
$alttitle = $nachricht->title;
}
Leave a comment:
-
Danke
Danke trotzdem, ich hatte gar nicht auf eine fertige array-Lösung von Dir spekuliert, mit derIf ($title !== alttitle)
Also danke nochmals - in die arrays werde ich mich dennoch besser einarbeiten, versprochen!
Gruß
newbie1955
Leave a comment:
-
Originally posted by newbie1955 View PostDu bist ein Genie,
Wenn ich Dir nun eine mögliche Lösung zeige, an der ich wohl auch zwei Stunden gesessen habe, dann lernst Du ja wieder nichts und dabei wolltest Du Dich doch mit Arrays beschäftigen.
PHP Code:$si = 0;
$cw = 16;
// --------------- Austauschen ----------------------------------------------
if($pxml->channel->item) {
foreach ($pxml->channel->item as $nachricht) {
if ($nachricht->title) {
$alletitel[(string)$nachricht->link] = (string)$nachricht->title;
}
$si++;
if ($si == $cw) {break;
}
}
$sortiert = array_unique($alletitel);
foreach ($sortiert as $titel => $links) {
echo "<a href=\"".htmlspecialchars($links, ENT_QUOTES)."\" target=\"_blank\">".htmlspecialchars($titel, ENT_QUOTES)."</a>\n";
}
}
// --------------------------------------------------------------------------
Last edited by Melewo; 26-05-2013, 20:05.
Leave a comment:
-
Super
Habe einen ersten Test gemacht und es läuft bisher super! Du bist ein Genie, Danke! Muss noch ein paar Angaben ausfiltern, die ich nicht brauche, aber sonst Klasse. Werde es erst noch mal genauer studieren, damit ich es auch kapiere, was ich da tue. Und das andere Listing schaue ich mir auch noch an.
Ich habe Dein erstes Script von neulich ja schon in einem anderen Fall ausprobiert und alles läuft super, nur weiß ich nicht, wieso mein Versuch scheitert, doppelte feed-title auszuschließen.
PHP Code:$si = 0;
$cw = 16;
$alttitle = '';
/*-- für RSS --------------------------- */
if($pxml->channel->item) {
foreach ($pxml->channel->item as $nachricht) {
if (($nachricht->title) && ($nachricht->title !== $alttitle)) {
echo "<li><a href=\"".htmlspecialchars($nachricht->link)."\" target=\"_blank\">".htmlspecialchars($nachricht->title)."</li></a>";
$alttitle = $nachricht->title;
Code:[URL="http://www.nordbayern.de/region/nuernberg/betrunkener-rast-in-parkenden-lkw-1.2875540?rssPage=UmVnaW9u"]Betrunkener rast in parkenden LKW[/URL] [URL="http://www.nordbayern.de/region/rettungshubschrauber-blockiert-strasse-in-unterfranken-1.2929877?rssPage=UmVnaW9u"]Rettungshubschrauber blockiert Straße in Unterfranken[/URL] [URL="http://www.nordbayern.de/region/erlangen/die-erlanger-bergkirchweih-in-zeiten-der-event-kultur-1.2927218?rssPage=UmVnaW9u"]Die Erlanger Bergkirchweih in Zeiten der Event-Kultur[/URL] [URL="http://www.nordbayern.de/region/erlangen/die-erlanger-torhuter-mit-einem-fast-perfekten-tag-1.2929819?rssPage=UmVnaW9u"]Die Erlanger Torhüter mit einem fast perfekten Tag[/URL] [URL="http://www.nordbayern.de/region/neustadt-aisch/millionenforderung-zugesichert-1.2929754?rssPage=UmVnaW9u"]Millionenförderung zugesichert[/URL] [URL="http://www.nordbayern.de/region/neustadt-aisch/willy-astor-schelmischer-wort-puzzle-spieler-1.2929741?rssPage=UmVnaW9u"]Willy Astor: Schelmischer Wort-Puzzle-Spieler[/URL] [URL="http://www.nordbayern.de/region/erlangen/berg-tristesse-leere-bierbanke-auf-den-kellern-1.2914112?rssPage=UmVnaW9u"]Berg-Tristesse: Leere Bierbänke auf den Kellern[/URL] [URL="http://www.nordbayern.de/region/nuernberg/nurnberg-goes-fit-trotzt-schlechtem-wetter-1.2929707?rssPage=UmVnaW9u"]"Nürnberg goes Fit" trotzt schlechtem Wetter[/URL] [URL="http://www.nordbayern.de/region/erlangen/berg-tristesse-leere-bierbanke-auf-den-kellern-1.2929686?rssPage=UmVnaW9u"]Berg-Tristesse: Leere Bierbänke auf den Kellern[/URL] [URL="http://www.nordbayern.de/region/neumarkt/wiesenfest-mit-rockabend-1.2927605?rssPage=UmVnaW9u"]Wiesenfest mit Rockabend[/URL] [URL="http://www.nordbayern.de/region/gunzenhausen/folgt-jetzt-der-borkenkafer-1.2929676?rssPage=UmVnaW9u"]Folgt jetzt der Borkenkäfer?[/URL] [URL="http://www.nordbayern.de/region/gunzenhausen/raman-semenov-und-seine-russische-band-spielen-1.2929674?rssPage=UmVnaW9u"]Raman Semenov und seine russische Band spielen[/URL] [URL="http://www.nordbayern.de/region/gunzenhausen/generalkonservator-kommt-1.2929665?rssPage=UmVnaW9u"]Generalkonservator kommt[/URL] [URL="http://www.nordbayern.de/region/gunzenhausen/knollchen-erlos-47642-euro-allein-im-letzten-jahr-1.2929644?rssPage=UmVnaW9u"]„Knöllchen“-Erlös: 47642 Euro allein im letzten Jahr[/URL] [URL="http://www.nordbayern.de/region/gunzenhausen/knollchen-erlos-47642-euro-allein-im-letzten-jahr-1.2929636?rssPage=UmVnaW9u"]„Knöllchen“-Erlös: 47642 Euro allein im letzten Jahr[/URL] [URL="http://www.nordbayern.de/region/dinkelsbuehl-feuchtwangen/schwarze-corvette-landet-im-strassengraben-1.2929618?rssPage=UmVnaW9u"]Schwarze Corvette landet im Straßengraben[/URL]
http://www.nordbayern.de/cmlink/15.423?cid=2.178
Gruß
newbie1955Last edited by newbie1955; 26-05-2013, 17:56.
Leave a comment:
-
Originally posted by newbie1955 View PostWenn ich es mit Deinem Script versuche, kommt folgendes:
RSS-Feed aus Wordpress auslesen | Jörgs Webmaster-Forum
Wenn Du [++ wie unter Edit vermerkt entfernst (nur die ++ und nicht die eckige Klammer [) und zusätzlich noch die Zeile
PHP Code:$daten = preg_replace("/&.+?;/", "", $daten);
Und weil Du ja mal wissen wolltest, für was die Zeile content:encoded gut ist, in dem Listing für diesen Feed da (nicht von Deinem Feed), falls Du Dir den Quelltext vom Feed anschauen solltest, sind es nun 2 Zeilen, da die Tags so aussehen:
HTML Code:<content:encoded><![CDATA[<p>Text..........</p>]]></content:encoded> <dc:creator>Vorname Name</dc:creator>
Last edited by Melewo; 26-05-2013, 16:13.
Leave a comment:
-
Parsen
Hallo, Melewo, habe es auch mit Deinem tollen Script versucht, das Du mir neulich mal gepostest hast, denn der feed ist wieder mal kaputt, deswegen bin ich überhaupt wieder auf das xpath-Auslesen verfallen.
Wenn ich es mit Deinem Script versuche, kommt folgendes:
PHP Code:Warning: simplexml_load_string(): Entity: line 89: parser error : Entity 'rsquo' not defined in /customers/6/d/c/nachrichtentisch.de/httpd.www/regiosued3.php on line 173 Warning: simplexml_load_string(): in /customers/6/d/c/nachrichtentisch.de/httpd.www/regiosued3.php on line 173 Warning: simplexml_load_string(): ^ in /customers/6/d/c/nachrichtentisch.de/httpd.www/regiosued3.php on line 173 Notice: Trying to get property of non-object in /customers/6/d/c/nachrichtentisch.de/httpd.www/regiosued3.php on line 180 Notice: Trying to get property of non-object in /customers/6/d/c/nachrichtentisch.de/httpd.www/regiosued3.php on line 180 Notice: Trying to get property of non-object in /customers/6/d/c/nachrichtentisch.de/httpd.www/regiosued3.php on line 211 Warning: Invalid argument supplied for foreach() in /customers/6/d/c/nachrichtentisch.de/httpd.www/regiosued3.php on line 211
Nachrichten im Allgäu | all-in.de - das Allgäu online!
hier der feed:
Nachrichten aus dem ganze Allgu
Gruß
newbie1955
Leave a comment:
-
Schaue Dir mal den Dokumente-Baum richtig an, da werden sicherlich weniger h1 als h3 vorkommen. Dir wird kaum damit geholfen sein, dass Du 2 x h1 und 8 x h3 in ein oder zwei Arrays speicherst. Wie in einem XML-Dokument wird es aber auch nicht verknotet sein, doch dennoch wird es weitere und eventuell bessere Möglichkeiten geben. Könnte mir vorstellen, dass Dir Abfragen wie diese eher helfen.
Code://h1/following-sibling::h3[@itemprop="dateline"]/child::a
Leave a comment:
-
Anstatt:PHP Code:echo 'string';
PHP Code:$array[] = 'string':
Erweitert:
PHP Code:$array[$zaehler]['link'] = 'string':
$array[$zaehler]['title'] = 'string':
Last edited by combie; 26-05-2013, 07:47.
Leave a comment:
-
foreach - Schleifen und arrays
Hallo, ich habe bisher nicht mit arrays gearbeitet, komme jetzt wohl nicht umhin. Also ich muss mir mit xpath href und title holen, die in einer website an zwei verschiedenen Stellen stehen. ALso einmal:
PHP Code:foreach ($xPath->query('//h3[@itemprop="dateline"]/a') as $element)
{
$href = $element->getAttribute('href');
$hreft = "http://admin.all-in.de" . $href;
PHP Code:foreach ($xPath->query('//h1') as $element)
{
$title = $element->nodeValue;
PHP Code:
If (($zaehler <= 13) && ($alttitle !== $title) && (pos ===false))
{
echo "<li><a href=\"".htmlspecialchars($hreft, ENT_QUOTES, 'UTF-8', false)."\" target=\"_blank\">".htmlspecialchars($title, ENT_QUOTES, false)."</a></li>\n";
$alttitle = $title;
$zaehler++;}
Danke für Hinweise
newbie1955Last edited by newbie1955; 25-05-2013, 19:35.
Leave a comment: