Pour une raison quelconque, si vous recherchez quelque chose qui vous fournira facilement des informations météorologiques, de préférence demain ou après-demain, mais dans environ ◯◯ minutes à partir de maintenant, Yahoo! Open Local J'ai trouvé Platform (YOLP). Je n'ai pas trouvé beaucoup de cas d'utilisation, mais c'était très pratique et intéressant, je vais donc le résumer brièvement. Comme d'habitude, si je peux faire quelque chose qui devrait être ajouté, je l'écrirai dans blog.
Selon le site officiel
Yahoo! Open Local Platform (YOLP) est une API / SDK pour les cartes et les informations régionales fournies par Yahoo! JAPAN pour les développeurs.
(Extrait de http://developer.yahoo.co.jp/webapi/map/) Et cela. Il y a API d'informations météorologiques, ce qui est très pratique. Le cas de l'utilisation commerciale est mentionné à l'adresse http://www.yahoo-help.jp/app/answers/detail/p/537/a_id/43405, et résumé en gros: «L'utilisation à des fins non commerciales est Elle est acceptée. Elle n'interdit pas toute utilisation par des sites commerciaux et des entreprises, et si vous souhaitez l'utiliser pour des entreprises, veuillez consulter la fenêtre de demande de chaque API. "
Obtenez l'ID de l'application conformément au "Guide de l'utilisateur". En ce qui concerne le contenu enregistré, il n'y a pas de quoi s'inquiéter, je vais donc omettre l'explication.
En lisant Explication de l'API des informations météorologiques, essayez de l'obtenir avec Python.
L'URL cible est http://weather.olp.yahooapis.jp/v1/place, qu'elle soit acquise en XML ou JSON. C'est un flux très standard que JSON est retourné lorsque vous obtenez les informations nécessaires sous forme de requête et que vous les attachez.
Pour le moment, en termes de contrôle de fonctionnement, les trois suivants sont suffisants.
--appid: ID de l'application. Obtenu par la procédure ci-dessus. -coordonnées: latitude et longitude. Séparé par des virgules dans l'ordre de la longitude et de la latitude. Lorsque vous recherchez plusieurs points, séparez-les avec un espace demi-largeur (jusqu'à 10 points) --output: format de sortie. Soit xml / json.
Les données ponctuelles qui disent "Il pleut maintenant ou est sur le point de pleuvoir" sont plus intéressantes, il s'est donc avéré qu'il pleuvait au moment de la confirmation, près de la ville de Nanagajuku, préfecture de Miyagi. Essaie.
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)
Le résultat de sortie ressemble à ceci.
{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}}
Les données que vous voulez existent dans json_tree ['Feature'] [0] ['Property'] ['WeatherList'] ['Weather'], vous pouvez donc obtenir les données nécessaires comme celle-ci.
#!/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))
Le résultat de sortie ressemble à ceci. En regardant le Champ de réponse, dans le champ Type, l'observation est la valeur mesurée et la prévision est la valeur prédite. Est montré. De plus, le champ Pluie est l'intensité des précipitations (ce n'est pas la quantité de précipitations car c'est la valeur obtenue en convertissant l'intensité observée des précipitations en mm / h). 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
J'ai pu répondre aux exigences minimales ci-dessus, mais il n'est pas bon de spécifier les coordonnées une par une, donc l 'API de recherche de code postal également fournie par YOLP Je veux utiliser (/webapi/map/openlocalplatform/v1/zipcodesearch.html) pour "prendre un code postal comme argument et il tirera automatiquement les coordonnées".
Ce n'est pas non plus intéressant à moins qu'il ne soit sur le point de descendre, je vais donc préciser le code postal de l'Oi Matsuda IC qui est sur le point de descendre. De plus, si le code postal n'est pas spécifié, les données près de Hama Rikyu seront affichées.
#!/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. J'ai pu faire ce que je voulais faire.
Il existe un programme appelé AquesTalkPi qui fait parler Razzpai, ce que je n'avais jamais appris auparavant. Traitons la sortie précédente de manière appropriée et laissons-la parler. J'aimerais vraiment être un peu plus intelligent, mais pour l'instant je vais faire quelque chose à ce sujet.
#!/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 = "Il pleut"
elif (rainfall < 5.0) :
rain_level = "Il pleut un peu"
elif (rainfall < 10.0):
rain_level = "Il pleut beaucoup"
elif (rainfall < 20.0):
rain_level = "Il pleut un peu"
elif (rainfall < 30.0):
rain_level = "Il pleut"
elif (rainfall < 50.0):
rain_level = "Pluie abondante"
elif (rainfall < 80.0):
rain_level = "Très forte pluie"
elif (rainfall >= 80.0):
rain_level = "Pluie abondante"
if type == "observation" :
time = "maintenant,"
if rainfall == 0.0:
suffix = "ne pas"
talk = time + rain_level + suffix
else:
suffix = "j'ai"
talk = time + rain_level + suffix
else:
time = str(var * 10) + "Après une minute"
if rainfall == 0.0:
# suffix = "Je ne."
talk = ""
else:
suffix = "Il semble que."
talk = time + rain_level + suffix
print talk
if len(talk) > 0:
os.system('/home/pi/AquesTalkPi "' + talk + '" | aplay&')
Oh, parlez avec "cette voix"! C'est intéressant.
C'est tout pour aujourd'hui.
Recommended Posts