Update of /cvsroot/phpweather/phpweather
In directory usw-pr-cvs1:/tmp/cvs-serv3280
Modified Files:
data_retrieval.php db_mysql.php db_none.php db_pgsql.php
index.php locale_common.php locale_en.php
Log Message:
The timestamp is now given to the database object as a regular UNIX
timestamp. Also, this fixes some issues with the runway-parsing.
Index: data_retrieval.php
===================================================================
RCS file: /cvsroot/phpweather/phpweather/data_retrieval.php,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- data_retrieval.php 2001/03/24 16:40:41 1.2
+++ data_retrieval.php 2001/04/02 19:34:20 1.3
@@ -108,17 +108,24 @@
return false;
}
- if (list($metar, $timestamp) = $this->db->get_metar($this->get_station())) { /*
found station */
-
+ if ($data = $this->db->get_metar($this->get_station())) { /* found station */
+ $this->notice('Found the METAR in the database');
+ list($metar, $timestamp) = $data;
+ /* We set the METAR right away, and then count on
+ * get_metar_from_web() to set it to something else, if
+ * necessary.
+ */
+ $this->metar = $metar;
if ($this->properties['always_use_db'] || $timestamp > time() - 3600) {
- /* We have asked explicit for a cached metar, or the METAR is still fresh.
- * Either way - we return the METAR we found in the database.*/
- $this->notice('Using previously cached METAR for <code>' .
$this->get_station() . '</code>');
- $this->metar = $metar;
+ /* We have asked explicit for a cached metar, or the METAR is
+ * still fresh. Either way - we return the METAR we found in
+ * the database.
+ */
+ $this->notice('Using previously cached METAR for <code>' .
+$this->get_station() . '</code>. The METAR expires in ' . ($timestamp + 3600 -
+time()) . ' seconds.');
return $metar;
} else {
/* The METAR is too old, so we fetch a new */
- $this->notice('The METAR was too old for <code>' . $this->get_station() .
'</code>');
+ $this->notice('The METAR for <code>' . $this->get_station() . '</code> was ' .
+(time() - 3600 - $timestamp) . ' seconds too old.');
return $this->get_metar_from_web(false);
}
} else {
@@ -131,7 +138,7 @@
/**
* Fetches a METAR for the Internet.
*
- * The METAR if fetched via HTTP from the National Weather Services public server
at http://weather.noaa.gov.
+ * The METAR is fetched via HTTP from the National Weather Services public server
+at http://weather.noaa.gov.
*
* @param boolean Should the station be inserted into the database, or should we
update an all ready existing entry?
* @return string The raw METAR.
@@ -149,7 +156,8 @@
list(, $date) = each($file);
$date = trim($date);
/* The next lines are the METAR it self. We make sure that we
- * don't put a space infront of the first line */
+ * don't put a space infront of the first line
+ */
list(, $line) = each($file);
$metar = trim($line);
/* Then the rest of the lines... */
@@ -159,47 +167,48 @@
/* We don't want any double-spaces in our METAR */
$metar = str_replace(' ', ' ', $metar);
-
- /* The date is in the form 2000/10/09 14:50 UTC. This seperates */
- /* the different parts. */
- $date_parts = explode(':', strtr($date, '/ ', '::'));
- $date_unixtime = gmmktime($date_parts[3], $date_parts[4], 0, $date_parts[1],
$date_parts[2], $date_parts[0]);
- /* It might seam strange, that we make a local date, but MySQL
- * expects the time to be local, and not UTC. The same applies
- * for the other $date = date('Y/m/d H:i') statements. */
- $date = date('Y/m/d H:i', $date_unixtime);
+ $date = explode(':', strtr($date, '/ ', '::'));
+ $timestamp = gmmktime($date[3], $date[4], 0, $date[1], $date[2], $date[0]);
if (!ereg('[0-9]{6}Z', $metar)) {
/* Some reports dont even have a time-part, so we insert the
* current time. This might not be the time of the report, but
- * it was broken anyway :-) */
- $metar = gmdate('dHi', $date_unixtime) . 'Z ' . $metar;
+ * it was broken anyway :-)
+ */
+ $metar = gmdate('dHi', $timestamp) . 'Z ' . $metar;
}
- if ($date_unixtime < (time() - 3300)) {
- /* The timestamp in the metar is more than 55 minutes old. We
+ if ($timestamp < (time() - 3300)) {
+ /* The timestamp in the METAR is more than 55 minutes old. We
* adjust the timestamp, so that we won't try to fetch a new
* METAR within the next 5 minutes. After 5 minutes, the
- * timestamp will again be more than 1 hour old. */
- $date = date('Y/m/d H:i', time() - 3300);
+ * timestamp will again be more than 1 hour old.
+ */
+ $timestamp = time() - 3300;
}
} else {
- /* If we end up here, it means that there was no file, we then
- * set the metar to and empty string and. We set the date to
- * time() - 3000 to give the server 10 minutes of peace. If the
- * file is unavailable, we don't want to stress the server. */
- $metar = '';
- $date = date('Y/m/d H:i', time() - 3000);
+ /* If we end up here, it means that there was no file. If the
+ * station was a new station, we set the metar to an empty
+ * string, else we just use the old METAR. We adjust the time
+ * stored in the database in both cases, so that the server
+ * isn't stressed to much.
+ */
+ if ($new_station) {
+ $metar = '';
+ } else {
+ $metar = $this->metar;
+ }
+ $timestamp = time() - 3000;
}
/* We then cache the METAR in our database */
if ($new_station) {
$this->notice('Inserting new METAR for <code>' . $this->get_station() .
'</code>');
- $this->db->insert_metar($station, $metar, $date);
+ $this->db->insert_metar($station, $metar, $timestamp);
} else {
$this->notice('Updating METAR for <code>' . $this->get_station() . '</code>');
- $this->db->update_metar($station, $metar, $date);
+ $this->db->update_metar($station, $metar, $timestamp);
}
/* We update and return the METAR */
$this->metar = $metar;
Index: db_mysql.php
===================================================================
RCS file: /cvsroot/phpweather/phpweather/db_mysql.php,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- db_mysql.php 2001/03/28 13:31:57 1.2
+++ db_mysql.php 2001/04/02 19:34:20 1.3
@@ -1,8 +1,8 @@
<?php
/**
- * This class is the 'mysql' database-type
+ * This class is the 'mysql' database-type.
*
- * It implements all the methods necessary to insert, update and retrive METARs using
a MySQL database.
+ * It implements all the methods necessary to insert, update and retrive METARs using
+a MySQL database. You'll need access to a MySQL database to be able to use this
+object.
*
* @author Martin Geisler <[EMAIL PROTECTED]>
* @version $Id$
@@ -144,7 +144,7 @@
* @see update_metar()
*/
function insert_metar($station, $metar, $timestamp) {
- $this->query("INSERT INTO metars SET station = '$station', metar = '$metar',
timestamp = '$timestamp'");
+ $this->query("INSERT INTO metars SET station = '$station', metar = '$metar',
+timestamp = FROM_UNIXTIME($timestamp)");
}
@@ -158,7 +158,7 @@
* @see insert_metar()
*/
function update_metar($station, $metar, $timestamp) {
- $this->query("UPDATE metars SET metar = '$metar', timestamp = '$timestamp' WHERE
station = '$station'");
+ $this->query("UPDATE metars SET metar = '$metar', timestamp =
+FROM_UNIXTIME($timestamp) WHERE station = '$station'");
}
/**
Index: db_none.php
===================================================================
RCS file: /cvsroot/phpweather/phpweather/db_none.php,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- db_none.php 2001/04/02 15:55:40 1.4
+++ db_none.php 2001/04/02 19:34:20 1.5
@@ -29,6 +29,19 @@
}
/**
+ * Pretends to establish a connection to the database.
+ *
+ * Like all the other methods of this database object, this doesn't do anything
+useful.
+ *
+ * @return boolean Always returns true, so that other functions that depends on a
+connection to the database doesn't fail because of this.
+ * @access public
+ */
+ function connect() {
+ return true;
+ }
+
+
+ /**
* Pretends to insert a METAR into the database.
*
* @param string The ICAO of the station.
Index: db_pgsql.php
===================================================================
RCS file: /cvsroot/phpweather/phpweather/db_pgsql.php,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -3 -r1.1.1.1 -r1.2
--- db_pgsql.php 2001/03/22 18:04:10 1.1.1.1
+++ db_pgsql.php 2001/04/02 19:34:21 1.2
@@ -144,7 +144,7 @@
* @see update_metar()
*/
function insert_metar($station, $metar, $timestamp) {
- $this->query("INSERT INTO metars SET station = '$station', metar = '$metar',
timestamp = '$timestamp'");
+ $this->query("INSERT INTO metars SET station = '$station', metar = '$metar',
+timestamp = FROM_UNIXTIME($timestamp)");
}
Index: index.php
===================================================================
RCS file: /cvsroot/phpweather/phpweather/index.php,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- index.php 2001/03/22 18:09:19 1.2
+++ index.php 2001/04/02 19:34:21 1.3
@@ -16,6 +16,7 @@
require('db_common.php');
require('db_mysql.php');
require('db_none.php');
+require('db_dba.php');
require('db_layer.php');
require('data_retrieval.php');
require('metar_parser.php');
@@ -23,7 +24,7 @@
require('locale_en.php');
require('phpweather.php');
-//define('DEBUG', true);
+define('DEBUG', true);
$properties = array('db_hostname' => 'localhost',
@@ -32,7 +33,9 @@
'db_password' => '',
/*If you set this to 'mysql', you'll need to fill
in the other 'db_*' properties. */
- 'db_type' => 'none',
+ 'db_type' => 'dba',
+ 'db_handler' => 'gdbm',
+ 'db_path' => './phpweather.db',
'mark_begin' => '<font color="red">',
'mark_end' => '</font>',
'pref_units' => 'both_imperial',
@@ -54,25 +57,24 @@
$obj->get_metar();
/* Checkpoint, we store the time */
-$time[] = array(microtime(), 'METAR-retrieval');
+$time[] = array(microtime(), 'METAR retrieval');
$obj->decode_metar();
/* Checkpoint, we store the time */
-$time[] = array(microtime(), 'decode');
+$time[] = array(microtime(), 'decoding');
$obj->print_pretty();
-$obj->print_table();
-
/* Checkpoint, we store the time */
-$time[] = array(microtime(), 'pretty-print.');
+$time[] = array(microtime(), 'pretty-print finished');
+/*
echo "<pre>\n";
print_r($obj->decode_metar());
echo "</pre>\n";
-
+*/
$max = count($time) - 1;
for ($i = 0; $i < $max; $i++) {
Index: locale_common.php
===================================================================
RCS file: /cvsroot/phpweather/phpweather/locale_common.php,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- locale_common.php 2001/03/26 20:18:26 1.3
+++ locale_common.php 2001/04/02 19:34:21 1.4
@@ -378,29 +378,37 @@
$approach = $this->strings['runway_right'];
} else {
$approach = '';
- error("parse_runway_group(): \$approach not recognized: $approach");
+ $this->error("parse_runway_group(): \$approach not recognized: $approach");
}
if (!empty($min_meter)) {
- $min_tendency_str = runway_tendency($min_tendency,
$this->properties['mark_begin'], $this->properties['mark_end']);
- $max_tendency_str = runway_tendency($max_tendency,
$this->properties['mark_begin'], $this->properties['mark_end']);
-
-
- $output = $this->strings['between'] .
- $this->pref_units($this->properties['mark_begin'] . $min_meter .
- $this->properties['mark_end'] . $this->strings['meters'],
- $this->properties['mark_begin'] . $min_ft .
- $this->properties['mark_end'] . $this->strings['feet']) .
- $min_tendency_str . $this->strings['and'] .
- $this->pref_units($this->properties['mark_begin'] . $max_meter .
- $this->properties['mark_end'] . $this->strings['meters'],
- $this->properties['mark_begin'] . $max_ft .
- $this->properties['mark_end'] . $this->strings['feet']) .
- $max_tendency_str . $this->strings['runway_for_runway'] .
- $this->properties['mark_begin'] . $nr . $approach .
$this->properties['mark_end'];
- } else {
+ if (!empty($min_tendency)) {
+ $min_tendency_str = $this->runway_tendency($min_tendency);
+ } else {
+ $min_tendency_str = '';
+ }
+
+ if (!empty($max_tendency)) {
+ $max_tendency_str = $this->runway_tendency($max_tendency);
+ } else {
+ $max_tendency_str = '';
+ }
+ $output = $this->strings['runway_between'] .
+ $this->pref_units($this->properties['mark_begin'] . $min_meter .
+ $this->properties['mark_end'] . $this->strings['meters'],
+ $this->properties['mark_begin'] . $min_ft .
+ $this->properties['mark_end'] . $this->strings['feet']) .
+ $min_tendency_str . $this->strings['and'] .
+ $this->pref_units($this->properties['mark_begin'] . $max_meter .
+ $this->properties['mark_end'] . $this->strings['meters'],
+ $this->properties['mark_begin'] . $max_ft .
+ $this->properties['mark_end'] . $this->strings['feet']) .
+ $max_tendency_str . $this->strings['runway_for_runway'] .
+ $this->properties['mark_begin'] . $nr . $approach .
+$this->properties['mark_end'];
+ } else {
+
$tendency = $this->runway_tendency($tendency);
$output = $this->pref_units($this->properties['mark_begin'] . $meter .
@@ -790,11 +798,19 @@
**************************/
if (!in_array('runway', $this->properties['exclude']) &&
!empty($runway_group1)) {
+
+ $runway_str1 = $runway_str2 = $runway_str3 = $runway_str4 = '';
$runway_str1 = $this->parse_runway_group($runway_group1);
- $runway_str2 = $this->parse_runway_group($runway_group2);
- $runway_str3 = $this->parse_runway_group($runway_group3);
- $runway_str4 = $this->parse_runway_group($runway_group4);
+ if (!empty($runway_group2)) {
+ $runway_str2 = $this->parse_runway_group($runway_group2);
+ if (!empty($runway_group3)) {
+ $runway_str3 = $this->parse_runway_group($runway_group3);
+ if (!empty($runway_group4)) {
+ $runway_str4 = $this->parse_runway_group($runway_group4);
+ }
+ }
+ }
$output['runway'] = $this->strings['runway_visibility'] .
Index: locale_en.php
===================================================================
RCS file: /cvsroot/phpweather/phpweather/locale_en.php,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- locale_en.php 2001/03/30 13:25:36 1.2
+++ locale_en.php 2001/04/02 19:34:21 1.3
@@ -92,7 +92,7 @@
$this->strings['cloud_clear'] = 'The sky was %sclear%s.';
$this->strings['cloud_height'] = ' clouds at a height of ';
$this->strings['cloud_overcast'] = 'the sky was %sovercast%s from a height of ';
- $this->strings['cloud_vertical_visibility'] = 'the %svertical visibility%s was';
+ $this->strings['cloud_vertical_visibility'] = 'the %svertical visibility%s was ';
$this->strings['cloud_condition'] =
array(
'SKC' => 'clear',
@@ -137,12 +137,13 @@
'SQ' => 'squalls ',
'FC' => 'funnel cloud tornado waterspout ',
'SS' => 'sandstorm/duststorm ');
- $this->strings['visibility'] = 'The visibility was ';
+ $this->strings['visibility'] = 'The overall visibility was ';
$this->strings['visibility_greater_than'] = 'greater than ';
$this->strings['visibility_less_than'] = 'less than ';
$this->strings['runway_upward_tendency'] = ' with an %supward%s tendency';
$this->strings['runway_downward_tendency'] = ' with a %sdownward%s tendency';
$this->strings['runway_no_tendency'] = ' with %sno distinct%s tendency';
+ $this->strings['runway_between'] = 'between ';
$this->strings['runway_left'] = ' left';
$this->strings['runway_central'] = ' central';
$this->strings['runway_right'] = ' right';
_______________________________________________
PHPWeather-checkins mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/phpweather-checkins