HowTo: Wetterdaten einbinden

Dieses Board ist für Anleitungen gedacht, wie man bestimmte (komplexe) Dinge mit CMSms erledigen kann - User-Beiträge herzlich willkommen!
Post Reply
skibby
Forum Members
Forum Members
Posts: 84
Joined: Sat Oct 04, 2008 11:03 pm

HowTo: Wetterdaten einbinden

Post by skibby »

Hi zusammen,

ich möchte euch mal ein kleines Howto vorstellen wie ihr Wetterdaten nach euren wünschen auf die Seite einbinden könntet.

Schritt 1:
Ihr erstellt euch einen neueen "Benutzerdefinierten Tag". Nun kopiert ihr euch folgenden Code rein:
//Wetter in Langenfeld
$url = "http://rss.wunderground.com/auto/rss_fu ... /10400.xml";
$content = implode("", file($url));

preg_match_all("/\(.*?)\/si", $content, $results);
preg_match("/\(.*?)\/si", $results[1][0], $desc);

$arr = explode(" | ",$desc[1]);

/*
* echo '' . print_r($arr, true) . '';
*  
* Array
* (
*     [0] => Temperature: 86°F / 30°C
*     [1] => Humidity: 74%
*     [2] => Pressure: 29.83in / 1010hPa
*     [3] => Conditions: Partly Cloudy
*     [4] => Wind Direction: ESE
*     [5] => Wind Speed: 5mph / 7km/h
*     [6] => Updated: 10:00 PM PHT
* )
*/
//Temperatur  
preg_match("/Temperature: (.*?)F \/ (.*?)C/si", $arr[0], $str);
$wetter['temp'] = $str['2'];


//Wetterbedingung
preg_match("/Conditions: (.*)/si", $arr[3], $str);
$wetter['verh'] = $str['1'];

//Übersetze Wetterbedingung ins Deutsche
switch($wetter['verh'])  
{  
   case 'Partly Cloudy':  
       $wetter['verh'] = 'Teils wolkig';  
   break;  
     
    case 'Mostly Cloudy':  
       $wetter['verh'] = 'Überwiegend wolkig';  
   break;
     
   case 'Scattered Clouds':  
       $wetter['verh'] = 'Teils wolkig';  
   break;  
     
   case 'Overcast':  
       $wetter['verh'] = 'Bewölkt';  
   break;  
   
   case 'Clear':  
       $wetter['verh'] = 'Heiter';  
   break;  
     
    case 'Fog':  
       $wetter['verh'] = 'Nebel';  
   break;  
     
    case 'Heavy Fog':  
       $wetter['verh'] = 'Starker Nebel';  
   break;  
     
    case 'Light Fog':  
       $wetter['verh'] = 'Leichter Nebel';  
   break;  
   
   case 'Thunderstorm':  
       $wetter['verh'] = 'Gewitter';  
   break;  
   
   case 'Light Thunderstorm':  
       $wetter['verh'] = 'Leichte Gewitter';  
   break;  
   
   case 'Heavy Thunderstorm':  
       $wetter['verh'] = 'Starke Gewitter';  
   break;  
     
    case 'Thunderstorms and Rain':  
       $wetter['verh'] = 'Gewitter mit Regen';  
   break;  
     
    case 'Light Thunderstorms and Rain':  
       $wetter['verh'] = 'Leichte Gewitter mit Regen';  
   break;  
     
    case 'Light Rain Showers':  
       $wetter['verh'] = 'Leichte Regenschauer';  
   break;  
   
    case 'Heavy Rain Showers':  
       $wetter['verh'] = 'Starke Regenschauer';  
   break;  
   
    case 'Light Rain':  
       $wetter['verh'] = 'Leichter Regen';  
   break;  
   
    case 'Haze':  
       $wetter['verh'] = 'Trübe';  
   break;  
     
     case 'Patches of Fog':  
       $wetter['verh'] = 'Nebelfelder';  
   break;  
   
     case 'Unknown Percipitation':  
       $wetter['verh'] = 'Ung. Niederschläge';  
   break;  
   
   case 'Light Drizzle':  
       $wetter['verh'] = 'Leichter Sprühregen';  
   break;  
   
   case 'Mist':  
       $wetter['verh'] = 'Leichter Nebel';  
   break;
   
   case 'Light Rain Mist':  
       $wetter['verh'] = 'Leichter Nebel';  
   break;

    case 'Rain': 
        $wetter['verh'] = 'Regen'; 
    break;
     
   default:  
       $wetter['verh'] = $wetter['verh'];  
   break;  
}  

