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