HinetPy.client 模块
- class
HinetPy.client.
Client
(user=None, password=None, timeout=60, retries=3, sleep_time_in_seconds=5, max_sleep_count=30)[源代码] - Hi-net 网络服务客户端。
参数:
- user (str) – Hi-net账户用户名。
- password (str) – Hi-net账户密码。
- timeout (int or float) – 等待服务器响应多久才放弃。
- retries (int) – 请求失败时重新尝试多少次。
- sleep_time_in_seconds (int or float) – 见下面的注解。
- max_sleep_count (int) – 见下面的注解。
注解
Hi-net服务器在接收到数据请求后通常需要花10秒到1分钟时间来准备数据。在数据准备期间,禁止用户再次请求数据。因而用户必须等待直到数据准备完成。
HinetPy每隔 sleep_time_in_seconds
秒检查一次数据状态直到数据准备完成。如果HinetPy检查数据状态 max_sleep_count * sleep_time_in_seconds
秒而数据还未准备好,这可能意味着此次数据申请出错了。然后,HinetPy会重新尝试申请这个数据 retries
次。通常,你不需要修改这些设置,除非你知道自己在做什么。
示例
- >>> from HinetPy import Client
- >>> client = Client("username", "password")
login
(user, password)[源代码]- 登陆Hi-net服务器。
参数:
- **user** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – Hi-net账户用户名。
- **password** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – Hi-net账户密码。
示例
- >>> from HinetPy import Client
- >>> client = Client()
- >>> client.login("username", "password")
doctor
()[源代码]- 做检查。
- >>> client.doctor()
- [2019-12-06 00:00:00] INFO: You're using the latest release (v0.6.5).
- [2019-12-06 00:00:00] INFO: Hi-net web service is NOT updated.
- [2019-12-06 00:00:00] INFO: catwin32: /home/user/bin/catwin32.
- [2019-12-06 00:00:00] INFO: win2sac_32: /home/user/bin/win2sac_32.
检查清单
- HinetPy是否发布了新版本(见 [<code>check_package_release()</code>](https://seisman.github.io/HinetPy/zh_CN/api/#HinetPy.client.Client.check_package_release) )
- Hi-net网站是否有更新(见 [<code>check_service_update()</code>](https://seisman.github.io/HinetPy/zh_CN/api/#HinetPy.client.Client.check_service_update) )
- <code>catwin32</code> 和 <code>win2sac_32</code> 是否在PATH中(见 [<code>check_cmd_exists()</code>](https://seisman.github.io/HinetPy/zh_CN/api/#HinetPy.client.Client.check_cmd_exists) )
getcontinuous_waveform
(_code, starttime, span, max_span=None, data=None, ctable=None, outdir=None, threads=3, cleanup=True)[源代码]- 从Hi-net服务器获取连续波形。
参数:
- **code** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 台网代码。见 [<code>info()</code>](https://seisman.github.io/HinetPy/zh_CN/api/#HinetPy.client.Client.info) 。
- **starttime** ([<code>datetime.datetime</code>](https://docs.python.org/3/library/datetime.html#datetime.datetime) or str) – 数据请求的开始时间。
- **span** ([_int_](https://docs.python.org/3/library/functions.html#int)) – 数据的时间长度,单位为分钟。
- **max_span** ([_int_](https://docs.python.org/3/library/functions.html#int)) – 子请求的最大时间长度。默认会自动决定。
- **data** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 下载的win32数据的文件名。默认格式: <code>CODE_YYYYmmddHHMM_SPAN.cnt</code>
- **ctable** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 下载的通道表文件名。默认格式为 <code>CODE_YYYYmmdd.ch</code>
- **outdir** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 将win32和通道表数据保存到指定目录中。默认为当前目录。
- **threads** ([_int_](https://docs.python.org/3/library/functions.html#int)) – 用多少个线程以加速下载。
- **cleanup** ([_bool_](https://docs.python.org/3/library/functions.html#bool)) – 在合并文件之后清理1分钟长度的cnt文件。返回:
- **data** (_str_) – 下载得到的win32数据的文件名。
- **ctable** (_str_) – 下载的通道表文件的文件名。
注解
时区
HinetPy中的所有时间都是日本标准时间(GMT+0900)。
max_span
Hi-net对每次数据请求设置了3个限制:
- 数据长度不大于60分钟
- 通道数*数据长度不得大于12000分钟
- 仅保留最近150次请求的数据
例如,Hi-net台网有大约24000个通道。根据第2条限制,单次请求的通道长度不得大于5分钟。HinetPy通过将一个长的数据请求分割成多个短的子请求来打破这一限制。
工作流程
- 做一些检查
- 将长数据请求分割成多个短的数据子请求
- 对所有子请求进行循环并返回要下载的数据ID
- 基于数据ID下载所有数据
- 解压下载得到的所有ZIP文件并合并到一个win32格式的文件
- 清理工作
示例
从Hi-net请求2010-01-01T05:35 (GMT+0900)开始的6分钟数据。
- >>> client.get_continuous_waveform('0101', '201001010535', 6)
- ('0101_201001010535_6.cnt', '0101_20100101.ch')
starttime
也支持其他常见的格式:
- >>> client.get_continuous_waveform('0101', '2010-01-01 05:35', 6)
- >>> client.get_continuous_waveform('0101', '2010-01-01T05:35', 6)
starttime
也可以用 datetime.datetime
指定:
- >>> from datetime import datetime
- >>> starttime = datetime(2010, 1, 1, 5, 35)
- >>> client.get_continuous_waveform('0101', starttime, 6)
- ('0101_201001010535_6.cnt', '0101_20100101.ch')
从F-net申请2010-01-01T00:00 (GMT+0900)全天的数据:
- >>> client.get_continuous_waveform('0103', starttime, 1440, max_span=25)
- ('0103_201001010000_1440.cnt', '0103_20100101.ch')
getwaveform
(_code, starttime, span, max_span=None, data=None, ctable=None, outdir=None, threads=3, cleanup=True)[源代码]
在 0.6.0 版更改: 已废弃。
get_waveform()
已改名为 get_continuous_waveform()
.
getevent_waveform
(_starttime, endtime, region='00', minmagnitude=3.0, maxmagnitude=9.9, include_unknown_mag=True, mindepth=None, maxdepth=None, minlatitude=None, maxlatitude=None, minlongitude=None, maxlongitude=None, latitude=None, longitude=None, minradius=None, maxradius=None)[源代码]- 获取事件波形数据。
参数:
- **starttime** ([<code>datetime.datetime</code>](https://docs.python.org/3/library/datetime.html#datetime.datetime) or str) – 事件的开始事件。
- **endtime** ([<code>datetime.datetime</code>](https://docs.python.org/3/library/datetime.html#datetime.datetime) or str) – 事件的结束事件。
- **region** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) –
限制事件在指定的区域内。可选值包括:
- <code>00</code>: Whole Japan
- <code>01</code>: Hokkaido Region
- <code>02</code>: Tohoku Region
- <code>03</code>: Kanto Region
- <code>04</code>: Chubu Region
- <code>05</code>: Kinki Region
- <code>06</code>: Chugoku/Shikoku Region
- <code>07</code>: Kyushu Region
- <code>08</code>: Others
- **minmagnitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制事件震级大于指定值。
- **maxmagnitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制事件震级小于指定值。
- **include_unknown_mag** ([_bool_](https://docs.python.org/3/library/functions.html#bool)) – 包括/排除未定震级的时间。
- **mindepth** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制事件深度大于指定值。
- **maxdepth** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制事件深度小于指定值。
- **minlatitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站纬度大于指定值。
- **maxlatitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站纬度小于指定值。
- **minlongitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站经度大于指定值。
- **maxlongitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站经度小于指定值。
- **latitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 指定用于半径搜索的纬度。
- **longitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 指定用于半径搜索的经度。
- **minradius** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 指定环形搜索区域的最小半径。
- **maxradius** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 指定环形搜索区域的最大半径。
getarrivaltime
(_startdate, span, filename=None, os='DOS')[源代码]- 从Hi-net获取JMA走时数据
参数:
- **startdate** (str, [<code>datetime.date</code>](https://docs.python.org/3/library/datetime.html#datetime.date), [<code>datetime.datetime</code>](https://docs.python.org/3/library/datetime.html#datetime.datetime)) – 请求数据的开始时间。
- **span** ([_int_](https://docs.python.org/3/library/functions.html#int)) – 数据长度,单位为天。
- **os** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 文件格式。”DOS” 或 “UNIX”。
- **filename** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 要保存的文件名。返回:
filename – 要保存的文件名。返回类型:str
示例
- >>> from datetime import date
- >>> startdate = date(2010, 1, 1)
- >>> client.get_arrivaltime(startdate, 5)
- 'measure_20100101_5.txt'
- >>> client.get_arrivaltime(startdate, 5, filename="arrivaltime.txt")
- 'arrivaltime.txt'
getfocalmechanism
(_startdate, span, filename=None, os='DOS')[源代码]- 从Hi-net获取JMA震源机制解数据。
参数:
- **startdate** (str, [<code>datetime.date</code>](https://docs.python.org/3/library/datetime.html#datetime.date), [<code>datetime.datetime</code>](https://docs.python.org/3/library/datetime.html#datetime.datetime)) – 请求数据的开始时间。
- **span** ([_int_](https://docs.python.org/3/library/functions.html#int)) – 数据长度,单位为天。
- **os** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 文件格式。”DOS” 或 “UNIX”。
- **filename** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 要保存的文件名。返回:
filename – 要保存的文件名。返回类型:str
示例
- >>> from datetime import date
- >>> startdate = date(2010, 1, 1)
- >>> client.get_focalmechanism(startdate, 5)
- 'focal_20100101_5.txt'
- >>> client.get_focalmechanism(startdate, 5, filename="focal.txt")
- 'focal.txt'
getstation_list
(_code)[源代码]- 获取某个台网的台站列表。
支持的台网:
- Hi-net (0101)
- F-net (0103, 0103A)
- S-net (0120, 0120A)
- MeSO-net (0131)
- >>> stations = client.get_station_list('0101')
- >>> for station in stations:
- ... print(station)
- 0101 N.WNNH 45.4883 141.885 -159.06
- 0101 N.SFNH 45.3346 142.1185 -81.6
- ...
getselected_stations
(_code)[源代码]- 查询选中的台站数目。
支持的台网:
- Hi-net (0101)
- F-net (0103, 0103A)
参数:code (str) – 台网代码。返回:no_of_stations – 选中的台站数目。返回类型:int
selectstations
(_code, stations=None, minlatitude=None, maxlatitude=None, minlongitude=None, maxlongitude=None, latitude=None, longitude=None, minradius=None, maxradius=None)[源代码]- 获取某个台网的台站列表。
支持的台网:
- Hi-net (0101)
- F-net (0103, 0103A)
- S-net (0120, 0120A)
- MeSO-net (0131)
参数:
- **code** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 台网代码。
- **stations** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)_ or _[_list_](https://docs.python.org/3/library/stdtypes.html#list)) – 要选择的台站。
- **minlatitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站纬度大于指定值。
- **maxlatitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站纬度小于指定值。
- **minlongitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站经度大于指定值。
- **maxlongitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站经度小于指定值。
- **latitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 指定用于半径搜索的纬度。
- **longitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 指定用于半径搜索的经度。
- **minradius** ([_float_](https://docs.python.org/3/library/functions.html#float)) – Limit to stations within the specified minimum number of degreesfrom the geographic point defined by the latitude and longitudeparameters.
- **maxradius** ([_float_](https://docs.python.org/3/library/functions.html#float)) – Limit to stations within the specified maximum number of degreesfrom the geographic point defined by the latitude and longitudeparameters.
示例
只选择Hi-net的两个台站:
- >>> client.select_stations('0101', ['N.AAKH', 'N.ABNH'])
- >>> client.get_selected_stations('0101')
- 2
选择矩形框内的台站:
- >>> client.select_stations('0101', minlatitude=40, maxlatitude=50,
- ... minlongitude=140, maxlongitude=150)
选择环形区域内的台站:
- >>> client.select_stations('0101', latitude=30, longitude=139,
- ... minradius=0, maxradius=2)
选择Hi-net的全部台站:
- >>> client.select_stations('0101')
- >>> client.get_selected_stations('0101')
- 0
check_service_update
()[源代码]- 检查Hi-net网站是否被更新。
- >>> client.check_service_update()
- [2017-01-01 00:00:00] INFO: Hi-net web service is NOT updated.
check_package_release
()[源代码]- 检查HinetPy是否有发布新版本。
- >>> client.check_package_release()
- [2019-12-06 00:00:00] INFO: You're using the latest release (v0.6.5).
check_cmd_exists
()[源代码]- 检查
catwin32
和win2sac_32
是否在PATH中。
- >>> client.check_cmd_exists()
- [2017-01-01 00:00:00] INFO: catwin32: /home/user/bin/catwin32.
- [2017-01-01 00:00:00] INFO: win2sac_32: /home/user/bin/win2sac_32.
若 catwin32
和/或 win2sac_32
不在PATH中则会报错。这种情况下请从 Hi-net 下载win32tools并确保两个二进制文件都在PATH中。
info
(code=None)[源代码]- 列出台网信息。
示例
- >>> client.info()
- 0101 : NIED Hi-net
- 0103 : NIED F-net (broadband)
- 0103A : NIED F-net (strong motion)
- 010501 : NIED V-net (Tokachidake)
- ...
- 0703 : Aomori Prefectural Government
- 0705 : Shizuoka Prefectural Government
- 0801 : ADEP
- >>> client.info('0101')
- == Information of Network 0101 ==
- Name: NIED Hi-net
- Starttime: 20040401
- No. of channels: 2336