#!/usr/bin/python3
from ftplib import FTP
import datetime
import os
import re
import sys
file = sys.argv[1]
file_0 = '%s.0' % file
file_1 = '%s.1' % file
file_2 = '%s.2' % file
# Rename and read in earlier observations
os.rename(file_1, file_2)
os.rename(file_0, file_1)
f = open(file_1)
recent_1 = [line.rstrip() for line in f.readlines()]
f.close()
f = open(file_2)
recent_2 = [line.rstrip() for line in f.readlines()]
f.close()
# Create the regular expression for matching recent observations.
# The listing looks like:
# -rw-r--r-- 1 3110 0 63 May 20 17:05 ZYTX.TXT
# We use ctime rather than strftime to avoid the month being localized
today = datetime.date.today()
stamp1 = today.ctime()[4:10].replace(' ', ' 0')
yesterday = today - datetime.timedelta(1)
stamp2 = yesterday.ctime()[4:10].replace(' ', ' 0')
rex = re.compile("(%s|%s) \\d\\d:\\d\\d (....)\\.TXT$" % (stamp1, stamp2))
recent_0 = []
f = open(file_0, 'w')
def check_observation(line):
match = rex.search(line)
if match is None:
return
obs = match.group(2)
recent_0.append(obs)
f.write('%s\n' % obs)
ftp = FTP('tgftp.nws.noaa.gov')
ftp.login()
ftp.cwd('/data/observations/metar/stations')
ftp.retrlines('LIST', check_observation)
ftp.quit()
f.close()
if len(recent_0) < 3000:
sys.stderr.write('Error parsing METAR observations!\n')
sys.exit(1)
recent_0.sort()
recent = []
for obs in recent_0:
if obs in recent_1 and obs in recent_2:
recent.append(obs)
f = open(file, 'w')
for obs in recent:
f.write('%s\n' % obs)
f.close()