Add retrieve_history module.
This commit is contained in:
parent
61bf54314a
commit
cfca33a1a3
58
nmc_met_io/retrieve_history.py
Normal file
58
nmc_met_io/retrieve_history.py
Normal file
@ -0,0 +1,58 @@
|
||||
# _*_ coding: utf-8 _*_
|
||||
|
||||
# Copyright (c) 2021 NMC Developers.
|
||||
# Distributed under the terms of the GPL V3 License.
|
||||
|
||||
import os
|
||||
import tempfile
|
||||
import requests
|
||||
import nmc_met_io.config as CONFIG
|
||||
|
||||
|
||||
def retrieve_data_file(product, date, ele, level, step, time,
|
||||
format="nc", area="WHOLE", outfile=None):
|
||||
"""
|
||||
Retrieve data file from history cases database.
|
||||
|
||||
Args:
|
||||
product (str): like "ECMWF-HR", 请求数据类型 一次只能请求一种数据
|
||||
date (str): like "20200101", 多个日期可以在程序外部加入循环 避免一次请求发送多个日期
|
||||
ele (str): like "TMP", 多个要素可以在程序外部加入循环
|
||||
level (str): like "500", 多个层次可以直接用|分隔 "500|850"
|
||||
step (str): like "0to9by3", 三个数字为 起始预报时效 终止预报时效 时效间隔
|
||||
time (str): like "08", 多个时次可以在程序外部加入循环
|
||||
area (str): "80|70|10|170", 裁剪的经纬度范围 按照 北纬、西经、南纬、东经的顺序 中间用|分隔 如果不需要裁剪则填写WHOLE
|
||||
format (str): "nc", 返回数据格式 dimaond mdfs nc
|
||||
outfile (str, optional): output file name. if None, a temporary filename will be given.
|
||||
"""
|
||||
|
||||
# construct sever url
|
||||
server_url = "http://{}:{}/hcdata?username={}&password={}".format(
|
||||
CONFIG.CONFIG['HISTORYCASESDATA']['HC_IP'],
|
||||
CONFIG.CONFIG['HISTORYCASESDATA']['HC_PORT'],
|
||||
CONFIG.CONFIG['HISTORYCASESDATA']['USER_ID'],
|
||||
CONFIG.CONFIG['HISTORYCASESDATA']['PASSWORD'])
|
||||
server_url = server_url + \
|
||||
'&product={}&date={}&ele={}&level={}&step={}&time={}&area={}&format={}'.format(
|
||||
product, date, ele, level, step, time, area, format)
|
||||
|
||||
# retireve data file
|
||||
res = requests.get(server_url)
|
||||
content_type = res.headers.get('Content-Type')
|
||||
|
||||
# write to local file
|
||||
if content_type.find('json') != -1:
|
||||
print(res.text)
|
||||
else:
|
||||
if outfile is None:
|
||||
outfile = os.path.join(
|
||||
os.getcwd(), next(tempfile._get_candidate_names())+'.7z')
|
||||
with open(outfile, 'wb') as local_file:
|
||||
buffer = 1024
|
||||
for chunk in res.iter_content(buffer):
|
||||
local_file.write(chunk)
|
||||
print('文件%s已成功保存到本地' % outfile)
|
||||
local_file.close()
|
||||
|
||||
res.close()
|
||||
return outfile
|
Loading…
Reference in New Issue
Block a user