예제 #1
0
파일: get_values.py 프로젝트: hitzi/data
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)
예제 #2
0
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)
예제 #3
0
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))
예제 #4
0
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))
예제 #5
0
 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))
예제 #6
0
 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))
예제 #7
0
 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))
예제 #8
0
 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))
예제 #9
0
 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))
예제 #10
0
파일: download.py 프로젝트: hitzi/data
        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)
예제 #11
0
 def test22(self):
     a, b = to_dates('20130201064905')
     self.assertEqual(a, datetime(2013, 2, 1, 6, 49, 5))
     self.assertEqual(b, a)
예제 #12
0
 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))
예제 #13
0
 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))
예제 #14
0
 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))
예제 #15
0
 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))
예제 #16
0
 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))
예제 #17
0
 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))
예제 #18
0
 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))
예제 #19
0
파일: get_data.py 프로젝트: hitzi/data
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)
예제 #20
0
 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))
예제 #21
0
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)
예제 #22
0
 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))
예제 #23
0
 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))
예제 #24
0
 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))
예제 #25
0
 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))
예제 #26
0
파일: get_data.py 프로젝트: AJoNee/data
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',