//Luftfeuchtigkeit
preg_match("/Humidity: (.*)/si", $arr[1], $str);
$wetter['feuchte'] = $str['1'];


//Windrichtung
preg_match("/Wind Direction: (.*)/si", $arr[4], $str);
$wetter['windr'] = $str['1'];


//Übersetze Windrichtung ins Deutsche
switch($wetter['windr'])  
{  
   case 'North':  
       $wetter['windr'] = 'Nord';  
   break;  
   
   case 'East':  
       $wetter['windr'] = 'Ost';  
   break;
   
   case 'South':  
       $wetter['windr'] = 'Süd';  
   break;  

    case 'West':  
       $wetter['windr'] = 'West';  
   break;
   
   case 'SE':  
       $wetter['windr'] = 'SO';  
   break;  
   
   case 'SSE':  
       $wetter['windr'] = 'SSO';  
   break;
   
   case 'NE':  
       $wetter['windr'] = 'NO';  
   break;
   
   case 'ESE':  
       $wetter['windr'] = 'OSO';  
   break;  
   
   case 'NNE':  
       $wetter['windr'] = 'NNO';  
   break;  
   
   case 'ENE':  
       $wetter['windr'] = 'ONO';  
   break;  
   
   case 'Calm':  
       $wetter['windr'] = 'Windstill';  
   break;  
   
   default:  
       $wetter['windr'] = $wetter['windr'];  
   break;
}

//Windgeschwindigkeit
preg_match("/Wind Speed: (.*?)mph \/ (.*?)km\/h/si", $arr[5], $str);
$wetter['windg'] = $str['2'];


//echo $wetter['temp'];
//echo $wetter['verh'];
//echo $wetter['windr'];
//echo $wetter['windg'];
//echo '' . print_r($wetter, true) . '';

echo "Aktuelles Wetter ";
echo "";
echo "Temperatur: ";
echo  $wetter['temp']."\n";

echo "";
echo "Himmel: ";
echo  $wetter['verh']."\n";

echo "";
echo "Windgeschwindigkeit: ";
echo  $wetter['windg']." Km/h\n";

echo "";
echo "Windrichtung: ";
echo  $wetter['windr']."\n";

echo "";
echo "Luftfeuchtigkeit: ";
echo  $wetter['feuchte']."\n";
Nun habt ihr schon mal das ganze "drum herum" jedoch wahrscheinlich die falsche Stadt, es sei denn ihr wohnt in Langenfeld.

Schritt 2: Ihr geht auf diese Seite: http://deutsch.wunderground.com/global/DL.html
Unten ist nen Eingabefeld und gebt dort eure Stadt ein (am besten den Namen, mit PLZ kommt der nicht zurecht) und klickt auf schnellvorhersage. Wenn Ihr eure Stadt habt, findet ihr Rechts oben nen Link mit "RSS".
Du brauchst nur den RSS Link!

Schritt 3: Du editierst folgende Zeile:
Da trägst du logischerweise deinen Link ein. Achtung: Der link endet mit .xml. Das was hinter .xml kommt löscht ihr raus (oftmals steht da noch uncut=metric)

Schritt 4: Nur noch dem ganzen einen Namen geben, abspeichern und in bekannter Form in das Template oder Seite oder wo auch immer einfügen.

//Edit: ich hab mal ein paar Rechtschreibfehler korrigiert die bei der Übersetzung aufgetreten waren. Zudem hab ich noch ein Case mit "Regen" hinzugefügt.
Last edited by skibby on Wed Aug 18, 2010 12:28 pm, edited 1 time in total.
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am
Location: Berlin

Re: HowTo: Wetterdaten einbinden

Post by nicmare »

wollte das gerade mal für Kassel ausprobieren und kriege:

Code: Select all

Warning: file() [function.file]: URL file-access is disabled in the server configuration in /home/www/url.de/htdocs/lib/content.functions.php(771) : eval()'d code on line 3

