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 次。通常,你不需要修改这些设置,除非你知道自己在做什么。

示例

  1. >>> from HinetPy import Client
  2. >>> client = Client("username", "password")
  • login(user, password)[源代码]
  • 登陆Hi-net服务器。

参数:

  1. - **user** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – Hi-net账户用户名。
  2. - **password** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – Hi-net账户密码。

示例

  1. >>> from HinetPy import Client
  2. >>> client = Client()
  3. >>> client.login("username", "password")
  1. >>> client.doctor()
  2. [2019-12-06 00:00:00] INFO: You're using the latest release (v0.6.5).
  3. [2019-12-06 00:00:00] INFO: Hi-net web service is NOT updated.
  4. [2019-12-06 00:00:00] INFO: catwin32: /home/user/bin/catwin32.
  5. [2019-12-06 00:00:00] INFO: win2sac_32: /home/user/bin/win2sac_32.

检查清单

  1. - HinetPy是否发布了新版本(见 [<code>check_package_release()</code>](https://seisman.github.io/HinetPy/zh_CN/api/#HinetPy.client.Client.check_package_release)
  2. - Hi-net网站是否有更新(见 [<code>check_service_update()</code>](https://seisman.github.io/HinetPy/zh_CN/api/#HinetPy.client.Client.check_service_update)
  3. - <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服务器获取连续波形。

参数:

  1. - **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) 。
  2. - **starttime** ([<code>datetime.datetime</code>](https://docs.python.org/3/library/datetime.html#datetime.datetime) or str) – 数据请求的开始时间。
  3. - **span** ([_int_](https://docs.python.org/3/library/functions.html#int)) – 数据的时间长度,单位为分钟。
  4. - **max_span** ([_int_](https://docs.python.org/3/library/functions.html#int)) – 子请求的最大时间长度。默认会自动决定。
  5. - **data** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 下载的win32数据的文件名。默认格式: <code>CODE_YYYYmmddHHMM_SPAN.cnt</code>
  6. - **ctable** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 下载的通道表文件名。默认格式为 <code>CODE_YYYYmmdd.ch</code>
  7. - **outdir** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 将win32和通道表数据保存到指定目录中。默认为当前目录。
  8. - **threads** ([_int_](https://docs.python.org/3/library/functions.html#int)) – 用多少个线程以加速下载。
  9. - **cleanup** ([_bool_](https://docs.python.org/3/library/functions.html#bool)) – 在合并文件之后清理1分钟长度的cnt文件。返回:
  10. - **data** (_str_) 下载得到的win32数据的文件名。
  11. - **ctable** (_str_) 下载的通道表文件的文件名。

注解

时区

HinetPy中的所有时间都是日本标准时间(GMT+0900)。

max_span

Hi-net对每次数据请求设置了3个限制:

  1. - 数据长度不大于60分钟
  2. - 通道数*数据长度不得大于12000分钟
  3. - 仅保留最近150次请求的数据

例如,Hi-net台网有大约24000个通道。根据第2条限制,单次请求的通道长度不得大于5分钟。HinetPy通过将一个长的数据请求分割成多个短的子请求来打破这一限制。

工作流程

  1. - 做一些检查
  2. - 将长数据请求分割成多个短的数据子请求
  3. - 对所有子请求进行循环并返回要下载的数据ID
  4. - 基于数据ID下载所有数据
  5. - 解压下载得到的所有ZIP文件并合并到一个win32格式的文件
  6. - 清理工作

示例

从Hi-net请求2010-01-01T05:35 (GMT+0900)开始的6分钟数据。

  1. >>> client.get_continuous_waveform('0101', '201001010535', 6)
  2. ('0101_201001010535_6.cnt', '0101_20100101.ch')

starttime 也支持其他常见的格式:

  1. >>> client.get_continuous_waveform('0101', '2010-01-01 05:35', 6)
  2. >>> client.get_continuous_waveform('0101', '2010-01-01T05:35', 6)

starttime 也可以用 datetime.datetime 指定:

  1. >>> from datetime import datetime
  2. >>> starttime = datetime(2010, 1, 1, 5, 35)
  3. >>> client.get_continuous_waveform('0101', starttime, 6)
  4. ('0101_201001010535_6.cnt', '0101_20100101.ch')

从F-net申请2010-01-01T00:00 (GMT+0900)全天的数据:

  1. >>> client.get_continuous_waveform('0103', starttime, 1440, max_span=25)
  2. ('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)[源代码]
  • 获取事件波形数据。

参数:

  1. - **starttime** ([<code>datetime.datetime</code>](https://docs.python.org/3/library/datetime.html#datetime.datetime) or str) – 事件的开始事件。
  2. - **endtime** ([<code>datetime.datetime</code>](https://docs.python.org/3/library/datetime.html#datetime.datetime) or str) – 事件的结束事件。
  3. - **region** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) –

限制事件在指定的区域内。可选值包括:

  1. - <code>00</code>: Whole Japan
  2. - <code>01</code>: Hokkaido Region
  3. - <code>02</code>: Tohoku Region
  4. - <code>03</code>: Kanto Region
  5. - <code>04</code>: Chubu Region
  6. - <code>05</code>: Kinki Region
  7. - <code>06</code>: Chugoku/Shikoku Region
  8. - <code>07</code>: Kyushu Region
  9. - <code>08</code>: Others
  10. - **minmagnitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制事件震级大于指定值。
  11. - **maxmagnitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制事件震级小于指定值。
  12. - **include_unknown_mag** ([_bool_](https://docs.python.org/3/library/functions.html#bool)) – 包括/排除未定震级的时间。
  13. - **mindepth** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制事件深度大于指定值。
  14. - **maxdepth** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制事件深度小于指定值。
  15. - **minlatitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站纬度大于指定值。
  16. - **maxlatitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站纬度小于指定值。
  17. - **minlongitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站经度大于指定值。
  18. - **maxlongitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站经度小于指定值。
  19. - **latitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 指定用于半径搜索的纬度。
  20. - **longitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 指定用于半径搜索的经度。
  21. - **minradius** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 指定环形搜索区域的最小半径。
  22. - **maxradius** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 指定环形搜索区域的最大半径。
  • getarrivaltime(_startdate, span, filename=None, os='DOS')[源代码]
  • 从Hi-net获取JMA走时数据

参数:

  1. - **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)) – 请求数据的开始时间。
  2. - **span** ([_int_](https://docs.python.org/3/library/functions.html#int)) – 数据长度,单位为天。
  3. - **os** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 文件格式。”DOS” 或 “UNIX”。
  4. - **filename** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 要保存的文件名。返回:

filename – 要保存的文件名。返回类型:str

示例

  1. >>> from datetime import date
  2. >>> startdate = date(2010, 1, 1)
  3. >>> client.get_arrivaltime(startdate, 5)
  4. 'measure_20100101_5.txt'
  5. >>> client.get_arrivaltime(startdate, 5, filename="arrivaltime.txt")
  6. 'arrivaltime.txt'
  • getfocalmechanism(_startdate, span, filename=None, os='DOS')[源代码]
  • 从Hi-net获取JMA震源机制解数据。

参数:

  1. - **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)) – 请求数据的开始时间。
  2. - **span** ([_int_](https://docs.python.org/3/library/functions.html#int)) – 数据长度,单位为天。
  3. - **os** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 文件格式。”DOS” 或 “UNIX”。
  4. - **filename** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 要保存的文件名。返回:

filename – 要保存的文件名。返回类型:str

示例

  1. >>> from datetime import date
  2. >>> startdate = date(2010, 1, 1)
  3. >>> client.get_focalmechanism(startdate, 5)
  4. 'focal_20100101_5.txt'
  5. >>> client.get_focalmechanism(startdate, 5, filename="focal.txt")
  6. 'focal.txt'
  • getstation_list(_code)[源代码]
  • 获取某个台网的台站列表。

支持的台网:

  1. - Hi-net (0101)
  2. - F-net (0103, 0103A)
  3. - S-net (0120, 0120A)
  4. - MeSO-net (0131)
  1. >>> stations = client.get_station_list('0101')
  2. >>> for station in stations:
  3. ... print(station)
  4. 0101 N.WNNH 45.4883 141.885 -159.06
  5. 0101 N.SFNH 45.3346 142.1185 -81.6
  6. ...
  • getselected_stations(_code)[源代码]
  • 查询选中的台站数目。

支持的台网:

  1. - Hi-net (0101)
  2. - 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)[源代码]
  • 获取某个台网的台站列表。

支持的台网:

  1. - Hi-net (0101)
  2. - F-net (0103, 0103A)
  3. - S-net (0120, 0120A)
  4. - MeSO-net (0131)

参数:

  1. - **code** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)) – 台网代码。
  2. - **stations** ([_str_](https://docs.python.org/3/library/stdtypes.html#str)_ or _[_list_](https://docs.python.org/3/library/stdtypes.html#list)) – 要选择的台站。
  3. - **minlatitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站纬度大于指定值。
  4. - **maxlatitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站纬度小于指定值。
  5. - **minlongitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站经度大于指定值。
  6. - **maxlongitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 限制台站经度小于指定值。
  7. - **latitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 指定用于半径搜索的纬度。
  8. - **longitude** ([_float_](https://docs.python.org/3/library/functions.html#float)) – 指定用于半径搜索的经度。
  9. - **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.
  10. - **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的两个台站:

  1. >>> client.select_stations('0101', ['N.AAKH', 'N.ABNH'])
  2. >>> client.get_selected_stations('0101')
  3. 2

选择矩形框内的台站:

  1. >>> client.select_stations('0101', minlatitude=40, maxlatitude=50,
  2. ... minlongitude=140, maxlongitude=150)

选择环形区域内的台站:

  1. >>> client.select_stations('0101', latitude=30, longitude=139,
  2. ... minradius=0, maxradius=2)

选择Hi-net的全部台站:

  1. >>> client.select_stations('0101')
  2. >>> client.get_selected_stations('0101')
  3. 0
  • check_service_update()[源代码]
  • 检查Hi-net网站是否被更新。
  1. >>> client.check_service_update()
  2. [2017-01-01 00:00:00] INFO: Hi-net web service is NOT updated.
  • check_package_release()[源代码]
  • 检查HinetPy是否有发布新版本。
  1. >>> client.check_package_release()
  2. [2019-12-06 00:00:00] INFO: You're using the latest release (v0.6.5).
  • check_cmd_exists()[源代码]
  • 检查 catwin32win2sac_32 是否在PATH中。
  1. >>> client.check_cmd_exists()
  2. [2017-01-01 00:00:00] INFO: catwin32: /home/user/bin/catwin32.
  3. [2017-01-01 00:00:00] INFO: win2sac_32: /home/user/bin/win2sac_32.

catwin32 和/或 win2sac_32 不在PATH中则会报错。这种情况下请从 Hi-net 下载win32tools并确保两个二进制文件都在PATH中。

参数:code (None or str) – 台网代码。

示例

  1. >>> client.info()
  2. 0101 : NIED Hi-net
  3. 0103 : NIED F-net (broadband)
  4. 0103A : NIED F-net (strong motion)
  5. 010501 : NIED V-net (Tokachidake)
  6. ...
  7. 0703 : Aomori Prefectural Government
  8. 0705 : Shizuoka Prefectural Government
  9. 0801 : ADEP
  10. >>> client.info('0101')
  11. == Information of Network 0101 ==
  12. Name: NIED Hi-net
  13. Starttime: 20040401
  14. No. of channels: 2336