hpr4266 :: What's the weather?
Lee writes a script to check what the weather is like
Hosted by Lee on Monday, 2024-12-09 is flagged as Clean and is released under a CC-BY-SA license.
php.
1.
The show is available on the Internet Archive at: https://archive.org/details/hpr4266
Listen in ogg,
spx,
or mp3 format. Play now:
Duration: 00:17:26
general.
One web service that can find out the weather on the command line is:
$ curl wttr.in
Inspired by this is the following script in PHP that uses data from 7timer.info
Available at https://gist.github.com/macsplit
<?php
date_default_timezone_set('UTC');
$lon = "-0.19759370325694858";
$lat = "51.35956063540873";
$url = "https://www.7timer.info/bin/civil.php?lon=$lon&lat=$lat&unit=metric&ac=0&output=json";
$weathers = [
'tsday' => "☀️ Hot Day",
'clearday' => "☀️ Clear Day",
'clearnight' => "🌙 Clear Night",
'pcloudyday' => "⛅ Partially Cloudy Day",
'pcloudynight' => "☁️ Partially Cloudy Night",
'mcloudyday' => "🌥️ Moderately Cloudy Day",
'mcloudynight' => "☁️ Moderately Cloudy Night",
'cloudyday' => "☁️ Cloudy Day",
'cloudynight' => "☁️ Cloudy Night",
'humidday' => "🌡️ Humid Day",
'humidnight' => "🌡️ Humid Night",
'lightrainday' => "🌧️ Lightly Rainy Day",
'lightrainnight' => "🌧️ Lightly Rainy Night",
'oshowerday' => "🌧️ Overcast Showery Day",
'oshowernight' => "🌧️ Overcast Showery Night",
'ishowerday' => "🌧️ Showery Day",
'ishowernight' => "🌧️ Showery Night",
'lightsnowday' => "❄️ Lightly Snowy Day",
'lightsnownight' => "❄️ Lightly Snowy Night",
'rainday' => "🌧️ Rainy Day",
'rainnight' => "🌧️ Rainy Night",
'snowday' => "❄️ Snowy Day",
'snownight' => "❄️ Snowy Night",
'rainsnowday' => "🌨️ Rainy and Snowy Day",
'rainsnownight' => "🌨️ Rainy and Snowy Night"
];
$json = file_get_contents($url);
if (!$json) exit();
$obj = json_decode($json);
$init = DateTime::createFromFormat('YmdH', $obj->init)->getTimestamp();
$series = $obj->dataseries;
$now = time();
foreach ($series as $k => $point) {
$timepoint = $point->timepoint;
$timestamp = $init + ($timepoint * 3600);
$diff = abs($timestamp - $now);
$data[$diff] = $point;
}
$key = min(array_keys($data));
$measure = $data[$key];
$temperature = $measure->{'temp2m'};
$weather_desc = $weathers[$measure->weather];
echo "$weather_desc $temperature"."°C\n";
?>
Editor's Note: Modified 2024-11-13 in line with comment #1