fork download
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import sys
  5. import json
  6. import requests
  7. import datetime
  8. import time
  9.  
  10.  
  11. # P2P地震情報から地震情報を取得する
  12.  
  13.  
  14. def getJisin():
  15. api = "url"
  16. r = requests.get(api)
  17. r.raise_for_status()
  18. d = r.text
  19. return d
  20.  
  21.  
  22. def loadDic(): # APIのJSONファイル
  23. dic = getJisin()
  24. dic = json.loads(dic)
  25. return dic
  26.  
  27.  
  28. def loadFile(): # ローカルのJSONファイル
  29. dic = open("jisin.json", "r")
  30. dic = json.load(dic) # ファイルから読み込む時はjson.load
  31. return dic
  32.  
  33.  
  34. def codeDic(code): # printのところに直接書けばこれは必要ない
  35. dic = {
  36. "551": "地震情報",
  37. "552": "津波情報",
  38. "5610": "地震感知情報"
  39. }
  40. code = dic[code]
  41. return code
  42.  
  43.  
  44. def eqInfo(key):
  45. dic = {
  46. "ScalePrompt": "震度速報",
  47. "Destination": "震源情報",
  48. "ScaleAndDestination": "震度・震源情報",
  49. "DetailScale": "地震情報",
  50. "Foreign": "遠地地震"
  51. }
  52. t = dic[key]
  53. return t
  54.  
  55.  
  56. def scaleDic(key):
  57. dic = {
  58. 10: "1",
  59. 20: "2",
  60. 30: "3",
  61. 40: "4",
  62. 45: "5弱",
  63. 50: "5強",
  64. 55: "6弱",
  65. 60: "6強",
  66. 70: "7"
  67. }
  68. scale = dic.get(key)
  69. if scale is None:
  70. scale = "不明"
  71. return scale
  72.  
  73.  
  74. def tsunamiInfo(key):
  75. dic = {
  76. "None": "津波の心配なし",
  77. "Checking": "津波有無は調査中",
  78. "NonEffective": "津波被害の心配なし(若干の海面変動あり)",
  79. "Watch": "津波注意報発表中",
  80. "Warning": "津波予報発表中"
  81. }
  82. t = dic[key]
  83. return t
  84.  
  85.  
  86. def getDif(unixNowTime, record):
  87. timeStr = record.get('time')
  88. timeData = datetime.datetime.strptime(timeStr, "%Y/%m/%d %H:%M:%S.%f")
  89. unixTime = timeData.timestamp()
  90. unixDif = unixNowTime - unixTime
  91. return unixDif
  92.  
  93.  
  94. def printEq(record):
  95. issue = record.get('issue')
  96. issueType = issue.get('type')
  97. pass
  98. eqType = eqInfo(issueType)
  99. eq = record.get('earthquake')
  100. eTime = eq.get('time')
  101. eqMaxScale = eq.get('maxScale')
  102. eqMaxScale = scaleDic(eqMaxScale)
  103. eqMaxScale = f'最大震度{eqMaxScale}'
  104. eqTsunami = eq.get('domesticTsunami')
  105. eqTsunami = tsunamiInfo(eqTsunami)
  106. hy = eq.get('hypocenter')
  107. hName = hy.get('name')
  108. hDepth = hy.get('depth')
  109. hMagnitude = hy.get('magnitude')
  110. # points = record.get('points')
  111.  
  112. if eqType == "震度速報":
  113. print(f'{eqType} {eTime} {eqMaxScale} {eqTsunami}')
  114. else:
  115. print(f'{eqType} {eTime} {eqMaxScale} {hName} ({hDepth} M{hMagnitude}) {eqTsunami}')
  116.  
  117.  
  118. def printTunami(record, code): # TODO 作りかけ。実際の配信内容が分からないから。
  119. timeStr = record.get('time')
  120. timeData = datetime.datetime.strptime(timeStr, "%Y/%m/%d %H:%M:%S.%f")
  121. time = "{0:%d日%H時%M分}".format(timeData)
  122. code = codeDic(code)
  123. print(code, time)
  124.  
  125.  
  126. def printUserquake(record, code):
  127. timeStr = record.get('time')
  128. timeData = datetime.datetime.strptime(timeStr, "%Y/%m/%d %H:%M:%S.%f")
  129. time = "{0:%d日%H時%M分}".format(timeData)
  130. code = codeDic(code)
  131. prefs = record.get('prefs')
  132. prefsSorted = sorted(prefs.items(), key=lambda x: x[1], reverse=True)
  133. pp = ['{} ({}ヶ所)'.format(i[0], i[1]) for i in prefsSorted]
  134. ppp = ', '.join(pp)
  135. print(code, time, ppp)
  136.  
  137.  
  138. def main():
  139. if 2 == len(sys.argv):
  140. mini = int(sys.argv[1])
  141. else:
  142. mini = 10
  143. sec = int(mini * 60)
  144. unixNowTime = time.time()
  145. # eqList = loadDic() # APIのJSONファイル # 実験中は使わない事!!!
  146. eqList = loadFile() # ローカルのJAONファイル
  147. for record in eqList:
  148. unixDif = getDif(unixNowTime, record)
  149. if unixDif < sec:
  150. code = record['code']
  151. code = str(code)
  152. if '551' in code:
  153. printEq(record)
  154. elif '552' in code:
  155. printTunami(record, code)
  156. elif '5610' in code:
  157. printUserquake(record, code)
  158. pass
  159. else:
  160. pass
  161. else:
  162. pass
  163.  
  164.  
  165. if __name__ == '__main__':
  166. main()
  167.  
Runtime error #stdin #stdout #stderr 0.35s 34196KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Traceback (most recent call last):
  File "./prog.py", line 166, in <module>
  File "./prog.py", line 146, in main
  File "./prog.py", line 29, in loadFile
FileNotFoundError: [Errno 2] No such file or directory: 'jisin.json'