[PYTHON] Erhalten Sie Wetterinformationen über Yahoo! Open Local Platform (YOLP) und lassen Sie Razpai mit AquesTalkPi sprechen

Aus irgendeinem Grund ist Yahoo! Open Local, wenn Sie nach etwas suchen, das Ihnen leicht Wetterinformationen liefert, vorzugsweise morgen oder übermorgen, aber in einer Zeitspanne von etwa ◯◯ Minuten Ich habe Platform (YOLP) gefunden. Ich habe nicht viele Anwendungsfälle gefunden, aber es war sehr praktisch und interessant, deshalb werde ich es kurz zusammenfassen. Wenn ich etwas tun kann, das hinzugefügt werden sollte, schreibe ich es wie üblich in blog.

[Über YOLP]

Laut der offiziellen Website

Yahoo! Open Local Platform (YOLP) ist eine Karten- / Regionalinformations-API / SDK, die von Yahoo! JAPAN für Entwickler bereitgestellt wird.

(Zitiert von http://developer.yahoo.co.jp/webapi/map/) Und das. Es gibt Wetterinformations-API, was sehr praktisch ist. Der Fall der kommerziellen Nutzung wird unter http://www.yahoo-help.jp/app/answers/detail/p/537/a_id/43405 erwähnt und grob zusammengefasst: "Verwendung für nichtkommerzielle Zwecke ist Es wird akzeptiert. Es verbietet nicht jede Verwendung durch kommerzielle Websites und Unternehmen. Wenn Sie es für Unternehmen verwenden möchten, konsultieren Sie bitte das Anfragefenster jeder API. "

[Wetterinformationen abrufen]

Vorbereitung: Holen Sie sich die Anwendungs-ID

Beziehen Sie die Anwendungs-ID gemäß "Benutzerhandbuch". Was den registrierten Inhalt betrifft, gibt es keinen Grund zur Sorge, daher werde ich die Erklärung weglassen.

Versuchen Sie es mit einem Python-Skript

Versuchen Sie beim Lesen der Erklärung der Wetterinformations-API, diese mit Python abzurufen.

Die Ziel-URL lautet http://weather.olp.yahooapis.jp/v1/place, unabhängig davon, ob sie in XML oder JSON erfasst wurde. Es ist ein sehr normaler Ablauf, dass JSON zurückgegeben wird, wenn Sie die erforderlichen Informationen als Abfrage abrufen und anhängen.

Für die Funktionsprüfung sind vorerst die folgenden drei ausreichend.

--appid: Anwendungs-ID. Erhalten durch das obige Verfahren. -Koordinaten: Breiten- und Längengrad. Durch Kommas in der Reihenfolge von Längen- und Breitengrad getrennt. Wenn Sie nach mehreren Punkten suchen, trennen Sie diese durch einen Abstand von halber Breite (bis zu 10 Punkte). --output: Ausgabeformat. Entweder xml / json.

Die Punktdaten mit der Aufschrift "Es regnet jetzt oder es regnet gleich" sind interessanter, daher regnete es zum Zeitpunkt der Bestätigung in der Nähe der Stadt Nanagajuku, Präfektur Miyagi. Ausprobieren.

getOtenki.py


#!/usr/bin/python
# encoding:utf-8

import urllib
import pprint
import json

APP_ID = "***************************************"

BASE_URL = "http://weather.olp.yahooapis.jp/v1/place"
COORDINATES = "140.471414,38.026973"
OUTPUT="json"

url = BASE_URL + "?appid=%s&coordinates=%s&output=%s" % (APP_ID,COORDINATES,OUTPUT)
# print (url)

json_tree = json.loads( urllib.urlopen(url).read())
pprint.pprint(json_tree)

Das Ausgabeergebnis sieht folgendermaßen aus.

{u'Feature': [{u'Geometry': {u'Coordinates': u'140.47141,38.026973',
                             u'Type': u'point'},
               u'Id': u'201609231900_140.47141_38.026973',
               u'Name': u'\u5730\u70b9(140.47141,38.026973)\u306e2016\u5e7409\u670823\u65e5 19\u664200\u5206\u304b\u308960\u5206\u9593\u306e\u5929\u6c17\u60c5\u5831',
               u'Property': {u'WeatherAreaCode': 3420,
                             u'WeatherList': {u'Weather': [{u'Date': u'201609231900',
                                                            u'Rainfall': 5.25,
                                                            u'Type': u'observation'},
                                                           {u'Date': u'201609231910',
                                                            u'Rainfall': 0.95,
                                                            u'Type': u'forecast'},
                                                           {u'Date': u'201609231920',
                                                            u'Rainfall': 2.13,
                                                            u'Type': u'forecast'},
                                                           {u'Date': u'201609231930',
                                                            u'Rainfall': 1.25,
                                                            u'Type': u'forecast'},
                                                           {u'Date': u'201609231940',
                                                            u'Rainfall': 0.55,
                                                            u'Type': u'forecast'},
                                                           {u'Date': u'201609231950',
                                                            u'Rainfall': 0.0,
                                                            u'Type': u'forecast'},
                                                           {u'Date': u'201609232000',
                                                            u'Rainfall': 1.75,
                                                            u'Type': u'forecast'}]}}}],
 u'ResultInfo': {u'Copyright': u'(C) Yahoo Japan Corporation.',
                 u'Count': 1,
                 u'Description': u'',
                 u'Latency': 0.004469,
                 u'Start': 1,
                 u'Status': 200,
                 u'Total': 1}}

Die gewünschten Daten sind in json_tree ['Feature'] [0] ['Property'] ['WeatherList'] ['Weather'] vorhanden, sodass Sie die erforderlichen Daten wie folgt abrufen können.

#!/usr/bin/python
# encoding:utf-8

import urllib
import pprint
import json

APP_ID = "******************************"

BASE_URL = "http://weather.olp.yahooapis.jp/v1/place"
COORDINATES = "140.471414,38.026973"
OUTPUT="json"

url = BASE_URL + "?appid=%s&coordinates=%s&output=%s" % (APP_ID,COORDINATES,OUTPUT)
# print (url)

json_tree = json.loads( urllib.urlopen(url).read())
#pprint.pprint(json_tree)

for var in range(0,7):
    date = json_tree['Feature'][0]['Property']['WeatherList']['Weather'][var]['Date']
    rainfall = json_tree['Feature'][0]['Property']['WeatherList']['Weather'][var]['Rainfall']
    type = json_tree['Feature'][0]['Property']['WeatherList']['Weather'][var]['Type']
    print("%s,%s,%s"%(date,rainfall,type))

Das Ausgabeergebnis sieht folgendermaßen aus. Wenn Sie das Feld Antwort betrachten, ist im Feld Typ die Beobachtung der gemessene Wert und die Vorhersage der vorhergesagte Wert. Wird gezeigt. Außerdem ist das Niederschlagsfeld die Niederschlagsintensität (es ist nicht die Niederschlagsmenge, da es sich um den Wert handelt, der durch Umrechnung der beobachteten Niederschlagsintensität in mm / h erhalten wird). Hmmmm.

201609231945,0.85,observation
201609231955,0.0,forecast
201609232005,2.13,forecast
201609232015,1.45,forecast
201609232025,1.45,forecast
201609232035,1.95,forecast
201609232045,0.0,forecast

Ich möchte den Breiten- und Längengrad aus der Postleitzahl ermitteln und das Wetter vorhersagen

Ich konnte die oben genannten Mindestanforderungen erfüllen, aber es ist nicht gut, die Koordinaten einzeln anzugeben, daher wurde auch die Postleitzahlensuch-API von YOLP bereitgestellt Ich möchte (/webapi/map/openlocalplatform/v1/zipcodesearch.html) verwenden, um "eine Postleitzahl als Argument zu nehmen und die Koordinaten automatisch zu ziehen".

Dies ist auch nicht interessant, es sei denn, es steht kurz vor dem Aussteigen. Daher werde ich die Postleitzahl für den Oi Matsuda IC angeben, der aussteigen soll. Wenn die Postleitzahl nicht angegeben ist, werden die Daten in der Nähe von Hama Rikyu angezeigt.

#!/usr/bin/python
# encoding:utf-8

import urllib
import pprint
import json
import sys

APP_ID = "***********************************"

BASE_URL = "http://weather.olp.yahooapis.jp/v1/place"
COORDINATES = "139.763707,35.659729"
OUTPUT="json"

if len(sys.argv) == 2:
    zip_code = sys.argv[1]
    ZIP_BASE_URL = "http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/zipCodeSearch"
    zip_url = ZIP_BASE_URL + "?appid=%s&query=%s&output=%s" % (APP_ID,zip_code,OUTPUT)
    zip_json_tree = json.loads(urllib.urlopen(zip_url).read())
    #pprint.pprint(zip_json_tree['Feature'][0]['Geometry']['Coordinates'])
    COORDINATES = zip_json_tree['Feature'][0]['Geometry']['Coordinates']


url = BASE_URL + "?appid=%s&coordinates=%s&output=%s" % (APP_ID,COORDINATES,OUTPUT)
# print (url)

json_tree = json.loads( urllib.urlopen(url).read())
#pprint.pprint(json_tree)

for var in range(0,7):
    date = json_tree['Feature'][0]['Property']['WeatherList']['Weather'][var]['Date']
    rainfall = json_tree['Feature'][0]['Property']['WeatherList']['Weather'][var]['Rainfall']
    type = json_tree['Feature'][0]['Property']['WeatherList']['Weather'][var]['Type']
    print("%s,%s,%s"%(date,rainfall,type))

# python sample.py "258-0019"
201609232015,0.0,observation
201609232025,0.0,forecast
201609232035,0.85,forecast
201609232045,16.5,forecast
201609232055,4.38,forecast
201609232105,0.0,forecast
201609232115,0.0,forecast

# python sample.py
201609232015,0.0,observation
201609232025,0.0,forecast
201609232035,0.0,forecast
201609232045,0.0,forecast
201609232055,0.0,forecast
201609232105,0.0,forecast
201609232115,0.0,forecast

Umm. Ich konnte tun, was ich tun wollte.

[Sprechen]

Es gibt ein Programm namens AquesTalkPi, das Razzpai zum Sprechen bringt, was ich vorher noch nicht gelernt habe. Lassen Sie uns die vorherige Ausgabe entsprechend verarbeiten und sprechen lassen. Ich würde wirklich gerne ein bisschen schlauer sein, aber jetzt werde ich etwas dagegen tun.

#!/usr/bin/python
# encoding:utf-8

import urllib
import pprint
import json
import sys
import os

APP_ID = "********************************************"

BASE_URL = "http://weather.olp.yahooapis.jp/v1/place"
COORDINATES = "139.763707,35.659729"
OUTPUT="json"
ZIP_CODE = "100-0000"

if (len(sys.argv) == 2) or (len(ZIP_CODE) > 0):
    if len(sys.argv) < 2:
        zip_code = ZIP_CODE
    else:
        zip_code = sys.argv[1]
    ZIP_BASE_URL = "http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/zipCodeSearch"
    zip_url = ZIP_BASE_URL + "?appid=%s&query=%s&output=%s" % (APP_ID,zip_code,OUTPUT)
    zip_json_tree = json.loads(urllib.urlopen(zip_url).read())
    #pprint.pprint(zip_json_tree['Feature'][0]['Geometry']['Coordinates'])
    COORDINATES = zip_json_tree['Feature'][0]['Geometry']['Coordinates']
    name = zip_json_tree['Feature'][0]['Property']['Address']
    print name


url = BASE_URL + "?appid=%s&coordinates=%s&output=%s" % (APP_ID,COORDINATES,OUTPUT)
# print (url)

json_tree = json.loads( urllib.urlopen(url).read())
#pprint.pprint(json_tree)

for var in range(0,7):
    date     = json_tree['Feature'][0]['Property']['WeatherList']['Weather'][var]['Date']
    rainfall = json_tree['Feature'][0]['Property']['WeatherList']['Weather'][var]['Rainfall']
    type     = json_tree['Feature'][0]['Property']['WeatherList']['Weather'][var]['Type']
    print("%s,%s,%s"%(date,rainfall,type))
    rain_level = ""
    talk = ""
    if (rainfall == 0.0):
        rain_level = "Es regnet"
    elif (rainfall < 5.0) :
        rain_level = "Es regnet ein wenig"
    elif (rainfall < 10.0):
        rain_level = "Es regnet viel"
    elif (rainfall < 20.0):
        rain_level = "Es regnet ein wenig"
    elif (rainfall < 30.0):
        rain_level = "Es regnet"
    elif (rainfall < 50.0):
        rain_level = "Starkregen"
    elif (rainfall < 80.0):
        rain_level = "Sehr schwerer Regen"
    elif (rainfall >= 80.0):
        rain_level = "Starkregen"

    if type == "observation" :
        time = "jetzt,"
        if rainfall == 0.0:
            suffix = "Nicht"
            talk = time + rain_level + suffix
        else:
            suffix = "ich habe"
            talk = time + rain_level + suffix
    else:
        time = str(var * 10) + "Nach einer Minute"
        if rainfall == 0.0:
            # suffix = "Ich nicht."
            talk = ""
        else:
            suffix = "Es scheint so als."
            talk = time + rain_level + suffix

    print talk
    if len(talk) > 0:
        os.system('/home/pi/AquesTalkPi "' + talk + '" | aplay&')

Oh, sprich mit "dieser Stimme"! Das ist interessant.

Das war `s für heute.

Recommended Posts

Erhalten Sie Wetterinformationen über Yahoo! Open Local Platform (YOLP) und lassen Sie Razpai mit AquesTalkPi sprechen
Holen Sie sich das Wetter mit API und lassen Sie Raspberry Pi sprechen!
Holen Sie sich CPU-Informationen von Raspberry Pi mit Python
Holen Sie sich Temperatur und Luftfeuchtigkeit mit DHT11 und Raspberry Pi
YOLP Holen Sie sich eine XML-Datei mit Karteninformationen mit der Yahoo! Static Map API
Erstellen Sie Ihre eigene IoT-Plattform mit Himbeerpi und ESP32 (Teil 1)
Verwenden einer Webkamera mit Raspberry Pi
Holen Sie sich Wetterinformationen mit Python & Scraping
[Yahoo! Weather Replacement Version] So erhalten Sie Wetterinformationen mit LINE Notify + Python
Erfassen Sie den Sensorwert von Grove Pi + mit Raspberry Pi und speichern Sie ihn in Kintone
Haustierüberwachung mit Rekognition und Raspberry pi
Stellen Sie eine Verbindung zur Raspberry PI-Konsole her und zeigen Sie lokale IP- und SD-Informationen an
Bitten Sie den Bot, Ihnen das Wetter (Niederschlagsinformationen) mithilfe der Wetterinformations-API (YOLP) mitzuteilen, die von Yahoo ~ Slack Bot Development mit Python ④ ~ bereitgestellt wird