Bonjour, je m'appelle Yoshiya Kato de Quick Italate Co., Ltd. J'écris actuellement un article de blog intitulé "Pourquoi je recommande python pour commencer".
** Obtenez les prévisions météorologiques du bureau au format XML, mettez-les en forme et affichez-les. ** **
Si vous recherchez "API de prévisions météo gratuite" J'ai constaté que les services suivants existaient.
OpenWeatherMap est configuré pour que des informations détaillées puissent être obtenues de différentes manières. Je vais l'extraire et en faire une table.
Paramètres | sens | Exemple de valeur | Obligatoire |
---|---|---|---|
URL | Pour envoyer la demande | http://api.openweathermap.org/data/2.5/forcast? | Obligatoire |
appid | Identifiant attribué | Obligatoire*1 | Obligatoire |
name | Nom spécifique à la ville | tokyo-to | option*2 |
id | ID spécifique à la ville(cityid) | 1850144 | option*2 |
lat | Latitude en notation décimale | 35.78 | option*2 |
lon | Latitude en notation décimale | 139.83 | option*2 |
zip | Code postal | 1210053 | option*2 |
country | Abréviation du nom de pays (lorsque zip est spécifié) | jp | option*2 |
unites | Unité de notation*1 | métrique ou impérial ou aucun | option*2 |
mode | Spécifiez le format d'acquisition | xml or json or html | option*2 |
Demander une image URL (lors de l'utilisation de Cityid)) |
---|
http://api.openweathermap.org/data/2.5/forecast?id=1850144&APPID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&units=metric&mode=xml |
Image de l'URL de la requête (lors de l'utilisation de la latitude / longitude)) |
---|
http://api.openweathermap.org/data/2.5/forecast?lon=139.83&lat=35.78&APPID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&units=metric&mode=xml |
Maintenant que les informations sont prêtes, j'aimerais utiliser python pour obtenir les informations et les afficher sous forme de XML formaté.
openweathermap.py
#Importer la bibliothèque
import urllib.request
import urllib.parse
import xml.etree.ElementTree as et
import xml.dom.minidom as md
url='http://api.openweathermap.org/data/2.5/forecast?' #Paramètre d'URL de base
query = {
'id' : '1850144' ,
'APPID' : 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', #L'appid que vous avez
'units' : 'metric',
'mode' : 'xml'}#Groupe de valeurs à définir dans la requête
url = url + urllib.parse.urlencode(query) #Demander la génération d'URL
response = urllib.request.urlopen(url) #demande http
root = et.fromstring(response.read()) #Stocker le contenu récupéré dans l'élément XML
Vérifiez le contenu de l'url utilisée pour la demande.
Vérifiez l'url générée
print(url) #Afficher le contenu de l'url
http://api.openweathermap.org/data/2.5/forecast?id=1850144&APPID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&units=metric&mode=xml
Code pour afficher xml
document = md.parseString(et.tostring(root, 'utf-8')) #le module minidom analyse l'élément XML
print(document.toprettyxml(indent=" ")) #Convertit les informations XML analysées en une chaîne avec indentation et l'affiche
Il s'agit du XML qui est réellement formaté et généré à partir de la valeur renvoyée par la requête.
result.xml
<?xml version="1.0" ?>
<weatherdata>
<location>
<name>Tōkyō-to</name>
<type/>
<country>JP</country>
<timezone/>
<location altitude="0" geobase="geonames" geobaseid="1850144" latitude="35.6895" longitude="139.6917"/>
</location>
<credit/>
<meta>
<lastupdate/>
<calctime>0.0129</calctime>
<nextupdate/>
</meta>
<sun rise="2017-06-23T19:26:28" set="2017-06-24T10:00:54"/>
<forecast>
<time from="2017-06-24T06:00:00" to="2017-06-24T09:00:00">
<symbol name="broken clouds" number="803" var="04d"/>
<precipitation/>
<windDirection code="SSE" deg="148.001" name="South-southeast"/>
<windSpeed mps="2.41" name="Light breeze"/>
<temperature max="24.68" min="23.88" unit="celsius" value="23.88"/>
<pressure unit="hPa" value="1015.57"/>
<humidity unit="%" value="66"/>
<clouds all="56" unit="%" value="broken clouds"/>
</time>
・ ・ (Omis au milieu) ・ ・
</forecast>
</weatherdata>
La prochaine fois, j'aimerais extraire et traiter le contenu de XML.
Merci beaucoup.