commit
96b8512e5e
|
@ -0,0 +1,29 @@
|
||||||
|
Current Weather
|
||||||
|
===============
|
||||||
|
|
||||||
|
If activated by your user this addon adds a widget to the users network tab
|
||||||
|
sidebar showing current weather informations (temperature, relative humidity,
|
||||||
|
wind conditions and preassure) from [OpenWeatherMap](http://openweathermap.org).
|
||||||
|
The user can configure the location as e.g. *Berlin,DE* or the zip code "14476,DE".
|
||||||
|
|
||||||
|
The language for the request at OpenWeatherMap is set to the UI language of
|
||||||
|
friendica. If the string for the description of the current weather conditions
|
||||||
|
is available in this language depends on OpenWeatherMap, fallback is english.
|
||||||
|
|
||||||
|
**You should get an APPID from OpenWeatherMap if you want to use this widget.**
|
||||||
|
You can register [here](http://openweathermap.org/register).
|
||||||
|
|
||||||
|
Credits
|
||||||
|
-------
|
||||||
|
|
||||||
|
* Tony Baldwin wrote the original addon for Friendica
|
||||||
|
* Fabio Comuni
|
||||||
|
* Tobias Diekershoff switched the sources to OpenWeatherMap after the original
|
||||||
|
provider turned off support for locations outside of the USA.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Localization does not work (Jul 15) data requested via XML are EN only but
|
||||||
|
have moew information available compared to data requested via JSON which is
|
||||||
|
available in other languages as well. Right now we use the XML dataset
|
|
@ -1,10 +1,11 @@
|
||||||
|
#curweather-network img {
|
||||||
#curtemp-settings-label, #curtemp-location-label, #curtemp-enable-label {
|
float: left;
|
||||||
float: left;
|
margin: 30px 10px;
|
||||||
width: 200px;
|
|
||||||
margin-bottom: 25px;
|
|
||||||
}
|
}
|
||||||
#curtemp-network {
|
ul.curweather-details li {
|
||||||
float: left;
|
list-type: none;
|
||||||
|
}
|
||||||
|
p.curweather-footer {
|
||||||
|
font-size: 0.8em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,29 +1,78 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Name: Current Weather
|
* Name: Current Weather
|
||||||
* Description: Shows current weather conditions for user's location on their network page.<br />Find the location code for the station or airport nearest you <a href="http://en.wikipedia.org/wiki/International_Air_Transport_Association_airport_code" target="_blank">here</a>.
|
* Description: Shows current weather conditions for user's location on their network page.
|
||||||
* Version: 1.0
|
* Version: 1.1
|
||||||
* Author: Tony Baldwin <http://friendica.tonybaldwin.info/u/t0ny>
|
* Author: Tony Baldwin <http://friendica.tonybaldwin.info/u/t0ny>
|
||||||
* Author: Fabio Comuni <http://kirkgroup.com/u/fabrixxm>
|
* Author: Fabio Comuni <http://kirkgroup.com/u/fabrixxm>
|
||||||
|
* Author: Tobias Diekershoff <https://f.diekershoff.de/u/tobias>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
require_once('addon/curweather/getweather.php');
|
|
||||||
|
require_once('include/network.php');
|
||||||
|
require_once("mod/proxy.php");
|
||||||
|
require_once('include/text.php');
|
||||||
|
|
||||||
|
// get the weather data from OpenWeatherMap
|
||||||
|
function getWeather( $loc, $units='metric', $lang='en', $appid='', $cachetime=0) {
|
||||||
|
$url = "http://api.openweathermap.org/data/2.5/weather?q=".$loc."&appid=".$appid."&lang=".$lang."&units=".$units."&mode=xml";
|
||||||
|
$cached = Cache::get('curweather'.md5($url));
|
||||||
|
$now = new DateTime();
|
||||||
|
if (!is_null($cached)) {
|
||||||
|
$cdate = get_pconfig(local_user(), 'curweather', 'last');
|
||||||
|
$cached = unserialize($cached);
|
||||||
|
if ($cdate + $cachetime > $now->getTimestamp()) {
|
||||||
|
return $cached;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
$res = new SimpleXMLElement(fetch_url($url));
|
||||||
|
} catch (Exception $e) {
|
||||||
|
info(t('Error fetching weather data.\nError was: '.$e->getMessage()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ((string)$res->temperature['unit']==='metric') {
|
||||||
|
$tunit = '°C';
|
||||||
|
$wunit = 'm/s';
|
||||||
|
} else {
|
||||||
|
$tunit = '°F';
|
||||||
|
$wunit = 'mph';
|
||||||
|
}
|
||||||
|
if ( trim((string)$res->weather['value']) == trim((string)$res->clouds['name']) ) {
|
||||||
|
$desc = (string)$res->clouds['name'];
|
||||||
|
} else {
|
||||||
|
$desc = (string)$res->weather['value'].', '.(string)$res->clouds['name'];
|
||||||
|
}
|
||||||
|
$r = array(
|
||||||
|
'city'=> (string) $res->city['name'][0],
|
||||||
|
'country' => (string) $res->city->country[0],
|
||||||
|
'lat' => (string) $res->city->coord['lat'],
|
||||||
|
'lon' => (string) $res->city->coord['lon'],
|
||||||
|
'temperature' => (string) $res->temperature['value'][0].$tunit,
|
||||||
|
'pressure' => (string) $res->pressure['value'].(string)$res->pressure['unit'],
|
||||||
|
'humidity' => (string) $res->humidity['value'].(string)$res->humidity['unit'],
|
||||||
|
'descripion' => $desc,
|
||||||
|
'wind' => (string)$res->wind->speed['name'].' ('.(string)$res->wind->speed['value'].$wunit.')',
|
||||||
|
'update' => (string)$res->lastupdate['value'],
|
||||||
|
'icon' => (string)$res->weather['icon']
|
||||||
|
);
|
||||||
|
set_pconfig(local_user(), 'curweather', 'last', $now->getTimestamp());
|
||||||
|
Cache::set('curweather'.md5($url), serialize($r));
|
||||||
|
return $r;
|
||||||
|
}
|
||||||
|
|
||||||
function curweather_install() {
|
function curweather_install() {
|
||||||
register_hook('network_mod_init', 'addon/curweather/curweather.php', 'curweather_network_mod_init');
|
register_hook('network_mod_init', 'addon/curweather/curweather.php', 'curweather_network_mod_init');
|
||||||
register_hook('plugin_settings', 'addon/curweather/curweather.php', 'curweather_plugin_settings');
|
register_hook('plugin_settings', 'addon/curweather/curweather.php', 'curweather_plugin_settings');
|
||||||
register_hook('plugin_settings_post', 'addon/curweather/curweather.php', 'curweather_plugin_settings_post');
|
register_hook('plugin_settings_post', 'addon/curweather/curweather.php', 'curweather_plugin_settings_post');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function curweather_uninstall() {
|
function curweather_uninstall() {
|
||||||
unregister_hook('network_mod_init', 'addon/curweather/curweather.php', 'curweather_network_mod_init');
|
unregister_hook('network_mod_init', 'addon/curweather/curweather.php', 'curweather_network_mod_init');
|
||||||
unregister_hook('plugin_settings', 'addon/curweather/curweather.php', 'curweather_plugin_settings');
|
unregister_hook('plugin_settings', 'addon/curweather/curweather.php', 'curweather_plugin_settings');
|
||||||
unregister_hook('plugin_settings_post', 'addon/curweather/curweather.php', 'curweather_plugin_settings_post');
|
unregister_hook('plugin_settings_post', 'addon/curweather/curweather.php', 'curweather_plugin_settings_post');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function curweather_network_mod_init(&$fk_app,&$b) {
|
function curweather_network_mod_init(&$fk_app,&$b) {
|
||||||
|
|
||||||
if(! intval(get_pconfig(local_user(),'curweather','curweather_enable')))
|
if(! intval(get_pconfig(local_user(),'curweather','curweather_enable')))
|
||||||
|
@ -31,27 +80,56 @@ function curweather_network_mod_init(&$fk_app,&$b) {
|
||||||
|
|
||||||
$fk_app->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $fk_app->get_baseurl() . '/addon/curweather/curweather.css' . '" media="all" />' . "\r\n";
|
$fk_app->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $fk_app->get_baseurl() . '/addon/curweather/curweather.css' . '" media="all" />' . "\r\n";
|
||||||
|
|
||||||
// the getweather file does all the work here
|
// $rpt value is needed for location
|
||||||
// the $rpt value is needed for location
|
// $lang will be taken from the browser session to honour user settings
|
||||||
// which getweather uses to fetch the weather data for weather and temp
|
// TODO $lang does not work if the default settings are used
|
||||||
|
// and not all response strings are translated
|
||||||
|
// $units can be set in the settings by the user
|
||||||
|
// $appid is configured by the admin in the admin panel
|
||||||
|
// those parameters will be used to get: cloud status, temperature, preassure
|
||||||
|
// and relative humidity for display, also the relevent area of the map is
|
||||||
|
// linked from lat/log of the reply of OWMp
|
||||||
$rpt = get_pconfig(local_user(), 'curweather', 'curweather_loc');
|
$rpt = get_pconfig(local_user(), 'curweather', 'curweather_loc');
|
||||||
$wxdata = GetWeather::get($rpt);
|
|
||||||
$temp = $wxdata['TEMPERATURE_STRING'];
|
|
||||||
$weather = $wxdata['WEATHER'];
|
|
||||||
$rhumid = $wxdata['RELATIVE_HUMIDITY'];
|
|
||||||
$pressure = $wxdata['PRESSURE_STRING'];
|
|
||||||
$wind = $wxdata['WIND_STRING'];
|
|
||||||
$curweather = '<div id="curweather-network" class="widget">
|
|
||||||
<div class="title tool">
|
|
||||||
<h4>'.t("Current Weather").'</h4></div>';
|
|
||||||
|
|
||||||
$curweather .= "Weather: $weather<br />
|
|
||||||
Temperature: $temp<br />
|
|
||||||
Relative Humidity: $rhumid<br />
|
|
||||||
Pressure: $pressure<br />
|
|
||||||
Wind: $wind";
|
|
||||||
|
|
||||||
$curweather .= '</div><div class="clear"></div>';
|
// set the language to the browsers language and use metric units
|
||||||
|
$lang = $_SESSION['language'];
|
||||||
|
$units = get_pconfig( local_user(), 'curweather', 'curweather_units');
|
||||||
|
$appid = get_config('curweather','appid');
|
||||||
|
$cachetime = intval(get_config('curweather','cachetime'));
|
||||||
|
if ($units==="")
|
||||||
|
$units = 'metric';
|
||||||
|
$ok = true;
|
||||||
|
|
||||||
|
$res = getWeather($rpt, $units, $lang, $appid, $cachetime);
|
||||||
|
if ($res===false)
|
||||||
|
$ok = false;
|
||||||
|
|
||||||
|
if ($ok) {
|
||||||
|
$t = get_markup_template("widget.tpl", "addon/curweather/" );
|
||||||
|
$curweather = replace_macros ($t, array(
|
||||||
|
'$title' => t("Current Weather"),
|
||||||
|
'$icon' => proxy_url('http://openweathermap.org/img/w/'.$res['icon'].'.png'),
|
||||||
|
'$city' => $res['city'],
|
||||||
|
'$lon' => $res['lon'],
|
||||||
|
'$lat' => $res['lat'],
|
||||||
|
'$description' => $res['descripion'],
|
||||||
|
'$temp' => $res['temperature'],
|
||||||
|
'$relhumidity' => array('caption'=>t('Relative Humidity'), 'val'=>$res['humidity']),
|
||||||
|
'$pressure' => array('caption'=>t('Pressure'), 'val'=>$res['pressure']),
|
||||||
|
'$wind' => array('caption'=>t('Wind'), 'val'=> $res['wind']),
|
||||||
|
'$lastupdate' => t('Last Updated').': '.$res['update'].'UTC',
|
||||||
|
'$databy' => t('Data by'),
|
||||||
|
'$showonmap' => t('Show on map')
|
||||||
|
));
|
||||||
|
} else {
|
||||||
|
$t = get_markup_template('widget-error.tpl', 'addon/curweather/');
|
||||||
|
$curweather = replace_macros( $t, array(
|
||||||
|
'$problem' => t('There was a problem accessing the weather data. But have a look'),
|
||||||
|
'$rpt' => $rpt,
|
||||||
|
'$atOWM' => t('at OpenWeatherMap')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
$fk_app->page['aside'] = $curweather.$fk_app->page['aside'];
|
$fk_app->page['aside'] = $curweather.$fk_app->page['aside'];
|
||||||
|
|
||||||
|
@ -63,6 +141,7 @@ function curweather_plugin_settings_post($a,$post) {
|
||||||
return;
|
return;
|
||||||
set_pconfig(local_user(),'curweather','curweather_loc',trim($_POST['curweather_loc']));
|
set_pconfig(local_user(),'curweather','curweather_loc',trim($_POST['curweather_loc']));
|
||||||
set_pconfig(local_user(),'curweather','curweather_enable',intval($_POST['curweather_enable']));
|
set_pconfig(local_user(),'curweather','curweather_enable',intval($_POST['curweather_enable']));
|
||||||
|
set_pconfig(local_user(),'curweather','curweather_units',trim($_POST['curweather_units']));
|
||||||
|
|
||||||
info( t('Current Weather settings updated.') . EOL);
|
info( t('Current Weather settings updated.') . EOL);
|
||||||
}
|
}
|
||||||
|
@ -73,36 +152,53 @@ function curweather_plugin_settings(&$a,&$s) {
|
||||||
if(! local_user())
|
if(! local_user())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Add our stylesheet to the curweather so we can make our settings look nice */
|
|
||||||
|
|
||||||
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/curweather/curweather.css' . '" media="all" />' . "\r\n";
|
|
||||||
|
|
||||||
/* Get the current state of our config variable */
|
/* Get the current state of our config variable */
|
||||||
|
|
||||||
$curweather_loc = get_pconfig(local_user(), 'curweather', 'curweather_loc');
|
$curweather_loc = get_pconfig(local_user(), 'curweather', 'curweather_loc');
|
||||||
|
$curweather_units = get_pconfig(local_user(), 'curweather', 'curweather_units');
|
||||||
|
$appid = get_config('curweather','appid');
|
||||||
|
if ($appid=="") {
|
||||||
|
$noappidtext = t('No APPID found, please contact your admin to optain one.');
|
||||||
|
} else {
|
||||||
|
$noappidtext = '';
|
||||||
|
}
|
||||||
$enable = intval(get_pconfig(local_user(),'curweather','curweather_enable'));
|
$enable = intval(get_pconfig(local_user(),'curweather','curweather_enable'));
|
||||||
$enable_checked = (($enable) ? ' checked="checked" ' : '');
|
$enable_checked = (($enable) ? ' checked="checked" ' : '');
|
||||||
|
|
||||||
|
// load template and replace the macros
|
||||||
/* Add some HTML to the existing form */
|
$t = get_markup_template("settings.tpl", "addon/curweather/" );
|
||||||
|
$s = replace_macros ($t, array(
|
||||||
$s .= '<div class="settings-block">';
|
'$submit' => t('Save Settings'),
|
||||||
$s .= '<h3>' . t('Current Weather') . '</h3>';
|
'$header' => t('Current Weather').' '.t('Settings'),
|
||||||
$s .= '<div id="curweather-settings-wrapper">';
|
'$noappidtext' => $noappidtext,
|
||||||
$s .= '<p>Find the location code for the airport/weather station nearest you <a href="http://en.wikipedia.org/wiki/International_Air_Transport_Association_airport_code" target="_blank">here</a>.</p>';
|
'$info' => t('Enter either the name of your location or the zip code.'),
|
||||||
$s .= '<label id="curweather-location-label" for="curweather_loc">' . t('Weather Location: ') . '</label>';
|
'$curweather_loc' => array( 'curweather_loc', t('Your Location'), $curweather_loc, t('Identifier of your location (name or zip code), e.g. <em>Berlin,DE</em> or <em>14476,DE</em>.') ),
|
||||||
$s .= '<input id="curweather-location" type="text" name="curweather_loc" value="' . $curweather_loc . '"/>';
|
'$curweather_units' => array( 'curweather_units', t('Units'), $curweather_units, t('select if the temperatur should be displayed in °C or °F'), array('metric'=>'°C', 'imperial'=>'°F')),
|
||||||
$s .= '<div class="clear"></div>';
|
'$enabled' => array( 'curweather_enable', t('Show weather data'), $enable, '')
|
||||||
$s .= '<label id="curweather-enable-label" for="curweather_enable">' . t('Enable Current Weather') . '</label>';
|
));
|
||||||
$s .= '<input id="curweather-enable" type="checkbox" name="curweather_enable" value="1" ' . $enable_checked . '/>';
|
return;
|
||||||
$s .= '<div class="clear"></div>';
|
|
||||||
|
|
||||||
$s .= '</div>';
|
|
||||||
|
|
||||||
/* provide a submit button */
|
|
||||||
|
|
||||||
$s .= '<div class="settings-submit-wrapper" ><input type="submit" name="curweather-settings-submit" class="settings-submit" value="' . t('Save Settings') . '" /></div></div>';
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
// Config stuff for the admin panel to let the admin of the node set a APPID
|
||||||
|
// for accessing the API of openweathermap
|
||||||
|
function curweather_plugin_admin_post (&$a) {
|
||||||
|
if(! is_site_admin())
|
||||||
|
return;
|
||||||
|
if ($_POST['curweather-submit']) {
|
||||||
|
set_config('curweather','appid',trim($_POST['appid']));
|
||||||
|
set_config('curweather','cachetime',trim($_POST['cachetime']));
|
||||||
|
info( t('Curweather settings saved.'.EOL));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function curweather_plugin_admin (&$a, &$o) {
|
||||||
|
if(! is_site_admin())
|
||||||
|
return;
|
||||||
|
$appid = get_config('curweather','appid');
|
||||||
|
$cachetime = get_config('curweather','cachetime');
|
||||||
|
$t = get_markup_template("admin.tpl", "addon/curweather/" );
|
||||||
|
$o = replace_macros ($t, array(
|
||||||
|
'$submit' => t('Save Settings'),
|
||||||
|
'$cachetime' => array('cachetime', t('Caching Interval'), $cachetime, t('For how long should the weather data be cached? Choose according your OpenWeatherMap account type.'), array('0'=>t('no cache'), '300'=>'5 '.t('minutes'), '900'=>'15 '.t('minutes'), '1800'=>'30 '.t('minutes'), '3600'=>'60 '.t('minutes'))),
|
||||||
|
'$appid' => array('appid', t('Your APPID'), $appid, t('Your API key provided by OpenWeatherMap'))
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
|
@ -1,230 +0,0 @@
|
||||||
<?php
|
|
||||||
/*
|
|
||||||
File Name: getweather.php
|
|
||||||
Author: Gary White
|
|
||||||
Original version: May 12, 2005
|
|
||||||
Last modified: August 7, 2008
|
|
||||||
|
|
||||||
Copyright (C) 2004-2008 Gary White
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License in the included gpl.txt file for
|
|
||||||
details.
|
|
||||||
|
|
||||||
See http://apptools.com/phptools/xml/weather/ for usage information
|
|
||||||
|
|
||||||
See http://weather.gov/data/current_obs/
|
|
||||||
Also see
|
|
||||||
http://weather.gov/alerts/
|
|
||||||
http://weather.gov/forecasts/xml/
|
|
||||||
|
|
||||||
Complete list of Weather stations available at
|
|
||||||
http://weather.gov/data/current_obs/index.xml
|
|
||||||
|
|
||||||
*/
|
|
||||||
class GetWeather {
|
|
||||||
|
|
||||||
// Initialize some variables
|
|
||||||
static $itemdata;
|
|
||||||
static $itemname;
|
|
||||||
static $wxdata;
|
|
||||||
|
|
||||||
|
|
||||||
function get($rpt) {
|
|
||||||
|
|
||||||
// URL for the XML file
|
|
||||||
$xmlurl="http://www.weather.gov/data/current_obs/$rpt.xml";
|
|
||||||
|
|
||||||
// Base url for the icons
|
|
||||||
$imgpath="http://weather.gov/weather/images/fcicons";
|
|
||||||
|
|
||||||
|
|
||||||
self::$itemdata="";
|
|
||||||
self::$itemname="";
|
|
||||||
self::$wxdata=array();
|
|
||||||
|
|
||||||
$icons=self::defineIcons();
|
|
||||||
$icon="";
|
|
||||||
$data="";
|
|
||||||
$report="";
|
|
||||||
|
|
||||||
// create a new CURL resource
|
|
||||||
if($ch = curl_init()) {
|
|
||||||
|
|
||||||
// set URL and other appropriate options
|
|
||||||
curl_setopt($ch, CURLOPT_URL, $xmlurl);
|
|
||||||
curl_setopt($ch, CURLOPT_HEADER, trus);
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
|
||||||
|
|
||||||
// grab URL and pass it to the browser
|
|
||||||
$data=curl_exec($ch);
|
|
||||||
|
|
||||||
$r=curl_getinfo($ch); //,CURLINFO_HTTP_CODE);
|
|
||||||
|
|
||||||
// close CURL resource, and free up system resources
|
|
||||||
curl_close($ch);
|
|
||||||
|
|
||||||
// Create an XML parser
|
|
||||||
$xml_parser = xml_parser_create();
|
|
||||||
|
|
||||||
// Use case-folding so we are sure to find the tag in $map_array
|
|
||||||
// This will force all tags to upper case so we don't have to worry
|
|
||||||
// about matching the case of the original in our tests.
|
|
||||||
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
|
|
||||||
|
|
||||||
// Assign the element starting and ending event handlers
|
|
||||||
xml_set_element_handler($xml_parser, array(self,"startElement"), array(self,"endElement"));
|
|
||||||
|
|
||||||
// Assign a function to handle character data
|
|
||||||
xml_set_character_data_handler($xml_parser, array(self,"characterData"));
|
|
||||||
|
|
||||||
// Parse the file. This will place the data into an associative
|
|
||||||
// array assigned to the self::$wxdata variable
|
|
||||||
xml_parse($xml_parser,$data,true);
|
|
||||||
|
|
||||||
// Free the parser object
|
|
||||||
xml_parser_free($xml_parser);
|
|
||||||
|
|
||||||
// The OBSERVATION_TIME field of the returned XML will be in the
|
|
||||||
// format "Last Updated on May 18, 8:53 am CDT"
|
|
||||||
// We're going to change the format a bit.
|
|
||||||
|
|
||||||
// Strip out the "Last Updated on " portion of the date/time
|
|
||||||
// so we can display that separately in our tabular output
|
|
||||||
$datetime=str_replace("Last Updated on ","",self::$wxdata['OBSERVATION_TIME']);
|
|
||||||
|
|
||||||
// We now have the format as "May 18, 8:53 am CDT"
|
|
||||||
// Now, get the time zone. It will be everything from
|
|
||||||
// the last space character to the end of the string.
|
|
||||||
$z=strrchr($datetime," ");
|
|
||||||
|
|
||||||
// Get the current year
|
|
||||||
$year=date("Y");
|
|
||||||
|
|
||||||
// Now, we stuff the year into the string, following the comma.
|
|
||||||
$datetime=str_replace(",",", $year",$datetime);
|
|
||||||
|
|
||||||
// This does leave a small potential issue where, if you get a
|
|
||||||
// report between midnight and 1 a.m. on January 1, or the server
|
|
||||||
// is in a significantly different time zone than the report it
|
|
||||||
// could be as late as 4 a.m. the year will be wrong because the
|
|
||||||
// report will be from the previous year. I suppose it would be
|
|
||||||
// possible to correct for that, but for that little bit, I'm
|
|
||||||
// not going to worry about it.
|
|
||||||
|
|
||||||
// Now, strip out the time zone
|
|
||||||
$datetime=str_replace($z,"",$datetime);
|
|
||||||
|
|
||||||
// Format the date and time the way we want it and add
|
|
||||||
// back the time zone
|
|
||||||
$datetime=date("l F j, Y g:i A",strtotime($datetime)).$z;
|
|
||||||
self::$wxdata['OBSERVATION_TIME']=$datetime;
|
|
||||||
|
|
||||||
// Get the WEATHER element
|
|
||||||
$wx=trim(self::$wxdata['WEATHER']);
|
|
||||||
|
|
||||||
// Now, get the icon to match the weather
|
|
||||||
foreach($icons as $k=>$i){
|
|
||||||
$a=explode(" | ",$i);
|
|
||||||
if(is_numeric(array_search($wx,$a))){
|
|
||||||
self::$wxdata['ICON']="$imgpath/$k.jpg";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Replace any null elements with "Not available"
|
|
||||||
foreach(array_keys(self::$wxdata) as $key){
|
|
||||||
self::$wxdata[$key]=self::$wxdata[$key]=="NULL"?"Not available":self::$wxdata[$key];
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we got humidity
|
|
||||||
if(is_numeric(self::$wxdata['RELATIVE_HUMIDITY']))
|
|
||||||
// Append a percent sign
|
|
||||||
self::$wxdata['RELATIVE_HUMIDITY'].="%";
|
|
||||||
|
|
||||||
// Do some formatting to make the output a little friendlier
|
|
||||||
if(self::$wxdata['VISIBILITY_MI']=="NA")
|
|
||||||
self::$wxdata['VISIBILITY']="Not available";
|
|
||||||
if(self::$wxdata['VISIBILITY']!="Not available")
|
|
||||||
self::$wxdata['VISIBILITY']=(1*self::$wxdata['VISIBILITY_MI'])." miles";
|
|
||||||
|
|
||||||
// If we got wind data
|
|
||||||
if(is_numeric(self::$wxdata['WIND_MPH'])){
|
|
||||||
// We're going to output wind data as both MPH from a cardinal direction
|
|
||||||
// and as Knots from a direction in degrees
|
|
||||||
|
|
||||||
// Calculate the value for Knots
|
|
||||||
self::$wxdata['WIND_KNOTS']=self::$wxdata['WIND_MPH']/1.15;
|
|
||||||
|
|
||||||
// Format the output
|
|
||||||
$wind=sprintf("From the %s at %d mph (%03.0f° at %d knots)",self::$wxdata['WIND_DIR'],self::$wxdata['WIND_MPH'],self::$wxdata['WIND_DEGREES'],self::$wxdata['WIND_KNOTS']);
|
|
||||||
|
|
||||||
// If we got a value for wind gusts
|
|
||||||
if(is_numeric(self::$wxdata['WIND_GUST_MPH']) && self::$wxdata['WIND_GUST_MPH']>0){
|
|
||||||
// add it into the wind string
|
|
||||||
$wind=str_replace("mph","gusting to ".self::$wxdata['WIND_GUST_MPH']." mph<br>", $wind);
|
|
||||||
$knots=sprintf("%d",self::$wxdata['WIND_GUST_MPH']/1.15);
|
|
||||||
$wind=str_replace("knots","gusting to $knots knots",$wind);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Otherwise, if wind is zero, we'll show "Calm"
|
|
||||||
$wind=self::$wxdata['WIND_MPH']=="Not available"?"Not available":"Calm";
|
|
||||||
} // Done with wind
|
|
||||||
self::$wxdata['WIND_STRING']=$wind;
|
|
||||||
|
|
||||||
} // Done getting and formatting the data
|
|
||||||
return self::$wxdata;
|
|
||||||
}
|
|
||||||
|
|
||||||
function startElement($parser, $name, $attrs) {
|
|
||||||
self::$itemname=$name;
|
|
||||||
self::$itemdata="";
|
|
||||||
}
|
|
||||||
|
|
||||||
function endElement($parser, $name) {
|
|
||||||
self::$wxdata[self::$itemname]=self::$itemdata;
|
|
||||||
self::$itemdata="";
|
|
||||||
}
|
|
||||||
|
|
||||||
function characterData($parser, $data) {
|
|
||||||
self::$itemdata.=$data;
|
|
||||||
}
|
|
||||||
|
|
||||||
function defineIcons(){
|
|
||||||
// See http://weather.gov/data/current_obs/weather.php for source data for this function
|
|
||||||
$retVal['bkn']="Mostly Cloudy | Mostly Cloudy with Haze | Mostly Cloudy and Breezy";
|
|
||||||
$retVal['skc']="Fair | Clear | Fair with Haze | Clear with Haze | Fair and Breezy | Clear and Breezy";
|
|
||||||
$retVal['few']="A Few Clouds | A Few Clouds with Haze | A Few Clouds and Breezy";
|
|
||||||
$retVal['sct']="Partly Cloudy | Party Cloudy with Haze | Partly Cloudy and Breezy";
|
|
||||||
$retVal['ovc']="Overcast | Overcast with Haze | Overcast and Breezy";
|
|
||||||
$retVal['nfg']="Fog/Mist | Fog | Freezing Fog | Shallow Fog | Partial Fog | Patches of Fog | Fog in Vicinity | Freezing Fog in Vicinity | Shallow Fog in Vicinity | Partial Fog in Vicinity | Patches of Fog in Vicinity | Showers in Vicinity Fog | Light Freezing Fog | Heavy Freezing Fog";
|
|
||||||
$retVal['smoke']="Smoke";
|
|
||||||
$retVal['fzra']="Freezing Rain | Freezing Drizzle | Light Freezing Rain | Light Freezing Drizzle | Heavy Freezing Rain | Heavy Freezing Drizzle | Freezing Rain in Vicinity | Freezing Drizzle in Vicinity";
|
|
||||||
$retVal['ip']="Ice Pellets | Light Ice Pellets | Heavy Ice Pellets | Ice Pellets in Vicinity | Showers Ice Pellets | Thunderstorm Ice Pellets | Ice Crystals | Hail | Small Hail/Snow Pellets | Light Small Hail/Snow Pellets | Heavy Small Hail/Snow Pellets | Showers Hail | Hail Showers";
|
|
||||||
$retVal['mix']="Freezing Rain Snow | Light Freezing Rain Snow | Heavy Freezing Rain Snow | Freezing Drizzle Snow | Light Freezing Drizzle Snow | Heavy Freezing Drizzle Snow | Snow Freezing Rain| Light Snow Freezing Rain | Heavy Snow Freezing Rain | Snow Freezing Drizzle | Light Snow Freezing Drizzle | Heavy Snow Freezing Drizzle";
|
|
||||||
$retVal['raip']="Rain Ice Pellets | Light Rain Ice Pellets | Heavy Rain Ice Pellets | Drizzle Ice Pellets | Light Drizzle Ice Pellets | Heavy Drizzle Ice Pellets | Ice Pellets Rain | Light Ice Pellets Rain | Heavy Ice Pellets Rain | Ice Pellets Drizzle | Light Ice Pellets Drizzle | Heavy Ice Pellets Drizzle";
|
|
||||||
$retVal['rasn']="Rain Snow | Light Rain Snow | Heavy Rain Snow | Snow Rain | Light Snow Rain | Heavy Snow Rain | Drizzle Snow | Light Drizzle Snow | Heavy Drizzle Snow | Snow Drizzle | Light Snow Drizzle | Heavy Snow Drizzle";
|
|
||||||
$retVal['shra']="Rain Showers | Light Rain Showers | Heavy Rain Showers | Rain Showers in Vicinity | Light Showers Rain | Heavy Showers Rain | Showers Rain | Showers Rain in Vicinity | Rain Showers Fog/Mist | Light Rain Showers Fog/Mist | Heavy Rain Showers Fog/Mist | Rain Showers in Vicinity Fog/Mist | Light Showers Rain Fog/Mist | Heavy Showers Rain Fog/Mist | Showers Rain Fog/Mist | Showers Rain in Vicinity Fog/Mist";
|
|
||||||
$retVal['tsra']="Thunderstorm | Light Thunderstorm Rain | Heavy Thunderstorm Rain | Thunderstorm Rain Fog/Mist | Light Thunderstorm Rain Fog/Mist | Heavy Thunderstorm Rain Fog/Mist | Thunderstorm Showers in Vicinity | | Light Thunderstorm Rain Haze | Heavy Thunderstorm Rain Haze | Thunderstorm Fog | Light Thunderstorm Rain Fog | Heavy Thunderstorm Rain Fog | Thunderstorm Light Rain | Thunderstorm Heavy Rain | Thunderstorm Rain Fog/Mist | Thunderstorm Light Rain Fog/Mist | Thunderstorm Heavy Rain Fog/Mist | Thunderstorm in Vicinity Fog/Mist | Thunderstorm Showers in Vicinity | Thunderstorm in Vicinity | Thunderstorm in Vicinity Haze | Thunderstorm Haze in Vicinity | Thunderstorm Light Rain Haze | Thunderstorm Heavy Rain Haze | Thunderstorm Fog | Thunderstorm Light Rain Fog | Thunderstorm Heavy Rain Fog | Thunderstorm Hail | Light Thunderstorm Rain Hail | Heavy Thunderstorm Rain Hail | Thunderstorm Rain Hail Fog/Mist | Light Thunderstorm Rain Hail Fog/Mist | Heavy Thunderstorm Rain Hail Fog/Mist | Thunderstorm Showers in Vicinity Hail | | Light Thunderstorm Rain Hail Haze | Heavy Thunderstorm Rain Hail Haze | Thunderstorm Hail Fog | Light Thunderstorm Rain Hail Fog | Heavy Thunderstorm Rain Hail Fog | Thunderstorm Light Rain Hail | Thunderstorm Heavy Rain Hail | Thunderstorm Rain Hail Fog/Mist | Thunderstorm Light Rain Hail Fog/Mist | Thunderstorm Heavy Rain Hail Fog/Mist | Thunderstorm in Vicinity Hail Fog/Mist | Thunderstorm Showers in Vicinity Hail | Thunderstorm in Vicinity Hail | Thunderstorm in Vicinity Hail Haze | Thunderstorm Haze in Vicinity Hail | Thunderstorm Light Rain Hail Haze | Thunderstorm Heavy Rain Hail Haze | Thunderstorm Hail Fog | Thunderstorm Light Rain Hail Fog | Thunderstorm Heavy Rain Hail Fog | Thunderstorm Small Hail/Snow Pellets | Thunderstorm Rain Small Hail/Snow Pellets | Light Thunderstorm Rain Small Hail/Snow Pellets | Heavy Thunderstorm Rain Small Hail/Snow Pellets";
|
|
||||||
$retVal['sn']="Snow | Light Snow | Heavy Snow | Snow Showers | Light Snow Showers | Heavy Snow Showers | Showers Snow | Light Showers Snow | Heavy Showers Snow | Snow Fog/Mist | Light Snow Fog/Mist | Heavy Snow Fog/Mist | Snow Showers Fog/Mist | Light Snow Showers Fog/Mist | Heavy Snow Showers Fog/Mist | Showers Snow Fog/Mist | Light Showers Snow Fog/Mist | Heavy Showers Snow Fog/Mist | Snow Fog | Light Snow Fog | Heavy Snow Fog | Snow Showers Fog | Light Snow Showers Fog | Heavy Snow Showers Fog | Showers Snow Fog | Light Showers Snow Fog | Heavy Showers Snow Fog | Showers in Vicinity Snow | Snow Showers in Vicinity | Snow Showers in Vicinity Fog/Mist | Snow Showers in Vicinity Fog | Low Drifting Snow | Blowing Snow | Snow Low Drifting Snow | Snow Blowing Snow | Light Snow Low Drifting Snow | Light Snow Blowing Snow | Heavy Snow Low Drifting Snow | Heavy Snow Blowing Snow | Thunderstorm Snow | Light Thunderstorm Snow | Heavy Thunderstorm Snow | Snow Grains | Light Snow Grains | Heavy Snow Grains | Heavy Blowing Snow | Blowing Snow in Vicinity";
|
|
||||||
$retVal['wind']="Windy | Fair and Windy | A Few Clouds and Windy | Partly Cloudy and Windy | Mostly Cloudy and Windy | Overcast and Windy";
|
|
||||||
$retVal['hi_shwrs']="Showers in Vicinity | Showers in Vicinity Fog/Mist | Showers in Vicinity Fog | Showers in Vicinity Haze";
|
|
||||||
$retVal['fzrara']="Freezing Rain Rain | Light Freezing Rain Rain | Heavy Freezing Rain Rain | Rain Freezing Rain | Light Rain Freezing Rain | Heavy Rain Freezing Rain | Freezing Drizzle Rain | Light Freezing Drizzle Rain | Heavy Freezing Drizzle Rain | Rain Freezing Drizzle | Light Rain Freezing Drizzle | Heavy Rain Freezing Drizzle";
|
|
||||||
$retVal['hi_tsra']="Thunderstorm in Vicinity | Thunderstorm in Vicinity Fog/Mist | Thunderstorm in Vicinity Fog | Thunderstorm Haze in Vicinity | Thunderstorm in Vicinity Haze";
|
|
||||||
$retVal['ra1']="Light Rain | Drizzle | Light Drizzle | Heavy Drizzle | Light Rain Fog/Mist | Drizzle Fog/Mist | Light Drizzle Fog/Mist | Heavy Drizzle Fog/Mist | Light Rain Fog | Drizzle Fog | Light Drizzle Fog | Heavy Drizzle Fog";
|
|
||||||
$retVal['ra']="Rain | Heavy Rain | Rain Fog/Mist | Heavy Rain Fog/Mist | Rain Fog | Heavy Rain Fog";
|
|
||||||
$retVal['nsvrtsra']="Funnel Cloud | Funnel Cloud in Vicinity | Tornado/Water Spout";
|
|
||||||
$retVal['dust']="Dust | Low Drifting Dust | Blowing Dust | Sand | Blowing Sand | Low Drifting Sand | Dust/Sand Whirls | Dust/Sand Whirls in Vicinity | Dust Storm | Heavy Dust Storm | Dust Storm in Vicinity | Sand Storm | Heavy Sand Storm | Sand Storm in Vicinity";
|
|
||||||
$retVal['mist']="Haze";
|
|
||||||
return $retVal;
|
|
||||||
}
|
|
||||||
// end CLASS
|
|
||||||
}
|
|
||||||
?>
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
"POT-Creation-Date: 2015-07-13 18:46+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -17,26 +17,114 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
#: curweather.php:46
|
#: curweather.php:30
|
||||||
|
msgid "Error fetching weather data.\\nError was: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:103 curweather.php:163
|
||||||
msgid "Current Weather"
|
msgid "Current Weather"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: curweather.php:67
|
#: curweather.php:109
|
||||||
|
msgid "Relative Humidity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:110
|
||||||
|
msgid "Pressure"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:111
|
||||||
|
msgid "Wind"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:112
|
||||||
|
msgid "Last Updated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:113
|
||||||
|
msgid "Data by"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:114
|
||||||
|
msgid "Show on map"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:119
|
||||||
|
msgid "There was a problem accessing the weather data. But have a look"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:121
|
||||||
|
msgid "at OpenWeatherMap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:137
|
||||||
msgid "Current Weather settings updated."
|
msgid "Current Weather settings updated."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: curweather.php:90
|
#: curweather.php:152
|
||||||
msgid "Current Weather Settings"
|
msgid "No APPID found, please contact your admin to optain one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: curweather.php:93
|
#: curweather.php:162 curweather.php:191
|
||||||
msgid "Weather Location: "
|
msgid "Save Settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: curweather.php:96
|
#: curweather.php:163
|
||||||
msgid "Enable Current Weather"
|
msgid "Settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: curweather.php:104
|
#: curweather.php:165
|
||||||
msgid "Submit"
|
msgid "Enter either the name of your location or the zip code."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:166
|
||||||
|
msgid "Your Location"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:166
|
||||||
|
msgid ""
|
||||||
|
"Identifier of your location (name or zip code), e.g. <em>Berlin,DE</em> or "
|
||||||
|
"<em>14476,DE</em>."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:167
|
||||||
|
msgid "Units"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:167
|
||||||
|
msgid "select if the temperatur should be displayed in °C or °F"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:168
|
||||||
|
msgid "Show weather data"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:181
|
||||||
|
msgid "Curweather settings saved."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:192
|
||||||
|
msgid "Caching Interval"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:192
|
||||||
|
msgid ""
|
||||||
|
"For how long should the weather data be cached? Choose according your "
|
||||||
|
"OpenWeatherMap account type."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:192
|
||||||
|
msgid "no cache"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:192
|
||||||
|
msgid "minutes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:193
|
||||||
|
msgid "Your APPID"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: curweather.php:193
|
||||||
|
msgid "Your API key provided by OpenWeatherMap"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
{{include file="field_input.tpl" field=$appid}}
|
||||||
|
{{include file="field_select.tpl" field=$cachetime}}
|
||||||
|
<div class="submit"><input type="submit" name="curweather-submit" value="{{$submit}}" /></div>
|
|
@ -0,0 +1,15 @@
|
||||||
|
<span id="settings_curweather_inflated" class="settings-block fakelink" style="display: block;" onclick="openClose('settings_curweather_expanded'); openClose('settings_curweather_inflated');">
|
||||||
|
<h3>{{$header}}</h3>
|
||||||
|
</span>
|
||||||
|
<div id="settings_curweather_expanded" class="settings-block" style="display: none;">
|
||||||
|
<span class="fakelink" onclick="openClose('settings_curweather_expanded'); openClose('settings_curweather_inflated');">
|
||||||
|
<h3>{{$header}}</h3>
|
||||||
|
</span>
|
||||||
|
<div style="color: red; font-weight: bold;">{{$noappidtext}}</div>
|
||||||
|
{{include file="field_input.tpl" field=$curweather_loc}}
|
||||||
|
{{include file="field_select.tpl" field=$curweather_units}}
|
||||||
|
{{include file="field_checkbox.tpl" field=$enabled}}
|
||||||
|
<div class="settings-submit-wrapper" >
|
||||||
|
<input type="submit" id="curweather-settings-submit" name="curweather-settings-submit" class="settings-submit" value="{{$submit}}" />
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
<div>{{$problem}} <a href="http://openweathermap.org/find?q={{$rpt}}">{{$atOWM}}</a>.</div>
|
|
@ -0,0 +1,17 @@
|
||||||
|
<div id="curweather-network" class="widget">
|
||||||
|
<div class="title tool">
|
||||||
|
<h4 title="{{$lastupdate}}">{{$title}}: {{$city}}</h4>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
<img src="{{$icon}}" title="{{$description}}">
|
||||||
|
<ul class="curweather-details">
|
||||||
|
<li><strong>{{$temp}}</strong></li>
|
||||||
|
<li>{{$relhumidity['caption']}}: {{$relhumidity['val']}}</li>
|
||||||
|
<li>{{$pressure['caption']}}: {{$pressure['val']}}</li>
|
||||||
|
<li>{{$wind['caption']}}: {{$wind['val']}}</li>
|
||||||
|
</ul></p>
|
||||||
|
<p class="curweather-footer">
|
||||||
|
{{$databy}}: <a href="http://openweathermap.org">OpenWeatherMap</a>. <a href="http://openweathermap.org/Maps?zoom=7&lat={{$lat}}&lon={{$lon}}&layers=B0FTTFF">{{$showonmap}}</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="clear"></div>
|
|
@ -1,5 +0,0 @@
|
||||||
<?php
|
|
||||||
require_once 'getweather.php';
|
|
||||||
$rpt = "KHVN";
|
|
||||||
$wxdata = GetWeather::get($rpt);
|
|
||||||
var_dump($rpt, $wxdata);
|
|
Loading…
Reference in New Issue