[PYTHON] Es ist sehr schnell, wenn Sie das Notfall-Erdbeben-Bulletin auf dem starken Bewegungsmonitor erhalten und mit JSON bearbeiten

Überblick

Voraussetzungen

Hintergrund

――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.

Wie zu erreichen

Datenflussbild (Entschuldigung für die Zeichenfolge)

Starke Bewegungsüberwachung Erdbebeninformationen Push-Server → Google Chrome von CentOS 7 → Python-Webserver von CentOS 7 → Discord / Slack / Twitter-API

CentOS Seite

Ergänzung

--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']
}

Python-Seite

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.

Schließlich

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

Es ist sehr schnell, wenn Sie das Notfall-Erdbeben-Bulletin auf dem starken Bewegungsmonitor erhalten und mit JSON bearbeiten
POST JSON mit Python und empfange mit PHP
POST das Bild mit json und erhalte es mit der Flasche
Schreiben Sie ein Skript in Shell und Python, um Sie in Slack zu benachrichtigen, wenn der Vorgang abgeschlossen ist
So geben Sie die im Django-Modell enthaltenen Daten im JSON-Format zurück und ordnen sie der Broschüre zu