Last active
January 2, 2017 03:19
-
-
Save czenzel/408305d20c272697b1f7eac02258c8f2 to your computer and use it in GitHub Desktop.
Ingesting Radar Data to NOAAPORT NBSP from the National Weather Service using TGFTP/HTTP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
* teamWeather - Weather Center | |
* NOAAPORT FINFO Ingest Script for Radar Data | |
* | |
* Updated: 2016/11/12 | |
* | |
* Copyright 2016 Christopher Zenzel | |
* All Rights Reserved | |
*/ | |
// Set a time limit of 5 minutes | |
set_time_limit(60 * 5); | |
// Set the timezone and global variables | |
date_default_timezone_set('UTC'); | |
$temporary_directory = dirname(__FILE__) . '/temp'; | |
$download_keys = dirname(__FILE__) . '/keys'; | |
$product_id = $argv[1]; | |
$radar_sites = file_get_contents(dirname(__FILE__) . '/data/radar-sites.txt'); | |
// Main Script Function | |
if (isset($product_id) && count($argv) > 0) { | |
$download_keys .= '/' . $product_id . '.txt'; | |
Main(); | |
} else { | |
echo "Please specify product.\n"; | |
} | |
// Functions | |
function Main() { | |
global $radar_sites, $product_id; | |
// Find all the Radars from the NWS Directory | |
if (preg_match_all('/\"SI.([a-z]{4})\/\"/', $radar_sites, $matches, PREG_SET_ORDER)) { | |
foreach ($matches as $match) { | |
$radar_icao = $match[1]; | |
// Download each product | |
DownloadRadar($radar_icao, $product_id); | |
} | |
} | |
} | |
function DownloadRadar ($icao, $product) { | |
global $download_keys, $temporary_directory; | |
// Get the JSON of current download modified times | |
$download_data = array(); | |
// Check if file exists of keys. If not create one. | |
if (file_exists($download_keys)) { | |
$download_data = json_decode(file_get_contents($download_keys), true); | |
} | |
// Create the URL to Check or Download | |
$url = 'http://tgftp.nws.noaa.gov/SL.us008001/DF.of/DC.radar/DS.' . $product . '/SI.' . strtolower($icao) . '/sn.last'; | |
// Send a Header Request | |
$head_content = CurlHeaderRequest($url); | |
// Generate the file key unique to this file | |
$file_key = md5($url); | |
// Find the last modified and compare to our database | |
if (!empty($head_content) && preg_match('/last-modified:\s?(?<date>.+)\n/i', $head_content, $match)) { | |
if (isset($download_data[$file_key]) && (strtotime($download_data[$file_key]) >= strtotime($match['date']))) { | |
// The downloaded version is current (oops!) | |
// We should not do anything just yet | |
} else { | |
// Download the file, update the NOAAPORT server | |
$data = CurlDownloadRequest($url); | |
// Check empty status | |
if (!empty($data)) { | |
// Receive the WMO and AWIPS Header | |
$wmo_insert = WMOHeaderForInsert($data); | |
// Store a temporary file | |
$temp_key_id = md5(microtime() . rand()); | |
$temp_file = $temporary_directory . '/' . $temp_key_id; | |
// Fix some character issues since we are not on a NP channel | |
$data = "000000000000000000000000" . $data; | |
// Now send the file | |
file_put_contents($temp_file, $data); | |
// Create the ingest command | |
$nbsp_cmd = 'nbspinsert -i 0 0 0 0 0 ' . $wmo_insert[0] . ' /var/noaaport/nbsp/spool/' . $wmo_insert[2] . '/' . $wmo_insert[0] . ' < "' . $temp_file . '"'; | |
// Execute the command. We must wait also for it to complete. | |
exec($nbsp_cmd); | |
// Update the keys | |
$download_data[$file_key] = $match['date']; | |
// Process the file | |
echo $nbsp_cmd . "\n"; | |
// Delete the temporary file | |
unlink($temp_file); | |
} | |
} | |
} | |
// Store download keys in flat file key database | |
file_put_contents($download_keys, json_encode($download_data)); | |
} | |
function WMOHeaderForInsert ($data) { | |
// Get the top two lines | |
$header_data = explode("\n", $data); | |
$header_l1 = $header_data[0]; | |
$header_l2 = $header_data[1]; | |
// Matching | |
$wmo_id = strtolower(substr($header_l1, 0, 6)); | |
$office = strtolower(substr($header_l1, 7, 4)); | |
$wmo_stamp = strtolower(substr($header_l1, 11, 6)); | |
$icao = strtolower(substr($header_l2, 3, 3)); | |
$product = strtolower(substr($header_l2, 0, 3)); | |
// Return the data | |
return array($office . '_' . $wmo_id . '-' . $product . $icao, | |
$office . '_' . $icao . '_' . $product, | |
$office); | |
} | |
function CurlDownloadRequest ($url) { | |
// Send a GET Request | |
$ch = curl_init($url); | |
curl_setopt($ch, CURLOPT_URL, $url); | |
curl_setopt($ch, CURLOPT_TIMEOUT, 10); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | |
$ch_get = curl_exec($ch); | |
curl_close($ch); | |
// Return the data | |
return $ch_get; | |
} | |
function CurlHeaderRequest ($url) { | |
// Send a HEAD Request via HTTP | |
$ch = curl_init($url); | |
curl_setopt($ch, CURLOPT_NOBODY, true); | |
curl_setopt($ch, CURLOPT_HEADER, true); | |
curl_setopt($ch, CURLOPT_TIMEOUT, 10); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | |
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); | |
$ch_head = curl_exec($ch); | |
curl_close($ch); | |
// Return the result | |
return $ch_head; | |
} | |
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | |
<html> | |
<head> | |
<title>Index of /SL.us008001/DF.of/DC.radar/DS.p19r0</title> | |
</head> | |
<body> | |
<h1>Index of /SL.us008001/DF.of/DC.radar/DS.p19r0</h1> | |
<table><tr><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th></tr><tr><th colspan="3"><hr></th></tr> | |
<tr><td><a href="/SL.us008001/DF.of/DC.radar/">Parent Directory</a></td><td> </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kabr/">SI.kabr/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kabx/">SI.kabx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kakq/">SI.kakq/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kama/">SI.kama/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kamx/">SI.kamx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kapx/">SI.kapx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.karx/">SI.karx/</a></td><td align="right">12-Nov-2016 06:58 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.katx/">SI.katx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kbbx/">SI.kbbx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kbgm/">SI.kbgm/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kbhx/">SI.kbhx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kbis/">SI.kbis/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kblx/">SI.kblx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kbmx/">SI.kbmx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kbox/">SI.kbox/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kbro/">SI.kbro/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kbuf/">SI.kbuf/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kbyx/">SI.kbyx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kcae/">SI.kcae/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kcbw/">SI.kcbw/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kcbx/">SI.kcbx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kccx/">SI.kccx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kcle/">SI.kcle/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kclx/">SI.kclx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kcrp/">SI.kcrp/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kcxx/">SI.kcxx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kcys/">SI.kcys/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kdax/">SI.kdax/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kddc/">SI.kddc/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kdfx/">SI.kdfx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kdgx/">SI.kdgx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kdix/">SI.kdix/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kdlh/">SI.kdlh/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kdmx/">SI.kdmx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kdox/">SI.kdox/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kdtx/">SI.kdtx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kdvn/">SI.kdvn/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kdyx/">SI.kdyx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.keax/">SI.keax/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kemx/">SI.kemx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kenx/">SI.kenx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.keox/">SI.keox/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kepz/">SI.kepz/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kesx/">SI.kesx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kevx/">SI.kevx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kewx/">SI.kewx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.keyx/">SI.keyx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kfcx/">SI.kfcx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kfdr/">SI.kfdr/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kfdx/">SI.kfdx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kffc/">SI.kffc/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kfsd/">SI.kfsd/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kfsx/">SI.kfsx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kftg/">SI.kftg/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kfws/">SI.kfws/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kggw/">SI.kggw/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kgjx/">SI.kgjx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kgld/">SI.kgld/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kgrb/">SI.kgrb/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kgrk/">SI.kgrk/</a></td><td align="right">12-Nov-2016 06:48 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kgrr/">SI.kgrr/</a></td><td align="right">09-Nov-2016 20:48 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kgsp/">SI.kgsp/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kgwx/">SI.kgwx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kgyx/">SI.kgyx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.khdx/">SI.khdx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.khgx/">SI.khgx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.khnx/">SI.khnx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.khpx/">SI.khpx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.khtx/">SI.khtx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kict/">SI.kict/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kicx/">SI.kicx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kiln/">SI.kiln/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kilx/">SI.kilx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kind/">SI.kind/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kinx/">SI.kinx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kiwa/">SI.kiwa/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kiwx/">SI.kiwx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kjax/">SI.kjax/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kjgx/">SI.kjgx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kjkl/">SI.kjkl/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.klbb/">SI.klbb/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.klch/">SI.klch/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.klgx/">SI.klgx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.klix/">SI.klix/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.klnx/">SI.klnx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.klot/">SI.klot/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.klrx/">SI.klrx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.klsx/">SI.klsx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kltx/">SI.kltx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.klvx/">SI.klvx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.klwx/">SI.klwx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.klzk/">SI.klzk/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmaf/">SI.kmaf/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmax/">SI.kmax/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmbx/">SI.kmbx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmhx/">SI.kmhx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmkx/">SI.kmkx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmlb/">SI.kmlb/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmob/">SI.kmob/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmpx/">SI.kmpx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmqt/">SI.kmqt/</a></td><td align="right">12-Nov-2016 06:58 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmrx/">SI.kmrx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmsx/">SI.kmsx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmtx/">SI.kmtx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmux/">SI.kmux/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmvx/">SI.kmvx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kmxx/">SI.kmxx/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.knkx/">SI.knkx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.knqa/">SI.knqa/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.koax/">SI.koax/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kohx/">SI.kohx/</a></td><td align="right">12-Nov-2016 06:49 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kokx/">SI.kokx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kotx/">SI.kotx/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kpah/">SI.kpah/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kpbz/">SI.kpbz/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kpdt/">SI.kpdt/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kpoe/">SI.kpoe/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kpux/">SI.kpux/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.krax/">SI.krax/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.krgx/">SI.krgx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kriw/">SI.kriw/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.krlx/">SI.krlx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.krtx/">SI.krtx/</a></td><td align="right">29-Oct-2016 23:30 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.ksfx/">SI.ksfx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.ksgf/">SI.ksgf/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kshv/">SI.kshv/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.ksjt/">SI.ksjt/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.ksox/">SI.ksox/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.ksrx/">SI.ksrx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.ktbw/">SI.ktbw/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.ktfx/">SI.ktfx/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.ktlh/">SI.ktlh/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.ktlx/">SI.ktlx/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.ktwx/">SI.ktwx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.ktyx/">SI.ktyx/</a></td><td align="right">12-Nov-2016 06:50 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kudx/">SI.kudx/</a></td><td align="right">12-Nov-2016 06:48 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kuex/">SI.kuex/</a></td><td align="right">12-Nov-2016 06:51 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kvax/">SI.kvax/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kvbx/">SI.kvbx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kvnx/">SI.kvnx/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kvtx/">SI.kvtx/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kvwx/">SI.kvwx/</a></td><td align="right">12-Nov-2016 06:52 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.kyux/">SI.kyux/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.pabc/">SI.pabc/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.pacg/">SI.pacg/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.paec/">SI.paec/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.pahg/">SI.pahg/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.paih/">SI.paih/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.pakc/">SI.pakc/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.papd/">SI.papd/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.pgua/">SI.pgua/</a></td><td align="right">12-Nov-2016 06:54 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.phki/">SI.phki/</a></td><td align="right">12-Nov-2016 06:53 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.phkm/">SI.phkm/</a></td><td align="right">12-Nov-2016 06:57 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.phmo/">SI.phmo/</a></td><td align="right">09-Nov-2016 23:19 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.phwa/">SI.phwa/</a></td><td align="right">12-Nov-2016 06:56 </td><td align="right"> - </td></tr> | |
<tr><td><a href="SI.tjua/">SI.tjua/</a></td><td align="right">12-Nov-2016 06:55 </td><td align="right"> - </td></tr> | |
<tr><th colspan="3"><hr></th></tr> | |
</table> | |
</body></html> | |
Updated:
- PHP 7.0 Date/Time Compatibility (strtotime)
Tonight contains a major bug fix to allow for the header size to be recognized on a non-NOAAPORT import of radar data. NOAAPORT Channels add additional data on import that this script was not. The 24 characters of "000" were added to null the NOAAPORT channel to simulate a satellite signal for proper processing. Video update coming soon at chriszenzel.com
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Updated: