Skip to content

Instantly share code, notes, and snippets.

@vgrovestine
Last active August 25, 2023 22:50
Show Gist options
  • Save vgrovestine/6c6cfc10cd6b4f3acbd65a121b54e47e to your computer and use it in GitHub Desktop.
Save vgrovestine/6c6cfc10cd6b4f3acbd65a121b54e47e to your computer and use it in GitHub Desktop.
Simple retrieval front-end to browse the archive of PennState Meteorology department's "e-Wall" progs.
<!DOCTYPE html>
<html>
<head>
<title>PSU Meteorology E-Wall Archive Browser</title>
<style>
body,
input,
select {
font-family: sans-serif;
font-size: 20px;
}
body {
background-color: #f9f9f9;
color: #111;
line-height: 1.25em;
padding: 1em 2em 2em 2em;
}
iframe {
width: 100%;
min-height: 40em;
border: 0.1em inset;
margin-top: 2em;
}
a {
text-decoration: none;
color: #00b;
}
a:visited {
color: #006;
}
a:active,
a:hover {
color: #b00;
}
</style>
</head>
<body>
<h1>PSU Meteorology E-Wall Archive Browser</h1>
<?php
$prog = array(
'AVNCENT_0z' => 'AVNCENT: 00z',
'AVNCENT_12z' => 'AVNCENT: 12z',
'AVNEAST_0z' => 'AVNEAST: 00z',
'AVNEAST_6z' => 'AVNEAST: 06z',
'AVNEAST_12z' => 'AVNEAST: 12z',
'AVNEAST_18z' => 'AVNEAST: 18z',
'AVN_0z' => 'AVN: 00z',
'AVN_6z' => 'AVN: 06z',
'AVN_12z' => 'AVN: 12z',
'AVN_18z' => 'AVN: 18z',
'CMCNA_0z' => 'CMCNA: 00z',
'CMCNA_12z' => 'CMCNA: 12z',
'CMC_12z' => 'CMC: 12z',
'ECMWF0.5_0z' => 'ECMWF0.5: 00z',
'ECMWF0.5_12z' => 'ECMWF0.5: 12z',
'ECMWF_0z' => 'ECMWF: 00z',
'ECMWF_12z' => 'ECMWF: 12z',
'ENSCMCHGT_0z' => 'ENSCMCHGT: 00z',
'ENSCMCPRS_0z' => 'ENSCMCPRS: 00z',
'ENSHGTWIDE_0z' => 'ENSHGTWIDE: 00z',
'ENSHGTWIDE_12z' => 'ENSHGTWIDE: 12z',
'ENSHGT_0z' => 'ENSHGT: 00z',
'ENSHGT_12z' => 'ENSHGT: 12z',
'ENSPRS_0z' => 'ENSPRS: 00z',
'ENSPRS_12z' => 'ENSPRS: 12z',
'EXTCOMP_0z' => 'EXTCOMP: 00z',
'MOSUS_0z' => 'MOSUS: 00z',
'MOSUS_12z' => 'MOSUS: 12z',
'MRF_0z' => 'MRF: 00z',
'MRF_12z' => 'MRF: 12z',
'RADEAST' => 'RADEAST',
'RADNWS_US' => 'RADNWS_US',
'SFCNE' => 'SFCNE',
'SFCUS' => 'SFCUS',
'WRFCENT_0z' => 'WRFCENT: 00z',
'WRFCENT_12z' => 'WRFCENT: 12z',
'WRFEAST_0z' => 'WRFEAST: 00z',
'WRFEAST_6z' => 'WRFEAST: 06z',
'WRFEAST_12z' => 'WRFEAST: 12z',
'WRFEAST_18z' => 'WRFEAST: 18z',
'WRF_0z' => 'WRF: 00z',
'WRF_6z' => 'WRF: 06z',
'WRF_12z' => 'WRF: 12z',
'WRF_18z' => 'WRF: 18z'
);
asort($prog);
$xNow = time() - 24 * 60 * 60;
$arcpathBase = 'http://www.meteo.psu.edu/ewall/ARC/';
$arcpathDate = false;
if (array_key_exists('date', $_GET)) {
$arcpathDate = explode('-', $_GET['date']);
if (count($arcpathDate) == 3) {
if ($arcpathDate[0] >= 2004 && $arcpathDate[0] <= date('Y', $xNow)) {
if ($arcpathDate[0] == date('Y', $xNow)) {
$arcpathDate = implode('', $arcpathDate);
} else {
$arcpathDate = $arcpathDate[0] . '/' . implode('', $arcpathDate);
}
}
}
}
$arcpathProg = false;
if (array_key_exists('prog', $_GET) && in_array($_GET['prog'], array_keys($prog))) {
$arcpathProg = $_GET['prog'];
}
if (!empty($arcpathDate) && !empty($arcpathProg)) {
$arcpath = $arcpathBase . $arcpathDate . '/' . $arcpathProg . '/';
} else {
$arcpath = false;
}
?>
<form action="#" method="get">
<input type="date" id="date" name="date" min="2004-01-01" max="<?php echo date('Y-m-d', $xNow); ?>" value="<?php echo $_GET['date']; ?>">
<select name="prog">
<?php
foreach ($prog as $progKey => $progLabel) {
echo '<option value="' . $progKey . '"';
if (strcmp($progKey, $arcpathProg) == 0) {
echo ' selected';
}
echo '>' . $progLabel . '</option>';
}
?>
</select>
<input type="submit" value="Retrieve images">
</form>
<?php
if (!empty($arcpath)) {
$arcpg = file_get_contents($arcpath);
$arcpgImg = array();
preg_match_all('/a href="([a-z0-9_\-]+\.(gif|jpg|png))"/i', $arcpg, $arcpgImg);
if (empty($arcpgImg)) {
echo '<p>No images found in ' . $arcpath . '</p>';
} else {
echo '<ul style="columns: 4;">';
foreach ($arcpgImg[1] as $i) {
echo '<li><a href="' . $arcpath . $i . '">' . $i . '</a></li>';
}
echo '</ul>';
}
}
?>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment