Hacker Public Radio

Your ideas, projects, opinions - podcasted.

New episodes Monday through Friday.


HPR4266: What's the weather?

Hosted by Lee on 2024-12-09 00:00:00
Download or Listen

This show has been flagged as Clean by the host.

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

Provide feedback on this episode.

HPR Comments

Mastodon Comments



More Information...


Copyright Information

Unless otherwise stated, our shows are released under a Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license.

The HPR Website Design is released to the Public Domain.