77from urllib .parse import urlparse
88from zipfile import ZipFile
99
10+ from requests import HTTPError
1011from requests_cache import CachedSession
1112
1213from dwdweather import __appname__ as APP_NAME
@@ -26,7 +27,7 @@ class DwdCdcClient:
2627
2728 def __init__ (self , resolution , cache_path ):
2829
29- # Data set selector by resolution (houry , 10_minutes).
30+ # Data set selector by resolution (daily, hourly , 10_minutes).
3031 self .resolution = resolution
3132
3233 # HTTP client.
@@ -67,7 +68,14 @@ def setup_cache(self):
6768
6869 def get_resource_index (self , uri , extension ):
6970 log .info (u'Requesting %s' , uri )
70- resource_list = fetch_html_file_list (uri , extension )
71+ try :
72+ resource_list = fetch_html_file_list (uri , extension )
73+ except HTTPError as ex :
74+ if ex .response .status_code == 404 :
75+ #log.warning('Resource {} not found'.format(uri))
76+ resource_list = []
77+ else :
78+ raise
7179 return resource_list
7280
7381 def get_stations (self , categories ):
@@ -77,11 +85,13 @@ def get_stations(self, categories):
7785 log .info ("Loading station data from CDC" )
7886 for category in categories :
7987 category_name = category ["name" ]
80- if category_name == "solar" and self .resolution == "hourly" :
88+ category_folder = category .get ("folder" , category_name )
89+
90+ if category_name == "solar" and self .resolution in ["daily" , "hourly" ]:
8191 # workaround - solar has no subdirs
82- index_uri = u"%s/%s" % (self .uri , category_name )
92+ index_uri = u"%s/%s" % (self .uri , category_folder )
8393 else :
84- index_uri = u"%s/%s/recent" % (self .uri , category_name )
94+ index_uri = u"%s/%s/recent" % (self .uri , category_folder )
8595
8696 try :
8797 resource_list = self .get_resource_index (index_uri , "txt" )
@@ -104,6 +114,7 @@ def get_stations(self, categories):
104114 def get_measurements (self , station_id , category , timeranges ):
105115
106116 category_name = category ["name" ]
117+ category_folder = category .get ("folder" , category_name )
107118
108119 def download_zip (uri ):
109120 log .info ("Fetching resource {}" .format (uri ))
@@ -144,7 +155,7 @@ def download_resource(uri):
144155 for thing in download_zip (uri ):
145156 yield thing
146157
147- if category_name == "solar" and self .resolution == " hourly" :
158+ if category_name == "solar" and self .resolution in [ "daily" , " hourly"] :
148159 index_uri = "%s/%s" % (self .uri , category_name )
149160 resource_uri_effective = find_resource_file (
150161 index_uri , "_%05d_" % station_id
@@ -158,7 +169,7 @@ def download_resource(uri):
158169 if timerange == "historical" :
159170 timerange_suffix = "hist"
160171
161- index_uri = "%s/%s/%s" % (self .uri , category_name , timerange )
172+ index_uri = "%s/%s/%s" % (self .uri , category_folder , timerange )
162173 resource_uri_effective = find_resource_file (
163174 index_uri , "_%05d_" % station_id
164175 )
0 commit comments