――Wir haben einen Mechanismus erstellt, um Tweets über IFTTT vom Erdbeben-Bulletin-Konto von Twitter abzurufen. Die Antwortzeit hängt vom Serverstatus von Twitter ab und ist scharf. Im schlimmsten Fall kann es nicht rechtzeitig erworben werden. ――Ich möchte das Notfall-Erdbeben-Bulletin nicht nur für mich selbst, sondern auch für den Discord-Kanal ausgeben und teilen. ――Mein Hobby ist die Erdbebenüberwachung. ――Es begann im Jahr 2020 laut zu werden, um Daten zu sammeln.
Starke Bewegungsüberwachung Erdbebeninformationen Push-Server → Google Chrome von CentOS 7 → Python-Webserver von CentOS 7 → Discord / Slack / Twitter-API
--Komplizierte Abhängigkeit des für die Installation von Google Chrome erforderlichen RPM-Pakets (im Zusammenhang mit dem Booten des Betriebssystems mit minimaler Konfiguration)
{
'type': 'eew', #Im Falle eines Notfall-Erdbebenbulletins wird der Stringtyp neu
'time': '1589131429000',
'report': '1', #Im Fall des ersten Berichts die Zeichenfolge 1 vom Typ Zeichenfolge. Der Abschlussbericht ist eine Zeichenfolge vom Typ final
'epicenter': 'Iyo Nada', #Epizentrum
'depth': '60km', #Quellentiefe
'magnitude': 3.5, #Stärke, die die Stärke des Erdbebens anzeigt
'latitude': 33.8, #Die beiden Linien hier sind wahrscheinlich Breiten- und Längengrade
'longitude': 132.1,
'intensity': '2', #Erwartete seismische Intensität
'index': 2
}
Die Informationen, die ich möchte, sind hauptsächlich String-Typ und Float-Typ. Denken Sie also daran. Als Referenz werde ich auch das Beschleunigungserkennungsprotokoll veröffentlichen.
{
'type': 'pga_alert',
'time': '1589131441839',
'max_pga': 0.637,
'new': True,
'estimated_intensity': 0,
'region_list': ['Ehime']
}
Es läuft als Webserver.
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qs, urlparse
import sendToDiscord #Dies ist mein eigener Code. Ich koche darin und poste es an Discords Webhook.
address = ('0.0.0.0', 8000)
class MyHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
parsed_path = urlparse(self.path)
self.send_response(200)
self.send_header('Content-Type', 'text/plain; charset=utf-8')
self.end_headers()
self.wfile.write(b'Hello from do_GET')
def do_POST(self):
parsed_path = urlparse(self.path)
content_length = int(self.headers['content-length'])
sendToDiscord.readJson('{}'.format((self.rfile.read(content_length).decode('utf-8'))))
self.send_response(200)
self.send_header('Content-Type', 'text/plain; charset=utf-8')
self.end_headers()
self.wfile.write(b'Hello from do_POST')
with HTTPServer(address, MyHTTPRequestHandler) as server:
server.serve_forever()
Es ist ungeschickt, aber ich habe dem Beispielcode gerade eine Zeile hinzugefügt. Der empfangene JSON wird unverändert in die Funktion eingegossen und verarbeitet.
Nachtrag 2020/05/19 An @ sirorabi516 Ich werde einen Teil des Wurfcodes in den Discord-Webhook einfügen.
import json
import requests
webhookUrl = "DISCORD WEBHOOK URL"
'''
Senden Sie eine Nachricht an Discord Webhook
'''
def sendDiscord(msg):
# Create JSON
payload = {
"content" : "{0}".format(msg)
}
'''
Es scheint besser, den Statuscode im Inhalt von res zu überprüfen und den Wiederholungsprozess einzubeziehen
'''
# Send to Discord
res = requests.post(webhookUrl, json.dumps(payload), headers={'Content-Type': 'application/json'})
return
'''
Verfassen Sie eine Nachricht, indem Sie den vom Webserver empfangenen JSON in ein Wörterbuch konvertieren
'''
def readJson(jsonData):
jsonData = json.loads(jsonData)
'''
Wenn es sich um ein Erdbeben-Bulletin handelt, der erste Bericht und die erwartete seismische Intensität 3 oder höher, wird es verarbeitet.
'''
# get first eew message
if jsonData.get('type') == 'eew' and jsonData.get('report') == '1' and int(jsonData.get('intensity')) > 2:
magnitude = float(jsonData.get('magnitude'))
# get EQ Data
epicenter = str(jsonData.get('epicenter'))
depth = str(jsonData.get('depth'))
intensity = str(jsonData.get('intensity'))
'''
Ausgabe der Nachrichtenzusammensetzung als Teil der Zwietracht. Wenn Sie fix angeben, kann der gesamte Text gelb sein.
'''
# add EQ Data
msg = '''```fix
Geschwindigkeitsbericht über Erdbeben am Boden (1. Bericht)
Erdbebenquelle: {0}
Erwartete seismische Intensität: {1}
Standard: M {2}
Tiefe: {3}
#### **`'''.format(epicenter, intensity, str(magnitude), depth)`**
```format(epicenter, intensity, str(magnitude), depth)
sendDiscord(msg)
return
'''
Im Falle einer falschen Meldung, pga_alert_Versuchen Sie, dies ebenfalls zu erkennen, da anscheinend ein Abbruch gesendet wird
'''
# Alert Cancel
if jsonData.get('type') == 'pga_alert_cancel':
msg = '### Cancel Message ###'
sendDiscord(msg)
return
Ich habe es so geschrieben. Ich denke, der letzte 'pga_alert_cancel' ist obligatorisch. Denn in der Vergangenheit flogen die Informationen "Northern Tokyo Bay Seismic Intensity 7" im ersten Bericht vom Beobachtungspunkt in Tokio. Als ich es erhielt, geriet ich in Panik: "Was? Ist das nicht das Level, auf dem Tokio zerstört wird?" Immerhin war es aufgrund des Einflusses des Blitzeinschlags ein falscher Bericht, aber das Loslassen der Informationen an anderer Stelle sollte keine seltsame Panik auslösen. Ich muss Ihnen auch sagen, dass es ein falscher Bericht war. Natürlich für mich.
Vorsichtsmaßnahmen
--JSON fliegt nicht von der Chrome-Erweiterung, es sei denn, Sie verlassen do_GET.
Im Moment denke ich, dass diese Methode Erdbebeninformationen für fortgeschrittene Benutzer mit explosiver Geschwindigkeit einfach zu handhaben ist, ohne Kosten zu verursachen. Da die Daten in JSON übergeben werden, binden Sie sie nach Belieben in die Nachricht ein. Es gibt auch eine Atmosphäre, in der Sie Informationen an Ihren Lieblingsort weitergeben können, sodass Sie sie anscheinend auf andere Weise verwenden können.
Recommended Posts