#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import json
import requests
import datetime
import time
# P2P地震情報から地震情報を取得する
def getJisin( ) :
api = "url"
r = requests.get ( api)
r.raise_for_status ( )
d = r.text
return d
def loadDic( ) : # APIのJSONファイル
dic = getJisin( )
dic = json.loads ( dic)
return dic
def loadFile( ) : # ローカルのJSONファイル
dic = open ( "jisin.json" , "r" )
dic = json.load ( dic) # ファイルから読み込む時はjson.load
return dic
def codeDic( code ) : # printのところに直接書けばこれは必要ない
dic = {
"551" : "地震情報" ,
"552" : "津波情報" ,
"5610" : "地震感知情報"
}
code = dic[ code ]
return code
def eqInfo( key) :
dic = {
"ScalePrompt" : "震度速報" ,
"Destination" : "震源情報" ,
"ScaleAndDestination" : "震度・震源情報" ,
"DetailScale" : "地震情報" ,
"Foreign" : "遠地地震"
}
t = dic[ key]
return t
def scaleDic( key) :
dic = {
10 : "1" ,
20 : "2" ,
30 : "3" ,
40 : "4" ,
45 : "5弱" ,
50 : "5強" ,
55 : "6弱" ,
60 : "6強" ,
70 : "7"
}
scale = dic.get ( key)
if scale is None :
scale = "不明"
return scale
def tsunamiInfo( key) :
dic = {
"None" : "津波の心配なし" ,
"Checking" : "津波有無は調査中" ,
"NonEffective" : "津波被害の心配なし(若干の海面変動あり)" ,
"Watch" : "津波注意報発表中" ,
"Warning" : "津波予報発表中"
}
t = dic[ key]
return t
def getDif( unixNowTime, record) :
timeStr = record.get ( 'time' )
timeData = datetime .datetime .strptime ( timeStr, "%Y/%m/%d %H:%M:%S.%f" )
unixTime = timeData.timestamp ( )
unixDif = unixNowTime - unixTime
return unixDif
def printEq( record) :
issue = record.get ( 'issue' )
issueType = issue.get ( 'type' )
pass
eqType = eqInfo( issueType)
eq = record.get ( 'earthquake' )
eTime = eq.get ( 'time' )
eqMaxScale = eq.get ( 'maxScale' )
eqMaxScale = scaleDic( eqMaxScale)
eqMaxScale = f'最大震度{eqMaxScale}'
eqTsunami = eq.get ( 'domesticTsunami' )
eqTsunami = tsunamiInfo( eqTsunami)
hy = eq.get ( 'hypocenter' )
hName = hy.get ( 'name' )
hDepth = hy.get ( 'depth' )
hMagnitude = hy.get ( 'magnitude' )
# points = record.get('points')
if eqType == "震度速報" :
print ( f'{eqType} {eTime} {eqMaxScale} {eqTsunami}' )
else :
print ( f'{eqType} {eTime} {eqMaxScale} {hName} ({hDepth} M{hMagnitude}) {eqTsunami}' )
def printTunami( record, code ) : # TODO 作りかけ。実際の配信内容が分からないから。
timeStr = record.get ( 'time' )
timeData = datetime .datetime .strptime ( timeStr, "%Y/%m/%d %H:%M:%S.%f" )
time = "{0:%d日%H時%M分}" .format ( timeData)
code = codeDic( code )
print ( code , time )
def printUserquake( record, code ) :
timeStr = record.get ( 'time' )
timeData = datetime .datetime .strptime ( timeStr, "%Y/%m/%d %H:%M:%S.%f" )
time = "{0:%d日%H時%M分}" .format ( timeData)
code = codeDic( code )
prefs = record.get ( 'prefs' )
prefsSorted = sorted ( prefs.items ( ) , key= lambda x: x[ 1 ] , reverse= True )
pp = [ '{} ({}ヶ所)' .format ( i[ 0 ] , i[ 1 ] ) for i in prefsSorted]
ppp = ', ' .join ( pp)
print ( code , time , ppp)
def main( ) :
if 2 == len ( sys .argv ) :
mini = int ( sys .argv [ 1 ] )
else :
mini = 10
sec = int ( mini * 60 )
unixNowTime = time .time ( )
# eqList = loadDic() # APIのJSONファイル # 実験中は使わない事!!!
eqList = loadFile( ) # ローカルのJAONファイル
for record in eqList:
unixDif = getDif( unixNowTime, record)
if unixDif < sec:
code = record[ 'code' ]
code = str ( code )
if '551' in code :
printEq( record)
elif '552' in code :
printTunami( record, code )
elif '5610' in code :
printUserquake( record, code )
pass
else :
pass
else :
pass
if __name__ == '__main__' :
main( )
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgppbXBvcnQgc3lzCmltcG9ydCBqc29uCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IHRpbWUKCgojIFAyUOWcsOmch+aDheWgseOBi+OCieWcsOmch+aDheWgseOCkuWPluW+l+OBmeOCiwoKCmRlZiBnZXRKaXNpbigpOgogICAgYXBpID0gInVybCIKICAgIHIgPSByZXF1ZXN0cy5nZXQoYXBpKQogICAgci5yYWlzZV9mb3Jfc3RhdHVzKCkKICAgIGQgPSByLnRleHQKICAgIHJldHVybiBkCgoKZGVmIGxvYWREaWMoKTogICAgIyBBUEnjga5KU09O44OV44Kh44Kk44OrCiAgICBkaWMgPSBnZXRKaXNpbigpCiAgICBkaWMgPSBqc29uLmxvYWRzKGRpYykKICAgIHJldHVybiBkaWMKCgpkZWYgbG9hZEZpbGUoKTogICAgIyDjg63jg7zjgqvjg6vjga5KU09O44OV44Kh44Kk44OrCiAgICBkaWMgPSBvcGVuKCJqaXNpbi5qc29uIiwgInIiKQogICAgZGljID0ganNvbi5sb2FkKGRpYykgICAgIyDjg5XjgqHjgqTjg6vjgYvjgonoqq3jgb/ovrzjgoDmmYLjga9qc29uLmxvYWQKICAgIHJldHVybiBkaWMKCgpkZWYgY29kZURpYyhjb2RlKTogICAgIyBwcmludOOBruOBqOOBk+OCjeOBq+ebtOaOpeabuOOBkeOBsOOBk+OCjOOBr+W/heimgeOBquOBhAogICAgZGljID0gewogICAgICAgICI1NTEiOiAi5Zyw6ZyH5oOF5aCxIiwKICAgICAgICAiNTUyIjogIua0peazouaDheWgsSIsCiAgICAgICAgIjU2MTAiOiAi5Zyw6ZyH5oSf55+l5oOF5aCxIgogICAgfQogICAgY29kZSA9IGRpY1tjb2RlXQogICAgcmV0dXJuIGNvZGUKCgpkZWYgZXFJbmZvKGtleSk6CiAgICBkaWMgPSB7CiAgICAgICAgIlNjYWxlUHJvbXB0IjogIumch+W6pumAn+WgsSIsCiAgICAgICAgIkRlc3RpbmF0aW9uIjogIumch+a6kOaDheWgsSIsCiAgICAgICAgIlNjYWxlQW5kRGVzdGluYXRpb24iOiAi6ZyH5bqm44O76ZyH5rqQ5oOF5aCxIiwKICAgICAgICAiRGV0YWlsU2NhbGUiOiAi5Zyw6ZyH5oOF5aCxIiwKICAgICAgICAiRm9yZWlnbiI6ICLpgaDlnLDlnLDpnIciCiAgICB9CiAgICB0ID0gZGljW2tleV0KICAgIHJldHVybiB0CgoKZGVmIHNjYWxlRGljKGtleSk6CiAgICBkaWMgPSB7CiAgICAgICAgMTA6ICIxIiwKICAgICAgICAyMDogIjIiLAogICAgICAgIDMwOiAiMyIsCiAgICAgICAgNDA6ICI0IiwKICAgICAgICA0NTogIjXlvLEiLAogICAgICAgIDUwOiAiNeW8tyIsCiAgICAgICAgNTU6ICI25byxIiwKICAgICAgICA2MDogIjblvLciLAogICAgICAgIDcwOiAiNyIKICAgIH0KICAgIHNjYWxlID0gZGljLmdldChrZXkpCiAgICBpZiBzY2FsZSBpcyBOb25lOgogICAgICAgIHNjYWxlID0gIuS4jeaYjiIKICAgIHJldHVybiBzY2FsZQoKCmRlZiB0c3VuYW1pSW5mbyhrZXkpOgogICAgZGljID0gewogICAgICAgICJOb25lIjogIua0peazouOBruW/g+mFjeOBquOBlyIsCiAgICAgICAgIkNoZWNraW5nIjogIua0peazouacieeEoeOBr+iqv+afu+S4rSIsCiAgICAgICAgIk5vbkVmZmVjdGl2ZSI6ICLmtKXms6LooqvlrrPjga7lv4PphY3jgarjgZco6Iul5bmy44Gu5rW36Z2i5aSJ5YuV44GC44KKKSIsCiAgICAgICAgIldhdGNoIjogIua0peazouazqOaEj+WgseeZuuihqOS4rSIsCiAgICAgICAgIldhcm5pbmciOiAi5rSl5rOi5LqI5aCx55m66KGo5LitIgogICAgfQogICAgdCA9IGRpY1trZXldCiAgICByZXR1cm4gdAoKCmRlZiBnZXREaWYodW5peE5vd1RpbWUsIHJlY29yZCk6CiAgICB0aW1lU3RyID0gcmVjb3JkLmdldCgndGltZScpCiAgICB0aW1lRGF0YSA9IGRhdGV0aW1lLmRhdGV0aW1lLnN0cnB0aW1lKHRpbWVTdHIsICIlWS8lbS8lZCAlSDolTTolUy4lZiIpCiAgICB1bml4VGltZSA9IHRpbWVEYXRhLnRpbWVzdGFtcCgpCiAgICB1bml4RGlmID0gdW5peE5vd1RpbWUgLSB1bml4VGltZQogICAgcmV0dXJuIHVuaXhEaWYKCgpkZWYgcHJpbnRFcShyZWNvcmQpOgogICAgaXNzdWUgPSByZWNvcmQuZ2V0KCdpc3N1ZScpCiAgICBpc3N1ZVR5cGUgPSBpc3N1ZS5nZXQoJ3R5cGUnKQogICAgcGFzcwogICAgZXFUeXBlID0gZXFJbmZvKGlzc3VlVHlwZSkKICAgIGVxID0gcmVjb3JkLmdldCgnZWFydGhxdWFrZScpCiAgICBlVGltZSA9IGVxLmdldCgndGltZScpCiAgICBlcU1heFNjYWxlID0gZXEuZ2V0KCdtYXhTY2FsZScpCiAgICBlcU1heFNjYWxlID0gc2NhbGVEaWMoZXFNYXhTY2FsZSkKICAgIGVxTWF4U2NhbGUgPSBmJ+acgOWkp+mch+W6pntlcU1heFNjYWxlfScKICAgIGVxVHN1bmFtaSA9IGVxLmdldCgnZG9tZXN0aWNUc3VuYW1pJykKICAgIGVxVHN1bmFtaSA9IHRzdW5hbWlJbmZvKGVxVHN1bmFtaSkKICAgIGh5ID0gZXEuZ2V0KCdoeXBvY2VudGVyJykKICAgIGhOYW1lID0gaHkuZ2V0KCduYW1lJykKICAgIGhEZXB0aCA9IGh5LmdldCgnZGVwdGgnKQogICAgaE1hZ25pdHVkZSA9IGh5LmdldCgnbWFnbml0dWRlJykKICAgICMgcG9pbnRzID0gcmVjb3JkLmdldCgncG9pbnRzJykKCiAgICBpZiBlcVR5cGUgPT0gIumch+W6pumAn+WgsSI6CiAgICAgICAgcHJpbnQoZid7ZXFUeXBlfSB7ZVRpbWV9IHtlcU1heFNjYWxlfSB7ZXFUc3VuYW1pfScpCiAgICBlbHNlOgogICAgICAgIHByaW50KGYne2VxVHlwZX0ge2VUaW1lfSB7ZXFNYXhTY2FsZX0ge2hOYW1lfSAoe2hEZXB0aH0gTXtoTWFnbml0dWRlfSkge2VxVHN1bmFtaX0nKQoKCmRlZiBwcmludFR1bmFtaShyZWNvcmQsIGNvZGUpOiAgICAjIFRPRE8g5L2c44KK44GL44GR44CC5a6f6Zqb44Gu6YWN5L+h5YaF5a6544GM5YiG44GL44KJ44Gq44GE44GL44KJ44CCCiAgICB0aW1lU3RyID0gcmVjb3JkLmdldCgndGltZScpCiAgICB0aW1lRGF0YSA9IGRhdGV0aW1lLmRhdGV0aW1lLnN0cnB0aW1lKHRpbWVTdHIsICIlWS8lbS8lZCAlSDolTTolUy4lZiIpCiAgICB0aW1lID0gInswOiVk5pelJUjmmYIlTeWIhn0iLmZvcm1hdCh0aW1lRGF0YSkKICAgIGNvZGUgPSBjb2RlRGljKGNvZGUpCiAgICBwcmludChjb2RlLCB0aW1lKQoKCmRlZiBwcmludFVzZXJxdWFrZShyZWNvcmQsIGNvZGUpOgogICAgdGltZVN0ciA9IHJlY29yZC5nZXQoJ3RpbWUnKQogICAgdGltZURhdGEgPSBkYXRldGltZS5kYXRldGltZS5zdHJwdGltZSh0aW1lU3RyLCAiJVkvJW0vJWQgJUg6JU06JVMuJWYiKQogICAgdGltZSA9ICJ7MDolZOaXpSVI5pmCJU3liIZ9Ii5mb3JtYXQodGltZURhdGEpCiAgICBjb2RlID0gY29kZURpYyhjb2RlKQogICAgcHJlZnMgPSByZWNvcmQuZ2V0KCdwcmVmcycpCiAgICBwcmVmc1NvcnRlZCA9IHNvcnRlZChwcmVmcy5pdGVtcygpLCBrZXk9bGFtYmRhIHg6IHhbMV0sIHJldmVyc2U9VHJ1ZSkKICAgIHBwID0gWyd7fSAoe33jg7bmiYApJy5mb3JtYXQoaVswXSwgaVsxXSkgZm9yIGkgaW4gcHJlZnNTb3J0ZWRdCiAgICBwcHAgPSAnLCAnLmpvaW4ocHApCiAgICBwcmludChjb2RlLCB0aW1lLCBwcHApCgoKZGVmIG1haW4oKToKICAgIGlmIDIgPT0gbGVuKHN5cy5hcmd2KToKICAgICAgICBtaW5pID0gaW50KHN5cy5hcmd2WzFdKQogICAgZWxzZToKICAgICAgICBtaW5pID0gMTAKICAgIHNlYyA9IGludChtaW5pICogNjApCiAgICB1bml4Tm93VGltZSA9IHRpbWUudGltZSgpCiAgICAjIGVxTGlzdCA9IGxvYWREaWMoKSAgICAjIEFQSeOBrkpTT07jg5XjgqHjgqTjg6sgICAgIyDlrp/pqJPkuK3jga/kvb/jgo/jgarjgYTkuoshISEKICAgIGVxTGlzdCA9IGxvYWRGaWxlKCkgICAgIyDjg63jg7zjgqvjg6vjga5KQU9O44OV44Kh44Kk44OrCiAgICBmb3IgcmVjb3JkIGluIGVxTGlzdDoKICAgICAgICB1bml4RGlmID0gZ2V0RGlmKHVuaXhOb3dUaW1lLCByZWNvcmQpCiAgICAgICAgaWYgdW5peERpZiA8IHNlYzoKICAgICAgICAgICAgY29kZSA9IHJlY29yZFsnY29kZSddCiAgICAgICAgICAgIGNvZGUgPSBzdHIoY29kZSkKICAgICAgICAgICAgaWYgJzU1MScgaW4gY29kZToKICAgICAgICAgICAgICAgIHByaW50RXEocmVjb3JkKQogICAgICAgICAgICBlbGlmICc1NTInIGluIGNvZGU6CiAgICAgICAgICAgICAgICBwcmludFR1bmFtaShyZWNvcmQsIGNvZGUpCiAgICAgICAgICAgIGVsaWYgJzU2MTAnIGluIGNvZGU6CiAgICAgICAgICAgICAgICBwcmludFVzZXJxdWFrZShyZWNvcmQsIGNvZGUpCiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcGFzcwoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkK