Tutorial - Wetterdaten und Datenbanken - Teil 3.2 - Tabelle mit Livedaten füllen

Teil 3.2 - Tabelle mit Livedaten füllen


Achtung: Neue und aktualisierte Versionen der Tutorials finden Sie hier:

http://www.pscl.ch


Diese Methode unterscheidet sich nur geringfügig vom Beispiel in Teil 3.1. Dieses sollte daher vor dieser Anleitung durchgespielt werden.

Möchte man die Tabelle mit unseren Wetterdaten aktuell halten, gibt es diverse Methoden. Hier sei nur eine erklärt.

Es ist anzumerken das die folgende Methode eine Software benötigt welche Dateien Zeitgesteuert über z.B. FTP übertragen kann. Zudem werden cronjobs benötigt.

Um ein möglichst kleines Transfervolumen erreichen zu können, sollte die Software zudem in der Lage sein, bei erfolgreicher Übertragung die Datei zu löschen.

Leider kann ich diesbezüglich keine Empfehlung abgegeben. Ich für meine Zwecke, habe ein kleines Tool programmiert, welches die oben genannten Aufgaben übernimmt. Evtl. kann ich diese Software später freigeben, falls sich hier keine alternative findet. (Kommentare dazu ?)



1. Voraussetzungen


1. Zeitgesteuerte Übertragung von Dateien

2. Cronjobs


2. Datenquelle


Als Datenquelle eignet sich ws_newdata.csv von WsWin im Besonderen. Durch die Verwendung von dieser Datei lassen sich auch Übertragungsfehler überbrücken. ws_newdata.csv wird ja von WsWin ständig mit den neusten Datenreihen gefüllt. Löscht man diese Datei, wird automatisch eine neue erstellt und wieder weiter aufgefüllt.


ws_newdata.csv von WsWin



(Es können aber auch benutzerdefinierte Dateien von WsWin verwendet werden.) 


3. Datei übertragen


Die Datei, hier ws_newdata.csv, wird auf den Server übertragen. Die Intervalle können Sie prinzipiell frei wählen, ich gehe hier von 5 Minuten aus. Da diese Datei immer grösser wird, empfiehlt es sich, diese nach einer erfolgreichen Übertragung zu löschen. Somit enthält die Datei immer nur die noch nicht übertragenen Zeilen.

Fällt die Übertragung einmal aus, Puffert WsWin die Zeilen in der ws_newdata.csv bis wieder eine erfolgreiche Übertragung zustande kommt.



4. Die Datei importieren


Wir verwenden das selbe Script wie in Teil 3.1. Speichern wir es in einer neuen php Datei erneut ab

In dieser neuen php Datei, müssen wir jedoch noch den Dateinamen (der zu importierenden Datei), die Startzeile und evtl. die Spaltennummern in der Query anpassen:


//Dateiname der Importdatei
$dateiname = "ws_newdata.csv";

//Anzahl Anfang Zeilen überspringen
$startzeile = 3;


Auch die Spaltennummern in der query auf die richtigen Werte überprüfen:
$query = "
INSERT INTO wettertabelle 
(`dateid`,`datetime`,`temp`,`hum`,`pressure`) 
VALUES
('$d1','$data[3]','$data[10]','$data[11]')
";

mysqli_query($link,$query);



5. Die Datei löschen (Optional)


Wir haben sichergestellt das die Tabelle keine doppelten Einträge aufnimmt. Dennoch sollten wir verhindern, dass importierte Dateien nicht noch einmal aufgerufen werden. Wir löschen also nach einem erfolgreichem Import die ws_newdata.csv

//Import Datei schließen
fclose($handle);
unlink('ws_newdata.csv');
?>


6. cronjob/crontab


Unsere neue php Importdatei, muss nun in Intervallen aufgerufen/geöffnet werden.
Wir erstellen daher einen Cronjob, welcher die vorhin erstellte .php Datei, in Intervallen aufruft. Dabei muss sichergestellt sein, das jede Datei importiert wird, bevor jeweils eine neue eintrifft. Wir überprüfen ja die Übertragung, aber nicht das eigentliche Eintragen. Ich führe daher meine Datei jede Minute aus.

Beachte: Die Erstellung von Cronjobs ist nicht bei jedem Host Provider gleich. Kontaktieren Sie bei Unklarheiten Ihren Provider.

Hier ein Beispiel eines cronjobs:



Der Befehl im Detail:
/usr/bin/php5 /home/www/webxx1/html/wetterseite/import/import-live.php >& /dev/null
(Dateiname und Verzeichnis anpassen)


keine Cronjobs möglich ?


Es gibt diverse Software und auch Webdienste, welche das Aufrufen der Datei in Intervallen übernehmen können. Ich möchte dazu aber keine Empfehlung abgeben.






1 Kommentar:

  1. zu Punkt 6 Cronjob
    WinSCP (Uploader) kann vor dem Upload prüfen, ob die Datei bereits auf dem Server liegt und falls JA, dann den Upload verweigern. Das Einlesen in die DB muss also nicht minütlich erfolgen, um doppelte Eintrgäge zu vermeiden.

    AntwortenLöschen