Anleitung verbessert, objektorientiert als Vorbereitung auf Cookie Unterstützung
This commit is contained in:
parent
44cc4ede73
commit
376320f186
4 changed files with 114 additions and 98 deletions
21
README.md
21
README.md
|
@ -1,10 +1,14 @@
|
|||
Fahrradwetter
|
||||
=============
|
||||
# Fahrradwetter
|
||||
|
||||
Kann man mit dem Fahrrad fahren?
|
||||
|
||||
Cronjob
|
||||
========
|
||||
## Anleitung
|
||||
|
||||
* Dateien auf den Server laden (README.md, und Screenshot.png nicht benötigt)
|
||||
* Cronjob anlegen
|
||||
* 10 Minuten warten
|
||||
|
||||
## Cronjob
|
||||
|
||||
Erstelle einen Cronjob:
|
||||
|
||||
|
@ -13,15 +17,14 @@ Erstelle einen Cronjob:
|
|||
Beispiel:
|
||||
*/10 * * * * wget -N --quiet --output-document=/var/www/customers/cust123/html/bike/api.json http://api.wunderground.com/api/abc1234def/forecast10day/q/DE/Leipzig.json
|
||||
|
||||
Die Datei api.json und index.php müssen im gleichen Verzeichnis liegen und vom Webserver lesbar sein. Zudem muss api.json durch den Nutzer des Cronjobs beschreibbar sein.
|
||||
Alle Dateien müssen im gleichen Verzeichnis liegen und vom Webserver lesbar sein. Zudem muss api.json durch den Nutzer des Cronjobs beschreibbar sein.
|
||||
|
||||
## Screenshot / Demo
|
||||
|
||||
Screenshot / Demo
|
||||
==========
|
||||
![Alt text](screenshot.png)
|
||||
|
||||
Demo unter http://fahrradwetter.mainboarder.de/
|
||||
|
||||
Lizenz
|
||||
=======
|
||||
## Lizenz
|
||||
|
||||
Nicht militärische und nicht geheimdienstliche Nutzung und Weiterentwicklung für jedermann entgeltfrei erlaubt, solange die Hinweise des Urhebers nicht entfernt werden.
|
||||
|
|
0
api.json
Normal file
0
api.json
Normal file
102
index.php
102
index.php
|
@ -25,103 +25,27 @@ define('WETTERSTATION', 'http://www.wunderground.com/cgi-bin/findweather/hdfFore
|
|||
*/
|
||||
define('STADT', 'Leipzig');
|
||||
|
||||
/**
|
||||
* Erhalte die Wetterdaten und baue ein Array
|
||||
*
|
||||
* @param string Stadtname
|
||||
* @return array Wetterdaten
|
||||
*/
|
||||
function getWeather(){
|
||||
// JSON holen
|
||||
$json_string = file_get_contents('api.json');
|
||||
$parsed_json = json_decode($json_string, true);
|
||||
|
||||
// Daten aus JSON für die nächsten vier Tage holen
|
||||
for($i = 0; $i <= 9; $i++){
|
||||
$rain[$i] = $parsed_json['forecast']['simpleforecast']
|
||||
['forecastday'][$i]['pop'];
|
||||
$icon[$i] = $parsed_json['forecast']['simpleforecast']
|
||||
['forecastday'][$i]['icon_url'];
|
||||
$day[$i] = $parsed_json['forecast']['simpleforecast']
|
||||
['forecastday'][$i]['date']['weekday'];
|
||||
$tempHi[$i] = $parsed_json['forecast']['simpleforecast']
|
||||
['forecastday'][$i]['high']['celsius'];
|
||||
|
||||
// Fahrradwetter? - Grundsätzlich ja.
|
||||
$fahrrad = '<b>Ja</b>';
|
||||
|
||||
// Vielleicht, wenn Regenwahrscheinlichkeit größer als 40% oder
|
||||
// Temperaturen nicht zwischen 15 und 24°C
|
||||
if($rain[$i] >= 40 || $tempHi[$i] <= 15 || $tempHi[$i] > 24){
|
||||
$fahrrad = '<a href="'. WETTERSTATION .'">Vielleicht</a>';
|
||||
}
|
||||
// Kein Fahrradwetter, wenn Regenwahrscheinlichkeit über 55%
|
||||
// oder Temperaturen nicht zwischen 10 und 27°C
|
||||
if($tempHi[$i] >= 27 || $tempHi[$i] <= 10 || $rain[$i] >= 55){
|
||||
$fahrrad = 'Nein';
|
||||
}
|
||||
|
||||
// Array mit den Daten für einen Tag zusammenbauen
|
||||
$wetter[$i] =
|
||||
array(
|
||||
'rain' => $rain[$i],
|
||||
'icon' => $icon[$i],
|
||||
'day' => $day[$i],
|
||||
'tempHi' => $tempHi[$i],
|
||||
'rad' => $fahrrad,
|
||||
);
|
||||
|
||||
// Arrays miteinander verknüpfen
|
||||
if(isset($wetter[$i-1])){
|
||||
array_merge($wetter[$i-1], $wetter[$i]);
|
||||
}
|
||||
}
|
||||
require_once('wetter.php');
|
||||
|
||||
return $wetter;
|
||||
}
|
||||
$daten = new wetter(WETTERSTATION, STADT);
|
||||
|
||||
/**
|
||||
* Erstelle eine Tabellenzeile aus einem Array
|
||||
*
|
||||
* @param array array Auszuwertendes Array mit den Daten
|
||||
* @param schluessel string Schlüssel nach dem im Array gesucht wird
|
||||
* @param stringVor string Zeichen die vor dem String auftauchen sollen
|
||||
* @param stringNach string Zeichen die nach dem String auftauchen sollen
|
||||
* @param first string Was soll einmalig am Anfang stehen
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function makeTable($array, $schluessel, $stringVor = NULL,
|
||||
$stringNach = NULL, $first = NULL){
|
||||
|
||||
$string = '<td>'.$first.'</td>';
|
||||
|
||||
foreach($array as $daten){
|
||||
$string .= '<td>';
|
||||
$string .= $stringVor . $daten[$schluessel] . $stringNach;
|
||||
$string .= '</td>';
|
||||
}
|
||||
|
||||
return '
|
||||
<tr>' . $string . '</tr>
|
||||
';
|
||||
}
|
||||
|
||||
$wetter = getWeather();
|
||||
$wetter = $daten->getWeather();
|
||||
|
||||
echo '<div class="container">
|
||||
<h2 class="text-center trigger"><a href="#">Fahrradwetter in '. STADT .'?</a> - '.$wetter[0]['rad'].'.</h2>
|
||||
<h2 class="text-center trigger"><a href="#">Fahrradwetter in '. STADT .
|
||||
'?</a> - '.$wetter[0]['rad'].'.</h2>
|
||||
<div class="toggle_container">
|
||||
<table class="table table-striped">';
|
||||
echo makeTable($wetter, 'day');
|
||||
echo makeTable($wetter, 'icon', '<img src="', '" alt="" />');
|
||||
echo makeTable($wetter, 'rain', NULL, '%', 'Regenwahrscheinlichkeit');
|
||||
echo makeTable($wetter, 'tempHi', NULL, '°C', 'Höchsttemperatur');
|
||||
echo makeTable($wetter, 'rad', NULL, NULL, 'Fahrradwetter');
|
||||
echo '
|
||||
</table>';
|
||||
echo $daten->makeTable($wetter, 'day');
|
||||
echo $daten->makeTable($wetter, 'icon', '<img src="', '" alt="" />');
|
||||
echo $daten->makeTable($wetter, 'rain', NULL, '%', 'Regenwahrscheinlichkeit');
|
||||
echo $daten->makeTable($wetter, 'tempHi', NULL, '°C', 'Höchsttemperatur');
|
||||
echo $daten->makeTable($wetter, 'rad', NULL, NULL, 'Fahrradwetter');
|
||||
|
||||
?>
|
||||
|
||||
</table>
|
||||
|
||||
<p><br /></p>
|
||||
<div class="text-center bg-info"><p><small>Daten via <a href="http://www.wunderground.com/?apiref=5493fcc3357cb244">Wunderground</a>, alle 10 Minuten neu abgerufen.</small></p>
|
||||
<p>Fahrradwetter hat eine Regenwahrscheinlichkeit unter 40% und Temperaturen zwischen 15 und 24°C.</p>
|
||||
|
|
89
wetter.php
Normal file
89
wetter.php
Normal file
|
@ -0,0 +1,89 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Wetter
|
||||
*/
|
||||
class wetter {
|
||||
|
||||
/**
|
||||
* Erhalte die Wetterdaten und baue ein Array
|
||||
*
|
||||
* @param string Stadtname
|
||||
* @return array Wetterdaten
|
||||
*/
|
||||
function getWeather(){
|
||||
// JSON holen
|
||||
$json_string = file_get_contents('api.json');
|
||||
$parsed_json = json_decode($json_string, true);
|
||||
|
||||
// Daten aus JSON für die nächsten vier Tage holen
|
||||
for($i = 0; $i <= 9; $i++){
|
||||
$rain[$i] = $parsed_json['forecast']['simpleforecast']
|
||||
['forecastday'][$i]['pop'];
|
||||
$icon[$i] = $parsed_json['forecast']['simpleforecast']
|
||||
['forecastday'][$i]['icon_url'];
|
||||
$day[$i] = $parsed_json['forecast']['simpleforecast']
|
||||
['forecastday'][$i]['date']['weekday'];
|
||||
$tempHi[$i] = $parsed_json['forecast']['simpleforecast']
|
||||
['forecastday'][$i]['high']['celsius'];
|
||||
|
||||
// Fahrradwetter? - Grundsätzlich ja.
|
||||
$fahrrad = '<b>Ja</b>';
|
||||
|
||||
// Vielleicht, wenn Regenwahrscheinlichkeit größer als 40% oder
|
||||
// Temperaturen nicht zwischen 15 und 24°C
|
||||
if($rain[$i] >= 40 || $tempHi[$i] <= 15 || $tempHi[$i] > 24){
|
||||
$fahrrad = '<a href="'. WETTERSTATION .'">Vielleicht</a>';
|
||||
}
|
||||
// Kein Fahrradwetter, wenn Regenwahrscheinlichkeit über 55%
|
||||
// oder Temperaturen nicht zwischen 10 und 27°C
|
||||
if($tempHi[$i] >= 27 || $tempHi[$i] <= 10 || $rain[$i] >= 55){
|
||||
$fahrrad = 'Nein';
|
||||
}
|
||||
|
||||
// Array mit den Daten für einen Tag zusammenbauen
|
||||
$wetter[$i] =
|
||||
array(
|
||||
'rain' => $rain[$i],
|
||||
'icon' => $icon[$i],
|
||||
'day' => $day[$i],
|
||||
'tempHi' => $tempHi[$i],
|
||||
'rad' => $fahrrad,
|
||||
);
|
||||
|
||||
// Arrays miteinander verknüpfen
|
||||
if(isset($wetter[$i-1])){
|
||||
array_merge($wetter[$i-1], $wetter[$i]);
|
||||
}
|
||||
}
|
||||
|
||||
return $wetter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Erstelle eine Tabellenzeile aus einem Array
|
||||
*
|
||||
* @param array array Auszuwertendes Array mit den Daten
|
||||
* @param schluessel string Schlüssel nach dem im Array gesucht wird
|
||||
* @param stringVor string Zeichen die vor dem String auftauchen sollen
|
||||
* @param stringNach string Zeichen die nach dem String auftauchen sollen
|
||||
* @param first string Was soll einmalig am Anfang stehen
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function makeTable($array, $schluessel, $stringVor = NULL,
|
||||
$stringNach = NULL, $first = NULL){
|
||||
|
||||
$string = '<td>'.$first.'</td>';
|
||||
|
||||
foreach($array as $daten){
|
||||
$string .= '<td>';
|
||||
$string .= $stringVor . $daten[$schluessel] . $stringNach;
|
||||
$string .= '</td>';
|
||||
}
|
||||
|
||||
return '
|
||||
<tr>' . $string . '</tr>
|
||||
';
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue