96 lines
3.0 KiB
Python
96 lines
3.0 KiB
Python
import cdsapi
|
|
import pymysql as pymysql
|
|
|
|
|
|
class ApiRequest:
|
|
def __init__(self):
|
|
self.client = cdsapi.Client()
|
|
self.max_time_delay = 120
|
|
|
|
def get_reply(self, year, month, variable):
|
|
try:
|
|
param = {
|
|
'product_type': 'reanalysis',
|
|
'format': 'netcdf',
|
|
'year': str(year),
|
|
'variable': [
|
|
variable
|
|
],
|
|
'month': [
|
|
month
|
|
],
|
|
'day': [
|
|
'01', '02', '03',
|
|
'04', '05', '06',
|
|
'07', '08', '09',
|
|
'10', '11', '12',
|
|
'13', '14', '15',
|
|
'16', '17', '18',
|
|
'19', '20', '21',
|
|
'22', '23', '24',
|
|
'25', '26', '27',
|
|
'28', '29', '30',
|
|
'31',
|
|
],
|
|
'area': [
|
|
60, -180, 0,
|
|
180,
|
|
],
|
|
'time': [
|
|
'00:00', '01:00', '02:00',
|
|
'03:00', '04:00', '05:00',
|
|
'06:00', '07:00', '08:00',
|
|
'09:00', '10:00', '11:00',
|
|
'12:00', '13:00', '14:00',
|
|
'15:00', '16:00', '17:00',
|
|
'18:00', '19:00', '20:00',
|
|
'21:00', '22:00', '23:00',
|
|
],
|
|
}
|
|
|
|
result = self.client._api("%s/resources/%s" % (self.client.url, 'reanalysis-era5-single-levels'), param,
|
|
"POST")
|
|
return result.reply
|
|
except Exception as e:
|
|
print(e)
|
|
return None
|
|
|
|
|
|
if __name__ == "__main__":
|
|
years = range(1980, 2021)
|
|
months = [
|
|
'01', '02', '03',
|
|
'04', '05', '06',
|
|
'07', '08', '09',
|
|
'10', '11', '12',
|
|
]
|
|
variables = [
|
|
'10m_u_component_of_wind',
|
|
'10m_v_component_of_wind',
|
|
'2m_temperature',
|
|
]
|
|
|
|
ar = ApiRequest()
|
|
db = pymysql.connect(host='47.113.231.200', port=28089,
|
|
user='root', passwd='passok123A', db='jd_data', charset='utf8mb4')
|
|
cursor = db.cursor()
|
|
|
|
for y in years:
|
|
for m in months:
|
|
for v in variables:
|
|
reply = ar.get_reply(year=y, month=m, variable=v)
|
|
print(reply)
|
|
request_id = reply['request_id']
|
|
content_length = reply['content_length']
|
|
download_url = reply['location']
|
|
SQL_UPDATE = f'UPDATE jd_data.era5_detail SET request_id = "{request_id}", ' \
|
|
f'content_length = "{content_length}", download_url = "{download_url}" ' \
|
|
f'WHERE data_year = "{y}" AND data_month = "{m}" AND data_variable = "{v}";'
|
|
cursor.execute(SQL_UPDATE)
|
|
db.commit()
|
|
# break
|
|
# break
|
|
break
|
|
cursor.close()
|
|
db.close()
|