Warning: file(http://rss.wunderground.com/auto/rss_full/global/stations/10438.xml) [function.file]: failed to open stream: no suitable wrapper could be found in /home/www/url.de/htdocs/lib/content.functions.php(771) : eval()'d code on line 3

Warning: implode() [function.implode]: Bad arguments. in /home/www/url.de/htdocs/lib/content.functions.php(771) : eval()'d code on line 3
wäre schön wenn das klappen würde :)
NaN

Re: HowTo: Wetterdaten einbinden

Post by NaN »

"URL file-access is disabled in the server configuration" sagt doch schon alles.
Eine bestimmte Option ist bei Deinem Server deaktviert.
Das wird die gleiche sein, die man für den ModuleManager braucht.
Ich wette der geht bei Dir auch nicht, oder?
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am
Location: Berlin

Re: HowTo: Wetterdaten einbinden

Post by nicmare »

doch der geht problemlos
NaN

Re: HowTo: Wetterdaten einbinden

Post by NaN »

Das ändert aber nichts daran, dass Dein Provider die Verwendung von URLs bei der php-Funktion file() deaktiviert zu haben scheint.
Der ModuleManager verwendet andere Funktionen, um Daten vom CMSms herunterzuladen.

Versuch mal in der dritten Zeile des UDTs anstelle von

Code: Select all


$content = implode("", file($url)); 

das hier:

Code: Select all


$content = file_get_contents($url);

Oder so:

Code: Select all


$content = '';
if ($fp = @fopen($url, 'r')) {
	while ($data = fread($fp)) {
		$content .= $data;
	} 
	fclose($fp);
}
else
	return;

Noch besser wäre natürlich, gleich das SOAP Modul dazu zu verwenden (dazu ist es ja schließlich da), aber damit kenne ich mich noch nicht aus.
cyberman

Re: HowTo: Wetterdaten einbinden

Post by cyberman »

Danke für dein HowTo - überlege gerade, wie man es etwas besser "konservieren" könnte. In den Untiefen des Forums geht es so schnell verloren ...
nicmare
Power Poster
Power Poster
Posts: 1150
Joined: Sat Aug 25, 2007 9:55 am
Location: Berlin

Re: HowTo: Wetterdaten einbinden

Post by nicmare »

@NaN, erste Methode hat auch Fehler ergeben und bei der zweiten wurde garnichts vom Tag ausgegeben?! Aber ist auch nicht so schlimm! Bei diesem server kann ich auch nen anderes Script verwenden.
skibby
Forum Members
Forum Members
Posts: 84
Joined: Sat Oct 04, 2008 11:03 pm

Re: HowTo: Wetterdaten einbinden

Post by skibby »

Wie wäre es denn mit einem eigenen Foren Eintrag? HowTo-Do's oder ähnliches.

Jedes HowTo mit nem Sticky zu versehen, macht vielleicht nicht so viel Sinn.
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm
Location: Schweiz / Switzerland

Re: HowTo: Wetterdaten einbinden

Post by nockenfell »

skibby wrote: Wie wäre es denn mit einem eigenen Foren Eintrag? HowTo-Do's oder ähnliches.

Jedes HowTo mit nem Sticky zu versehen, macht vielleicht nicht so viel Sinn.
Gute Idee
[this message is written with 100% recycled bits]
cyberman

Re: HowTo: Wetterdaten einbinden

Post by cyberman »

skibby wrote: Jedes HowTo mit nem Sticky zu versehen, macht vielleicht nicht so viel Sinn.
Meine Meinung ;) - ich versuchs mal mit 'nem neuen Board (in der Hoffnung, das es dort etwas übersichtlicher bleibt).
rolwalca
Forum Members
Forum Members
Posts: 16
Joined: Tue Sep 15, 2009 12:26 pm

Re: HowTo: Wetterdaten einbinden

Post by rolwalca »

Hallo zusammen,

ich habe versucht die Wetterdaten bei einer Seite einzubinden. Ich scheitere leider schon beim Versuch den benutzdefenierten Tag zu erstellen. Es kommt die Fehlermeldung:

Code: Select all

 Es wurde fehlerhafter Code eingegeben.
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /home/www/web193/html/admin/adduserplugin.php(100) : eval()'d code on line 221 
Was mache ich falsch ??? ?
Post Reply

Return to “HowTo's”