#!/usr/bin/python # Given a URL or filename, extract things that look like radio frequencies from # it and produce a CSV file suitable for feeding to tk500. # Adam Sampson import urllib, re, optparse unit_scale = { "hz": 1, "khz": 1E3, "mhz": 1E6, "ghz": 1E9, } min_plausible = 100 * 1E3 max_plausible = 2 * 1E9 def mode(f): return "NFM" def find_freqs(url, found): f = urllib.urlopen(url) data = f.read() f.close() for number, unit in re.findall(r'(?i)([0-9.]+)\s*([kmg]?hz)', data): try: f = float(number) except ValueError: continue unit = unit.lower() if unit not in unit_scale: continue f *= unit_scale[unit] found.add(f) def main(): parser = optparse.OptionParser(usage="%prog [OPTIONS] URL ...") parser.add_option("-n", dest="start", type="int", help="first channel number", default=500) parser.add_option("-p", dest="prefix", help="prefix for channel names", default="Chan") (opts, args) = parser.parse_args() found = set() for url in args: find_freqs(url, found) freqs = [f for f in found if f >= min_plausible and f <= max_plausible] freqs.sort() n = 0 for f in freqs: print '%d,%.5f,%s,,"%s%d"' % (n + opts.start, f / 1E6, mode(f), opts.prefix, n + 1) n += 1 if __name__ == "__main__": main()