Hallo zusammen,
ich lese hier schon seit vielen Jahren mit. Betreibe auch eine Wetterseite, nicht ganz so professionell, aber erstmal egal.
Jahrelang habe ich ein script genutzt, der die DWD Berichte integriert hat. Die ganz einfachen genügen mir eigentlich auch, ich finde aber keinen Weg die einigermaßen lesbar zu integrieren. Es fehlen vor allem die Umbrüche. Leider habe ich von php eher wenig Ahnung. Habs schon mit curl versucht, komme aber auch nicht weiter. Über ein paar hilfreiche Tipps würde ich mich freuen... Gemeint sind die Seiten:
https://www.dwd.de/DWD/wetter/wv_allg/deutschland/text/vhdl13_dwog.htm (Bsp.)
Viele Grüße aus dem Erzgebirge
Sascha Schlauderer
www.baerenfels.de
Hallo Sascha,
schau dir doch den HTML-Code an: view-source:https://www.dwd.de/DWD/wetter/wv_allg/deutschland/text/vhdl13_dwog.html
Zwischen den Pre-Tags wird die Formatierung übernommen. Hier musst du das Zeilenende beachten.
https://www.w3schools.com/tags/tag_pre.asp
Gruß
falk
Hallo Falk,
ja, wenn ich das richtig verstehe müssten die "pre"s raus sein? Aber wie soll man das bewerkstellingen?
Gruß
Sascha
Beiträge zusammengeführt, weil der Autor sich selbst geantwortet hat statt seinen letzten Beitrag zu ändern: 28.01.2018, 19:35:45
Hallo nochmal,
ich glaube ich habs verstanden:
http://www.baerenfels.de/test.php
unten...
Gruß
Sascha
Bitte nochmal genau erklären! Danke.
Hallo,
ich habe den folgenden Script genutzt, der die html-Seite beim dwd ausliest und dann ausgibt. Der Parameter "strip_tags($_buffer, '<br><strong><h3>');" hinter echo filtert alle tags raus lässt jedoch die br, strong und h3 drinn. Schon werden die Wetterberichte zur Einbindung in die Homepage nutzbar. Siehe www.baerenfels.de
<?php
# -------------------------------------------------------------------
# (c) Charles Imilkowski
#
# Funktion: lädt mit Curl eine andere URL ein
# -------------------------------------------------------------------
# $url = Internetadresse die eingelesen werden soll
# $postdata = Die Daten die per $_POST mitgesendet werden sollen,
# das Format entspricht einem $_GET String, wie man ihn
# an eine URL anfügen würde
# -------------------------------------------------------------------
function HomepageLaden($url, $postdata)
{
$agent = "Meine Browserkennung v1.0 :)";
$header[] = "Accept: text/vnd.wap.wml,*.*";
$ch = curl_init($url);
if ($ch)
{
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
# mit den nächsten 2 Zeilen könnte man auch Cookies
# verwenden und in einem DIR speichern
#curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
#curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
if (isset($postdata))
{
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
}
$tmp = curl_exec ($ch);
curl_close ($ch);
}
return $tmp;
}
$_url = "https://www.dwd.de/DWD/wetter/wv_allg/deutschland/text/vhdl17_dwog.html";
$_buffer = HomepageLaden($_url, "");
echo strip_tags($_buffer, '<br><strong><h3>');
?>
Hallo Sascha,
habe es gerade getestet, funktioniert einwandfrei, prima.
Ich habe allerdings Probleme mit dem Zeichensatz (Umlaute).
Wo setze ich da an?
Hallo,
das scheint aber nur bestimmte Browser zu betreffen. Eventuell müssen noch mehr tags eingeschlossen werden, z.B. die Schriftart...
Hallo,
Danke für die Antwort. Das Script kommt also in eine php Datei, welche ich dann in meine Seite einbinde? Oder wie geht das?
Und kann man die HTML außer mit iFrame irgendwie sinnvoll einbinden?
Hallo,
das ist ein php Script. Als *.php speichern und dann aufrufen oder in einen iframe einbinden.
Viele Grüße
Sascha
Hallo,
Zitatdas scheint aber nur bestimmte Browser zu betreffen
Nein, das hat mit dem Browser nichts zu tun, das tritt bei mir in allen Browsern auf.
Das "Problem" ist ja, dass die Seite direkt auf dem Server erzeugt wird, Ich müsste also vermutlich in dem script den zu verwendenden Zeichensatz angeben.
Bei mir nur bei Microsoft... Der Ansatz ist ja erstmal da. Die Schriftart usw. muss noch in den Script.
Vielleicht hilft das:
ini_set(default_charset, "");
LG
WeatherCrack
Hallo WeatherCrack,
danke, das war's
@Werner
Könntest du noch mal den kompletten Code Posten? Danke.
@Schlaudi
Für dich noch zur Info, auf deiner Wettervorhersageseite, werden Umlaute ("ä,ü,ö") falsch angezeigt, da scheint noch was mit dem Schriftcode nicht zu stimmen. Sie werden als Fragezeichen in einer Raute dargestellt. Schau mal diesbezüglich hier:
http://floern.com/webscripting/umlautproblem
Auf der 10-Tage Vorhersageseite passt es, betrifft also nur die Wettervorhersageseite.
Gruß Frank
Die Wettervorhersage vom DWD ist in ISO-8859-1 codiert. Wenn man seine Seite in UTF-8 ausliefert, könnte man doch die PHP-Funktion utf8_encode (http://php.net/manual/de/function.utf8-encode.php) nutzen.
Hallo Hossi,
Falk hat die die optimale Lösung schon genannt, denn es war ja klar, dass es nicht am Browser liegen kann. Ich habe es auf Grund des Hinweises so gemacht (nur der Teilcode)
Zitat{
$agent = "Meine Browserkennung v1.0 :)";
$header[] = "Accept: text/vnd.wap.wml,*.*";
$ch = curl_init($url);
ini_set(default_charset, "");
if ($ch)
Funktioniert hervorragend! Großen Dank an alle!
Beiträge zusammengeführt, weil der Autor sich selbst geantwortet hat statt seinen letzten Beitrag zu ändern: 30.01.2018, 22:17:25
Gibt es die Synoptische Übersicht auch als .html?
Hallo zusammen und hallo "Nachbar" (@Hossi81) :D
Ich habe genau dasselbe php-Script ausprobiert. Leider habe ich ebenfalls Probleme mit der Textcodierung, selbst wenn ich "ini_set(default_charset, "");" in den Code reinsetze.
Auf der Website wird es weiterhin als "UTF-8" ausgegeben anstatt als "windows-1252".
Hat hier jemand eventuell eine Idee?
Link: http://www.wetter-halle.de/images/unwetterwarnungen/warnlage.php
Ruft man die php-Seite allein auf, dann stimmt es. Ist sie jedoch in einen inline-Frame eingebettet, dann werden die Umlaute nicht richtig dargestellt, auch nicht mit der Zeile "ini_set(default_charset, "");". Es muss noch etwas anderes sein...
Viele Grüße
Sascha
Zitat von: schlaudi am 31.01.2018, 06:28:20
Es muss noch etwas anderes sein...
Hallo,
wie falk schon geschrieben hat, verwende die PHP-Funktion utf8_encode. Setze vor dem Echo-Befehl mal dies ein:
....
$_buffer = utf8_encode ($_buffer);echo strip_tags($_buffer, '<br><strong><h3>');
Gruß
Georg
Kennt jemand eine .html der Synoptischen Übersicht?
Oder von den regionalen Vorhersagen?
Zitat von: Hossi81 am 31.01.2018, 13:59:27
Kennt jemand eine .html der Synoptischen Übersicht?
Oder von den regionalen Vorhersagen?
Das geht wohl nur über Umwege, weil die Synoptische Übersicht in Textform mit jeweils wechselnden Dateinamen auf dem OpenData-Server liegt. Aber es geht: https://buwx.de/index.php/synoptik
Nur mit PHP dürfte das noch schwerer zu lösen sein. Unter Linux reicht hingegen ein kleines Skript, welches jeweils den aktuellsten Bericht vom Server holt und in das Web-Verzeichnis kopiert. Dort muss es nur in Pre-Tags eingepackt werden. Achtung: Auch diese Datei muss ggf. wieder nach UTF-8 konvertiert werden.
wget https://opendata.dwd.de/weather/text_forecasts/content.log.bz2 -O /tmp/content.log.bz2
report=`bzcat /tmp/content.log.bz2 | grep SXDL31 | sort | tail -1 | cut -d '|' -f 1`
wget https://opendata.dwd.de/weather/text_forecasts/${report} -O /tmp/sxdl31.txt
iconv -f latin1 -t utf8 /tmp/sxdl31.txt > /var/www/html/weewx/dwd/sxdl31.txt
Ich hole mir also die gepackte Inhaltsdatei contents.log.bz2
extrahiere daraus den Dateinamen des letzten Report
Hole diese Datei vom Server
konvertiere nach UTF-8 und schreibe das Ergebnis in mein Webverzeichnis
Unter Joomla binde ich die Textdatei über das Plugin Sourcerer ein.
<pre style="white-space: pre-wrap; font-family: monospace,serif;">
{source file=weewx/dwd/sxdl31.txt}{/source}
</pre>
Hallo,
ich hab das jetzt eingebaut, jetzt stimmen die Umlaute im Frame, aber außerhalb nicht mehr?
http://www.baerenfels.de/vorhersage.html
Viele Grüße
Sascha
Zitat von: schlaudi am 31.01.2018, 17:31:32
Hallo,
ich hab das jetzt eingebaut, jetzt stimmen die Umlaute im Frame, aber außerhalb nicht mehr?
http://www.baerenfels.de/vorhersage.html
Viele Grüße
Sascha
Hallo Sascha,
schau dir mal den Quelltext zu deiner Seite an: view-source:http://www.baerenfels.de/vorhersage.html
Du hast hier mehrere Anweisungen mit unterschiedlichen Kodierungen
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
Das scheint nicht zu funktionieren. Es ist ohnehin besser, wenn man sich auf eine einzige Kodierung festlegt.
@falk
Oh, Linux habe ich hier nicht.
Vielleicht könnte ich auf deine Datei zugreifen?
Zitat von: Hossi81 am 31.01.2018, 18:56:52
@falk
Oh, Linux habe ich hier nicht.
Vielleicht könnte ich auf deine Datei zugreifen?
Hallo Hossi,
die Kurzfrist hole ich per Crontab täglich um 10 Uhr und 18 Uhr und ist über https://www.buwx.de/weewx/dwd/sxdl31.txt erreichbar. Die Datei (UTF-8 gemäß meinem Skript) darfst du gerne einbinden.
Gruß
falk
Danke!
Selbe Vorgehensweise wie bei der html Datei des DWD?
Zitat von: Hossi81 am 01.02.2018, 05:47:28
Danke!
Selbe Vorgehensweise wie bei der html Datei des DWD?
Wie bei mir in Joomla
<pre style="white-space: pre-wrap; font-family: monospace,serif;">
{source file=weewx/dwd/sxdl31.txt}{/source}
</pre>
Statt der Source-Anweisung gibst du die Daten aus, die du zuvor via curl über https://www.buwx.de/weewx/dwd/sxdl31.txt geholt hast.
Du könntest aber die Vorhersage auch direkt über die DWD-Seite holen: view-source:https://www.dwd.de/DE/fachnutzer/hobbymet/wetter_deutschland/_functions/PlainTeaser_synUebersichten/nas_bericht_syn_ueb_kurzfrist.html
Die Daten müssen dann zuvor aufbereitet werden, Elemente ober- und unterhalb der eigentlichen Vorhersage heraus gefiltert werden. Viele Wege führen nach Rom...
Statt der source die Daten eingeben, welche ich mit curl geholt habe?
Kannst du mir das nochmal erklären?
Danke.
Beiträge zusammengeführt, weil der Autor sich selbst geantwortet hat statt seinen letzten Beitrag zu ändern: 01.02.2018, 12:01:13
Hast du bei dir auch mit Mittelfrist?
Hallo Falk,
ich habe das rausgenommen: <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
jetzt scheint es zu gehen. Danke für den Tipp.
Viele Grüße aus dem Osterzgebirge
Sascha
Zitat von: Hossi81 am 01.02.2018, 11:47:56
Hast du bei dir auch mit Mittelfrist?
Ja, hier: https://www.buwx.de/weewx/dwd/sxdl33.txt
Ich hatte übrigens noch einen Fehler in der Sortierung. Jetzt funktioniert es und ich hole die Daten stündlich.
https://buwx.de/index.php/synoptik-kurz
https://buwx.de/index.php/synoptik-mittel
wget https://opendata.dwd.de/weather/text_forecasts/content.log.bz2 -O /tmp/content.log.bz2
report=`bzcat /tmp/content.log.bz2 | grep SXDL31 | sort -t '|' -k3 | tail -1 | cut -d '|' -f 1`
wget https://opendata.dwd.de/weather/text_forecasts/${report} -O /tmp/sxdl31.txt
iconv -f latin1 -t utf8 /tmp/sxdl31.txt > /var/www/html/weewx/dwd/sxdl31.txt
Du solltest übrigens direkt die Daten über https://www.buwx.de/weewx/dwd/sxdl31.txt und https://www.buwx.de/weewx/dwd/sxdl33.txt holen. Das ist schneller, weil über die anderen Links die Daten erst über Joomla verarbeitet werden.
Das hier ist schneller:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<pre style="white-space: pre-wrap; font-family: monospace,serif;">
<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.buwx.de/weewx/dwd/sxdl31.txt"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch);?>
</pre>
</body>
</html>
Edit: Formatierung korrigiert
Vielen Dank!
Das funktioniert echt super!
Hallo Miteinander,
wer die weiter oben beschriebene Lösung genutzt hat und seit Freitag nichts mehr angezeigt bekommen. Das scheint mit den SSL-Zertifikaten zusammenzuhängen.
Die letzte Zeile im Schript einfügen und es sollte wieder laufen:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Skip SSL Verification
Viele Grüße aus dem herbstlichen Erzgebirge
Sascha
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Skip SSL Verification
Das funktioniert bestens.
Vielen Dank für diese Lösung.
Hallo,
habe das Problem jetzt erst bemerkt, da ich eine Woche lang mit Computerumstellung beschäftigt war.
Besten Danke für den guten Lösungshinweis.
Beiträge zusammengeführt, weil der Autor sich selbst geantwortet hat statt seinen letzten Beitrag zu ändern: 03.09.2018, 11:37:14
Hallo,
muss jetzt noch etwas dranhängen, weil es damit zusammenzuhängen scheint, auch wenn es nun mit curl nichts zu tun hat.
Ich habe folgende Seite (ausnahmsweise mal schon länger mit ExpressionWeb erstellt), die bisher einwandfrei lief:
https://www.don-wetter.de/vorhersage/index.html
Die Links, die über PHP eingebunden werden, funktionieren ("Wetter Bayern aktuell" usw)
Aber alle, die normal von der DWD-Seite aufgerufen werden, z.B. "Deutschland aktuell", produzieren im Frame nur eine leere Seite.
Wenn ich dagegen den im Button verwendeten Link manuell aufrufe, also
https://www.dwd.de/DWD/wetter/aktuell/deutschland/bilder/wx_brd_akt.jpg
wird er natürlich angezeigt, es ist also nicht der Link an sich schuld.
Wer kann mir hier auf die Sprünge helfen, denn mir ist nicht klar, ob es sich dabei womöglich auch um ein Zertifikatsproblem handelt (wie dann zu beseitigen?) oder ob schlicht und einfach der von ExpressionWeb erzeugte Code schuld ist (der aber, wie gesagt, bisher immer funktionierte)
Hallo Werner,
meine DWD-Links die ich auf meiner Homepage per PHP einbinde funktionieren in der Darstellung auch nicht mehr.
gugst du meinen Fred:
http://www.wetterstationen.info/forum/wetter-websites/dwd-de-unsicher/msg299955/?topicseen#msg299955
Ich habe bemerkt, dass ich die DWD-Links über IE erreichen kann, jedoch über Firefox erhalte ich eine Fehlermeldung, da scheint irgendwas mit dem SLL-Zertifikat beim DWD faul zu sein.
Ich vermute mal, dass analog wie der Firefox, auch PHP dieses fehlerhafte SLL-Zertifikat erkennt und deswegen funktioniert die PHP-Abfrage der Links nicht mehr, bzw. sie liefern kein Ergebnis.
Bevor ich auf meiner Homepage die DWD-Links verarbeite, überprüfe ich mit dem PHP-Befehl "domainAvailable", ob der Link überhaupt erreichbar ist und hier liefern seit vergangenen Freitag alle DWD-Links, dass sie nicht erreichbar sind.
<?php function domainAvailable ( $strDomain ) { $rCurlHandle = curl_init ( $strDomain ); curl_setopt ( $rCurlHandle, CURLOPT_CONNECTTIMEOUT, 5 ); curl_setopt ( $rCurlHandle, CURLOPT_HEADER, TRUE ); curl_setopt ( $rCurlHandle, CURLOPT_NOBODY, TRUE ); curl_setopt ( $rCurlHandle, CURLOPT_RETURNTRANSFER, TRUE ); $strResponse = curl_exec ( $rCurlHandle ); curl_close ( $rCurlHandle ); if ( !$strResponse ) { return FALSE; } return TRUE; } if ( domainAvailable ( 'https://dwd.de') ) //überprüfe ob Link erreichbar {echo 'Link erreichbar'; } else { echo 'Link NICHT erreichbar'; } ?>
Vielleicht sollte man mal den DWD kontaktieren und ihn auf das Problem hinweisen!?
Gruß Frank
Hallo Frank,
das ist bei mir ein anderes Problem, denn der direkte Aufruf der Links funktioniert ja. (s. oben)
Ich habe ja die bereits genannte curl-Codezeile eingefügt.
Aber es gibt offenbar ein Problem, wenn der Link anstatt dass er direkt aufgerufen wird, in einem frameset abgebildet werden soll.
Ich habe ja im linken Frame die Navigation und im rechten Frame sollen die Ergebnisse dargestellt werden und das funktioniert eben nicht, sondern liefert eine weiße Seite.
Nachtrag:
Es funktioniert auch nicht, wenn man iframe verwendet, z.B. so
<iframe class="dsR2" src="https://www.dwd.de/DWD/wetter/wv_allg/deutschland/film/vhs_deutschland.jpg"></iframe>
Irgendetwas wurde dort vom DWD verändert, so dass diese Art des Zugriffs nicht mehr möglich ist.
Es kann aber doch nicht sein, dass nur noch der direkte Link aufgerufen werden kann.
Hallo,
Also ich kann jetzt die Seiten wieder ohne Probleme mit dem Firefox aufrufen und auch meine PHP-Einbindungen auf meiner Homepage funktionieren wieder wie zuvor.
Somit hat der DWD wohl sein SSL-Zertifikat angepasst, somit ist zumindest dieses Problem beseitigt.
Gruß Frank
Hallo,
bei mir geht es nach wie vor nicht und das Problem ist offenbar das frameset. Nur zuvor ging es ja auch, also muss hier beim DWD eine Umstellung getroffen worden sein. Nur welche, erschließt sich mir nicht.
Ich habe jetzt das Problem durch eine andere Art der Darstellung gelöst, ich öffne einfach die nicht funktionierenden Links in einem neuen Fenster anstatt im frame.
Ich lasse aber den obigen Link noch eine Weile stehen, falls doch noch jemand einen Einfall hat.
Hallo Werner
Das Problem ist nicht nur beim DWD. Hatte die bayerischen Flusspegel und die offiziellen Luftwerte auch per Iframe eingebunden. Dasselbe Problem. Keine Darstellung mehr. Nun hab ich es auch separat verlinkt. Hatte es eine weile probiert und dann wurde es mir zu doof.
Gruß
Robert
Hallo Robert,
danke, das bestätigt wenigstens meine Vermutung.
Ich fürchte, das wurde deswegen verändert, damit nicht fremde Daten als eigene Daten "missbraucht" werden können. Verstehe es beim DWD aber insofern nicht, als der DWD ja sein Logo bei all diesen Bildern und Radarfilmen mit drin hat, man also genau sieht, von wem es kommt.