def get_data(station_id, month_string): """ Load all possible meassures for all value types for a station """ (start_date, end_date) = daterangestr.to_dates(month_string) urlmask = "http://www.umweltbundesamt.de/luftdaten/data?pollutant=%s&data_type=%s&date=%s&dateTo=%s&station=%s" for pollutant in measures: path = os.path.join(start_date.strftime("%Y%m"), station_id, pollutant) for t in valuetypes: url = urlmask % (pollutant, t, start_date.strftime("%Y%m%d"), end_date.strftime("%Y%m%d"), station_id) #print url r = requests.get(url) if r.status_code == 200: data = r.json() if data["count"] > 0: try: os.makedirs(path) except: pass filepath = os.path.join(path, t + ".json") fp = open(filepath, "wb") vals = data["values"] for key in vals.keys(): for i in range(len(vals[key])): try: vals[key][i] = int(vals[key][i]) except: pass fp.write(json.dumps(vals, sort_keys=True)) print("Wrote %s" % filepath) fp.close() time.sleep(1)
def get_data(station_id, month_string): """ Load all possible meassures for all value types for a station """ (start_date, end_date) = daterangestr.to_dates(month_string) urlmask = "http://www.umweltbundesamt.de/luftdaten/data?pollutant=%s&data_type=%s&date=%s&dateTo=%s&station=%s" for pollutant in measures: path = os.path.join(start_date.strftime("%Y%m"), station_id, pollutant) for t in valuetypes: url = urlmask % (pollutant, t, start_date.strftime("%Y%m%d"), end_date.strftime("%Y%m%d"), station_id) # print url r = requests.get(url) if r.status_code == 200: data = r.json() if data["count"] > 0: try: os.makedirs(path) except: pass filepath = os.path.join(path, t + ".json") fp = open(filepath, "wb") vals = data["values"] for key in vals.keys(): for i in range(len(vals[key])): try: vals[key][i] = int(vals[key][i]) except: pass fp.write(json.dumps(vals, sort_keys=True)) print ("Wrote %s" % filepath) fp.close() time.sleep(1)
def main(): """Command line client mode""" import argparse import daterangestr import sys parser = argparse.ArgumentParser( description='Get weather information from OpenWeatherMap.') parser.add_argument('-s', '--station', dest='station_id', type=int, metavar='STATION', help='Station ID to get information for') parser.add_argument( '-d', '--date', dest='daterange', help= 'Date range for historic data retrieval, as string YYYYMMDD-YYYYMMDD.') parser.add_argument('--csv', dest='csv', action='store_true', default=False, help='Use CSV as output format for historic values') parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', default=False, help='Enable verbose output') args = parser.parse_args() if args.station_id is None: sys.stderr.write( "ERROR: No station ID given. Use -s parameter, e.g. -s 4885.\n") sys.exit(1) ow = OpenWeather(verbose=args.verbose) weather = None if args.daterange is not None: (from_date, to_date) = daterangestr.to_dates(args.daterange) weather = ow.get_historic_weather(station_id=args.station_id, from_date=from_date, to_date=to_date, resolution="hour") if args.csv: print(to_csv(weather)) else: print(json.dumps(weather, indent=4, sort_keys=True)) else: weather = ow.get_weather(args.station_id) print(json.dumps(flatten_dict(weather), indent=4, sort_keys=True))
def main(): """Command line client mode""" import argparse import daterangestr import sys parser = argparse.ArgumentParser(description='Get weather information from OpenWeatherMap.') parser.add_argument('-s', '--station', dest='station_id', type=int, metavar='STATION', help='Station ID to get information for') parser.add_argument('-d', '--date', dest='daterange', help='Date range for historic data retrieval, as string YYYYMMDD-YYYYMMDD.') parser.add_argument('--csv', dest='csv', action='store_true', default=False, help='Use CSV as output format for historic values') parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', default=False, help='Enable verbose output') args = parser.parse_args() if args.station_id is None: sys.stderr.write("ERROR: No station ID given. Use -s parameter, e.g. -s 4885.\n") sys.exit(1) ow = OpenWeather(verbose=args.verbose) weather = None if args.daterange is not None: (from_date, to_date) = daterangestr.to_dates(args.daterange) weather = ow.get_historic_weather( station_id=args.station_id, from_date=from_date, to_date=to_date, resolution="hour") if args.csv: print(to_csv(weather)) else: print(json.dumps(weather, indent=4, sort_keys=True)) else: weather = ow.get_weather(args.station_id) print(json.dumps(flatten_dict(weather), indent=4, sort_keys=True))
def test00(self): a, b = to_dates('') self.assertEqual(a, datetime(MINYEAR, 1, 1, 0, 0, 0)) self.assertEqual(b, datetime(MAXYEAR, 12, 31, 23, 59, 59))
def test14(self): a, b = to_dates('-20110408') self.assertEqual(a, datetime(MINYEAR, 1, 1, 0, 0, 0)) self.assertEqual(b, datetime(2011, 4, 8, 23, 59, 59))
def test17(self): """Non leap year""" a, b = to_dates('201102') self.assertEqual(a, datetime(2011, 2, 1, 0, 0, 0)) self.assertEqual(b, datetime(2011, 2, 28, 23, 59, 59))
def test11(self): a, b = to_dates('20110408-') self.assertEqual(a, datetime(2011, 4, 8, 0, 0, 0)) self.assertEqual(b, datetime(MAXYEAR, 12, 31, 23, 59, 59))
def test12(self): a, b = to_dates('-2011') self.assertEqual(a, datetime(MINYEAR, 1, 1, 0, 0, 0)) self.assertEqual(b, datetime(2011, 12, 31, 23, 59, 59))
os.mkdir(yearfolder) path = '%s/feedin_%s.csv' % (yearfolder, start_date.strftime("%Y%m")) with open(path, 'wb') as csvfile: writer = csv.writer(csvfile, quoting=csv.QUOTE_MINIMAL) writer.writerow(["date", "time_from", "time_to", "feedin"]) rowcount = 0 for line in data.split("\n"): if line == '': continue if rowcount > 0: fields = line.strip().split(";") dt = fields[0].split(".") times = fields[1].split(" - ") row = [ "%s-%s-%s" % (dt[2], dt[1], dt[0]), times[0], times[1], fields[2] ] writer.writerow(row) rowcount += 1 if __name__ == '__main__': import argparse parser = argparse.ArgumentParser(description='Download monthly data') parser.add_argument('daterange', help='Month in the format YYYYMM, e.g. "201310"') args = parser.parse_args() (start, end) = daterangestr.to_dates(args.daterange) data = download(start, end) save(data, start, end)
def test22(self): a, b = to_dates('20130201064905') self.assertEqual(a, datetime(2013, 2, 1, 6, 49, 5)) self.assertEqual(b, a)
def test05(self): a, b = to_dates('2011-2012') self.assertEqual(a, datetime(2011, 1, 1, 0, 0, 0)) self.assertEqual(b, datetime(2012, 12, 31, 23, 59, 59))
def test20(self): a, b = to_dates('2013020104') self.assertEqual(a, datetime(2013, 2, 1, 4, 0, 0)) self.assertEqual(b, datetime(2013, 2, 1, 4, 59, 59))
def test28(self): a, b = to_dates('-20130201064905') self.assertEqual(a, datetime(MINYEAR, 1, 1, 0, 0, 0)) self.assertEqual(b, datetime(2013, 2, 1, 6, 49, 5))
def test03(self): a, b = to_dates('20121001') self.assertEqual(a, datetime(2012, 10, 1, 0, 0, 0)) self.assertEqual(b, datetime(2012, 10, 1, 23, 59, 59))
def test27(self): a, b = to_dates('-201302010514') self.assertEqual(a, datetime(MINYEAR, 1, 1, 0, 0, 0)) self.assertEqual(b, datetime(2013, 2, 1, 5, 14, 59))
def test25(self): a, b = to_dates('20130201064905-') self.assertEqual(a, datetime(2013, 2, 1, 6, 49, 5)) self.assertEqual(b, datetime(MAXYEAR, 12, 31, 23, 59, 59))
def test24(self): a, b = to_dates('201302010514-') self.assertEqual(a, datetime(2013, 2, 1, 5, 14, 0)) self.assertEqual(b, datetime(MAXYEAR, 12, 31, 23, 59, 59))
import argparse import sys STATION_ID = 4885 # EDDK / Cologne/Bonn airport if __name__ == '__main__': parser = argparse.ArgumentParser( description='Download openweather data for EDDK for given date range') parser.add_argument( 'daterange', help='Date range in the format YYYYMM or YYYYMMDD-YYYYMMDD') args = parser.parse_args() if args.daterange is None: sys.stderr.write("You have to give a date range.") sys.exit() (start_date, end_date) = daterangestr.to_dates(args.daterange) ow = openweather.OpenWeather() print "Getting hourly values for %s to %s" % (start_date, end_date) hw = ow.get_historic_weather(STATION_ID, start_date, end_date) headers = [ 'timestamp', 'hum_count', 'hum_min', 'hum_max', 'hum_mean', 'press_count', 'press_min', 'press_max', 'press_mean', 'temp_count', 'temp_min', 'temp_max', 'temp_mean', 'windspeed_count', 'windspeed_min', 'windspeed_max', 'windspeed_mean', 'winddir' ] filename = '%s.csv' % args.daterange print "Writing to %s" % filename with open(filename, 'wb') as csvfile: writer = csv.writer(csvfile, quoting=csv.QUOTE_MINIMAL) writer.writerow(headers)
def test18(self): """Leap year""" a, b = to_dates('201202') self.assertEqual(a, datetime(2012, 2, 1, 0, 0, 0)) self.assertEqual(b, datetime(2012, 2, 29, 23, 59, 59))
def save(data, start_date, end_date): yearfolder = "%d" % start_date.year if not os.path.exists(yearfolder): os.mkdir(yearfolder) path = "%s/feedin-pv_%s.csv" % (yearfolder, start_date.strftime("%Y%m")) with open(path, "wb") as csvfile: writer = csv.writer(csvfile, quoting=csv.QUOTE_MINIMAL) writer.writerow(["date", "time_from", "time_to", "forecast", "actual_feedin"]) rowcount = 0 for line in data.split("\n"): if line == "": continue if rowcount > 0: fields = line.strip().split(";") dt = fields[0].split(".") times = fields[1].split(" - ") row = ["%s-%s-%s" % (dt[2], dt[1], dt[0]), times[0], times[1], fields[2], fields[3]] writer.writerow(row) rowcount += 1 if __name__ == "__main__": import argparse parser = argparse.ArgumentParser(description="Download monthly data") parser.add_argument("daterange", help='Month in the format YYYYMM, e.g. "201310"') args = parser.parse_args() (start, end) = daterangestr.to_dates(args.daterange) data = download(start, end) save(data, start, end)
def test09(self): a, b = to_dates('2011-') self.assertEqual(a, datetime(2011, 1, 1, 0, 0, 0)) self.assertEqual(b, datetime(MAXYEAR, 12, 31, 23, 59, 59))
def test07(self): a, b = to_dates('201104-201203') self.assertEqual(a, datetime(2011, 4, 1, 0, 0, 0)) self.assertEqual(b, datetime(2012, 3, 31, 23, 59, 59))
def test21(self): a, b = to_dates('201302010514') self.assertEqual(a, datetime(2013, 2, 1, 5, 14, 0)) self.assertEqual(b, datetime(2013, 2, 1, 5, 14, 59))
def test08(self): a, b = to_dates('20110408-2011') self.assertEqual(a, datetime(2011, 4, 8, 0, 0, 0)) self.assertEqual(b, datetime(2011, 12, 31, 23, 59, 59))
import sys STATION_ID = 4885 # EDDK / Cologne/Bonn airport if __name__ == '__main__': parser = argparse.ArgumentParser( description='Download openweather data for EDDK for given date range') parser.add_argument('daterange', help='Date range in the format YYYYMM or YYYYMMDD-YYYYMMDD') args = parser.parse_args() if args.daterange is None: sys.stderr.write("You have to give a date range.") sys.exit() (start_date, end_date) = daterangestr.to_dates(args.daterange) ow = openweather.OpenWeather() print "Getting hourly values for %s to %s" % (start_date, end_date) hw = ow.get_historic_weather(STATION_ID, start_date, end_date) headers = [ 'timestamp', 'hum_count', 'hum_min', 'hum_max', 'hum_mean', 'press_count', 'press_min', 'press_max', 'press_mean', 'temp_count',