Outils pour utilisateurs

Outils du site


issue146:python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Dernière révision Les deux révisions suivantes
issue146:python [2019/07/12 19:24]
d52fr
issue146:python [2019/07/14 15:26]
auntiee
Ligne 3: Ligne 3:
 Partially, the reason that I haven'​t is that it didn't really fit into any of the subjects that I was trying to explain. Now, however, I will open the topic so we can explore it.** Partially, the reason that I haven'​t is that it didn't really fit into any of the subjects that I was trying to explain. Now, however, I will open the topic so we can explore it.**
  
-Beaucoup de lecteurs réguliers de cette colonne ​ont pu s'​étonner que je ne me sois jamais préoccupé des fichiers JSON dans aucun de mes articles jusqu'​à maintenant.+Beaucoup de lecteurs réguliers de cette rubrique ​ont pu s'​étonner que je ne me sois jamais préoccupé des fichiers JSON dans aucun de mes articles jusqu'​à maintenant. C'est une bonne question.
  
 En partie, la raison pour laquelle je ne l'ai pas fait est que ça ne collait pas vraiment avec les sujets que j'​essayais d'​expliquer. Cependant, j'​ouvre maintenant le sujet ; ainsi, nous pouvons l'​explorer. En partie, la raison pour laquelle je ne l'ai pas fait est que ça ne collait pas vraiment avec les sujets que j'​essayais d'​expliquer. Cependant, j'​ouvre maintenant le sujet ; ainsi, nous pouvons l'​explorer.
Ligne 21: Ligne 21:
 En haut à droite, voici un court échantillon de données JSON (J'ai emprunté cet exemple sur https://​developer.rhino3d.com/​guides/​rhinopython/​python-xml-json/​) En haut à droite, voici un court échantillon de données JSON (J'ai emprunté cet exemple sur https://​developer.rhino3d.com/​guides/​rhinopython/​python-xml-json/​)
  
-Ceci ne vous parait-il pas familier ? Il a d'​évidence une structure clé:​valeur. Quelque chose comme un dictionnaire dans Python ? Hmmmm.+Cela ne vous parait-il pas familier ? Il a d'​évidence une structure clé:​valeur. Quelque chose comme un dictionnaire dans Python ? Hmmmm.
  
 **I was going to give you an example of getting and working with some JSON data by using Weather Underground,​ but they have removed the free access. So, I've decided to try the Dark SKY API. In order to use their service, you need to sign up for a free account. This account will give you up to 1000 free API requests per day. This should be enough for you to do some testing on your own. When I was trying out the code for this month, I used way less than 40 requests. You can sign up at https://​darksky.net/​dev/​docs and click on the "SIGN UP" button in the upper-right corner of the page. They will send you an email requesting you to confirm your email address with a link. Once you do that, they will provide you with your own secret key. **I was going to give you an example of getting and working with some JSON data by using Weather Underground,​ but they have removed the free access. So, I've decided to try the Dark SKY API. In order to use their service, you need to sign up for a free account. This account will give you up to 1000 free API requests per day. This should be enough for you to do some testing on your own. When I was trying out the code for this month, I used way less than 40 requests. You can sign up at https://​darksky.net/​dev/​docs and click on the "SIGN UP" button in the upper-right corner of the page. They will send you an email requesting you to confirm your email address with a link. Once you do that, they will provide you with your own secret key.
Ligne 27: Ligne 27:
 Now, one of the requirements of the service is that you keep your secret key, well, secret, so I won't disclose my key. I'll use "​{secretkey}"​ wherever it's required. What I'll do to make it easy is to create a variable and assign the value to it. That way, you can use your secret key by simply plugging it into the code I will provide.** Now, one of the requirements of the service is that you keep your secret key, well, secret, so I won't disclose my key. I'll use "​{secretkey}"​ wherever it's required. What I'll do to make it easy is to create a variable and assign the value to it. That way, you can use your secret key by simply plugging it into the code I will provide.**
  
-J'​allais vous donner un exemple de l'​acquisition et du travail avec des données JSON en utilisant « Weather Underground », mais il ont supprimé l'​accès libre. Aussi, j'ai décidé d'​essayer l'API Dark SKY. Pour utiliser leurs services, vous devez vous inscrire à un compte gratuit. Ce compte vous permet d'​exécuter jusqu'​à 1000 demandes gratuites d'API par jour. Ça devrait vous suffire pour faire quelques tests par vous-même. Quand j'ai testé le code de ce mois, j'ai utilisé largement moins de 40 demandes. Vous pouvez vous inscrire sur https://​darksky.net/​dev/​docs ​et cliquer ​sur le bouton « SIGN UP » (inscription) dans le coin en haut à droite de la page. Ils vous enverront un mail pour confirmer votre adresse mail avec un lien. Une fois fait, ils vous fourniront votre clé secrète personnelle.+J'​allais vous donner un exemple de l'​acquisition et du travail avec des données JSON en utilisant « Weather Underground », mais ils ont supprimé l'​accès libre. Aussi, j'ai décidé d'​essayer l'API Dark SKY. Pour utiliser leurs services, vous devez vous inscrire à un compte gratuit. Ce compte vous permet d'​exécuter jusqu'​à 1000 demandes gratuites d'API par jour. Ça devrait vous suffire pour faire quelques tests par vous-même. Quand j'ai testé le code de ce mois, j'ai utilisé largement moins de 40 demandes. Vous pouvez vous inscrire sur https://​darksky.net/​dev/​docs ​en cliquant ​sur le bouton « SIGN UP » (inscription) dans le coin en haut à droite de la page. Ils vous enverront un mail pour confirmer votre adresse mail avec un lien. Une fois fait, ils vous fourniront votre clé secrète personnelle.
  
-Maintenant, ​un des désidérata du service est que vous gardiez votre clé secrète, disons, secrète ; aussi, je ne vous dévoile pas ma clé. J'​utiliserai « (secretkey» (clésecrète) ​si c'est nécessaire. Pour simplifier, je créerai un variable et je lui assignerai la valeur. De cette façon, vous pouvez utiliser votre clé secrète en la  glissant dans le code que je fournirai.+L'un des désidérata du service est que vous gardiez votre clé secrète, disons, secrète ; aussi, je ne vous dévoile pas ma clé. J'​utiliserai « {secretkey» (clésecrète) ​quand c'est nécessaire. Pour simplifier, je créerai un variable et je lui assignerai la valeur. De cette façon, vous pouvez utiliser votre clé secrète en la glissant dans le code que je fournirai.
  
 **Let'​s try it out. In addition to the API Key, you'll need to know the Latitude and Longitude of the area you are interested in. If you don't know your latitude and longitude off the top of your head, you can got to https://​www.latlong.net/​ and enter your city and country. I'll use that lat and lon for Austin, Texas... **Let'​s try it out. In addition to the API Key, you'll need to know the Latitude and Longitude of the area you are interested in. If you don't know your latitude and longitude off the top of your head, you can got to https://​www.latlong.net/​ and enter your city and country. I'll use that lat and lon for Austin, Texas...
Ligne 43: Ligne 43:
 We'll start out by testing it in a browser. Put the above address into the browser address box. What you'll get back is quite a bit of data. If you are using Google Chrome, be sure to either add or enable JSONview extension. Firefox shows the JSON pretty print by default.** We'll start out by testing it in a browser. Put the above address into the browser address box. What you'll get back is quite a bit of data. If you are using Google Chrome, be sure to either add or enable JSONview extension. Firefox shows the JSON pretty print by default.**
  
-Essayons-la. En plus de votre Clé d'API, vous devrez connaître les Longitude et Latitude de l'​endroit qui vous intéresse. Si vous ne connaissez pas les longitude et latitude ​au-dessus de votre tête, vous pouvez aller sur https://​www.latlong.net/​ et saisissez votre ville et votre pays. J'​utiliserai les coordonnées d'​Austin,​ au Texas.+Essayons-la. En plus de votre Clé d'API, vous devrez connaître les Longitude et Latitude de l'​endroit qui vous intéresse. Si vous ne connaissez pas les longitude et latitude ​à brûle pour-point, vous pouvez aller sur https://​www.latlong.net/​ et saisissez votre ville et votre pays. J'​utiliserai les coordonnées d'​Austin,​ au Texas.
  
 latlon = 30.2672° N, -97.7431° W latlon = 30.2672° N, -97.7431° W
Ligne 53: Ligne 53:
 (Les appels complémentaires peuvent être quelque peu complexes ; aussi, nous commençons avec un rapport complet). (Les appels complémentaires peuvent être quelque peu complexes ; aussi, nous commençons avec un rapport complet).
  
-Nous commencerons par le tester dans notre navigateur. Mettez l'​adresse ci-dessus dans le champ d'​adresse du navigateur. Ce qui vous sera renvoyé ​n'a pas d'​importance. Si vous utilisez Google Chrome, assurez-vous d'​ajouter ou d'​autoriser l'​extension JSONview. Par défaut, Firefox affiche bien le JSON.+Nous commencerons par le tester dans notre navigateur. Mettez l'​adresse ci-dessus dans le champ d'​adresse du navigateur. Ce qui vous sera renvoyé ​est une quantité de données appréciable. Si vous utilisez Google Chrome, assurez-vous d'​ajouter ou d'​autoriser l'​extension JSONview. Par défaut, Firefox affiche bien le JSON.
  
 **Here (next page, top right) is an abbreviated version of the output data, I purposely have edited it so that it contains only the header and the '​currently'​ section. **Here (next page, top right) is an abbreviated version of the output data, I purposely have edited it so that it contains only the header and the '​currently'​ section.
Ligne 61: Ligne 61:
 Before going any further, please save a copy of the data. For Chrome, right-click in the window and select "Save as..". In Firefox, you can simply click the save button. Then save the file as "​sampledata.json"​ somewhere easy to get to. This way, we can use it instead of a “live” feed while we are developing our program without costing “live” calls. Remember, 1000 calls per day sounds like a bunch, but during learning and development,​ it can go quickly.** Before going any further, please save a copy of the data. For Chrome, right-click in the window and select "Save as..". In Firefox, you can simply click the save button. Then save the file as "​sampledata.json"​ somewhere easy to get to. This way, we can use it instead of a “live” feed while we are developing our program without costing “live” calls. Remember, 1000 calls per day sounds like a bunch, but during learning and development,​ it can go quickly.**
  
-Voici (page suivante, en haut à droite) ​la version abrégée des données de sortie ; je l'ai délibérément modifiée pour qu'​elle ne contienne que l'​entête et la section « currently ».+Voici (page suivante, en haut à droite) ​une version abrégée des données de sortie ; je l'ai délibérément modifiée pour qu'​elle ne contienne que l'​entête et la section « currently ».
  
-Même si je l'ai limité à l'​entête et la section « currently », ça fait beaucoup de données. Certaines d'​entre elles peuvent avoir une importance pour vous et d'​autres moins.+Bien que je l'aie limité à l'​entête et la section « currently », ça fait beaucoup de données. Certaines d'​entre elles peuvent avoir une importance pour vous et d'​autres moins.
  
-Avant d'​aller plus loin,  merci de sauvegarder une copie des données. Pour Chrome, faites un clic droit dans la fenêtre et sélectionnez « Enregistrer sous ». Dans Firefox, vous n'avez qu'à appuyer sur le bouton Enregistrer. Puis, sauvegardez le fichier comme « sampledata.json » dans un endroit facile d'​accès. De cette façon, nous pouvons l'​utiliser à la place d'​une ​fourniture ​directe pendant que nous développons notre programme sans le coût des appels directs. Souvenez-vous que 1000 appels par jour semble un gros paquet, mais, pendant l'​apprentissage et le développement,​ ça peut aller très vite.+Avant d'​aller plus loin,  merci de sauvegarder une copie des données. Pour Chrome, faites un clic droit dans la fenêtre et sélectionnez « Enregistrer sous ». Dans Firefox, vous n'avez qu'à appuyer sur le bouton Enregistrer. Puis, sauvegardez le fichier comme « sampledata.json » dans un endroit facile d'​accès. De cette façon, nous pouvons l'​utiliser à la place d'​une ​connexion ​directe pendant que nous développons notre programme sans que ça nous coûte ​des appels directs. Souvenez-vous que 1000 appels par jour semble un gros paquet, mais, pendant l'​apprentissage et le développement,​ ça peut aller très vite.
  
 **Now we can look at the information presented. We have some header information,​ then a series of sections called "​currently",​ "​minutely",​ "​hourly",​ "​daily",​ “flags” and there might be one called "​alerts"​. When you make a "​full"​ call as we did above, you get everything. You can use the "​exclude"​ option to filter out the items you don't want or need to see (more on that in a bit). However, right now, let's just concentrate on the "​currently"​ section. **Now we can look at the information presented. We have some header information,​ then a series of sections called "​currently",​ "​minutely",​ "​hourly",​ "​daily",​ “flags” and there might be one called "​alerts"​. When you make a "​full"​ call as we did above, you get everything. You can use the "​exclude"​ option to filter out the items you don't want or need to see (more on that in a bit). However, right now, let's just concentrate on the "​currently"​ section.
Ligne 73: Ligne 73:
 Now let's start talking Python code. Create a new python file called ‘DarkskyJSON.py’ and put it in the same folder that you put the sample data download earlier.** Now let's start talking Python code. Create a new python file called ‘DarkskyJSON.py’ and put it in the same folder that you put the sample data download earlier.**
  
-Maintenant, nous pouvons regarder l'​information présentée. Nous avons quelques informations d'​entête,​ puis une série de sections appelées « currently », « minutely », « hourly », « daily », « flags » et il peut y en avoir une appelée « alerts ». Quand vous faites ​un appel « complet » comme celui du dessus, ​nous obtenons ​tout. Vous pouvez utiliser l'​option « exclude » pour éliminer les sujets que vous ne voulez ou devez pas voir (plus là dessus sous peu). Cependant, pour le moment, concentrons-nous sur la section « currently ».+Maintenant, nous pouvons regarder l'​information présentée. Nous avons quelques informations d'​entête,​ puis une série de sections appelées « currently », « minutely », « hourly », « daily », « flags » et il peut y en avoir une appelée « alerts ». Quand on fait un appel « complet » comme celui du dessus, ​on obtient ​tout. Vous pouvez utiliser l'​option « exclude » pour éliminer les sujets que vous ne voulez ou n'​avez ​pas besoin de voir (plus là-dessus sous peu). Cependant, pour le moment, concentrons-nous sur la section « currently ».
  
 Comme vous pouvez le voir, il y a un champ « time » qui est l'​horodatage UNIX, des champs pour une synthèse (summary), des informations sur les orages (storm - s'il y a un orage dans le voisinage), la température,​ le point de rosée (dewpoint), l'​humidité,​ la pression, le vent et encore plus. Pour la plupart, ces données sont les mêmes que celles des sections « hourly » et « daily ». Certains champs pourraient ne pas être disponibles quand vous demandez des données. C'est le cas surtout pour des informations comme les orages, présentes seulement en cas d'​orage dans le voisinage. Comme vous pouvez le voir, il y a un champ « time » qui est l'​horodatage UNIX, des champs pour une synthèse (summary), des informations sur les orages (storm - s'il y a un orage dans le voisinage), la température,​ le point de rosée (dewpoint), l'​humidité,​ la pression, le vent et encore plus. Pour la plupart, ces données sont les mêmes que celles des sections « hourly » et « daily ». Certains champs pourraient ne pas être disponibles quand vous demandez des données. C'est le cas surtout pour des informations comme les orages, présentes seulement en cas d'​orage dans le voisinage.
Ligne 141: Ligne 141:
 Thu 05/23/2019 19:30:20 Thu 05/23/2019 19:30:20
  
-Et, pour moi, c'est compréhensible. Maintenant, pour nous aider à décomposer la première ligne du code ci-dessus, « response » est le paquet de données complet que nous avons obtenu par la lecture de la bibliothèque JSON, « currently » est le section que nous voulons traiter et « time » est le clé que nous voulons. Rien de plus simple.+Et, pour moi, c'est compréhensible. Maintenant, pour nous aider à décomposer la première ligne du code ci-dessus, « response » est le paquet de données complet que nous avons obtenu par la lecture de la bibliothèque JSON, « currently » est la section que nous voulons traiter et « time » est le clé que nous voulons. Rien de plus simple.
  
 **Now, we can play some simplifying games with the data so we don’t have to type so much. For example… **Now, we can play some simplifying games with the data so we don’t have to type so much. For example…
Ligne 163: Ligne 163:
 'Light Rain' 'Light Rain'
  
-À nouveau, pour faire l'​analogie avec le dictionnaire clé:​valeur,​ « currents » est la section des données, « summary » est la clé et 'Light Rain' est la valeur. Nous assignons ​aussi (dans la première des deux lignes) la section complète « currently » du dictionnaire de données ​renvoyé ​à un dictionnaire nommé currents. Aussi, maintenant, quand nous voulons n'​importe quelle valeur dans le dictionnaire currents, nous avons juste à mettre la clé de cette valeur entre crochets. Ci-dessus, vous voyez quelques autres exemples placés dans des déclarations print.+À nouveau, pour faire l'​analogie avec le dictionnaire clé:​valeur,​ « currents » est la section des données, « summary » est la clé et 'Light Rain' est la valeur. Nous avons assigné ​aussi (dans la première des deux lignes) la section complète « currently » du dictionnaire de données à un dictionnaire nommé currents. Aussi, maintenant, quand nous voulons n'​importe quelle valeur dans le dictionnaire currents, nous avons juste à mettre la clé de cette valeur entre crochets. Ci-dessus, vous voyez quelques autres exemples placés dans des déclarations print.
  
 **And our output would look, using the above response data, something like this: **And our output would look, using the above response data, something like this:
Ligne 189: Ligne 189:
    ​Humidity:​ 67.0%    ​Humidity:​ 67.0%
  
-Ça n'est pas aussi mauvais ​qu'il y paraissait au début de cet article, n'​est-ce-pas ? Maintenant, comment manipuler un champ de sorte que :+Ça n'est pas aussi difficile ​qu'il y paraissait au début de cet article, n'​est-ce-pas ? Maintenant, comment manipuler un champ de sorte que :
 ••s'​il est disponible, il est présenté, ••s'​il est disponible, il est présenté,
 ••s'​il ne l'est pas, qu'il n'y ait pas d'​erreur ? ••s'​il ne l'est pas, qu'il n'y ait pas d'​erreur ?
Ligne 212: Ligne 212:
 response = session.get(url,​ timeout=timeout).json()** response = session.get(url,​ timeout=timeout).json()**
  
-Aussi, si dans la structure de données de réponse[‘currently’] la clé « precipType » est présente, nous l'​imprimerons ; autrement, nous sortirons ​sans problème. C'est la partie « clé dans le dictionnaire » de la clause if. À nouveau, pour beaucoup d'​entre vous, nous avons déjà fait de telles choses ​avant ; c'est donc un sujet usé. Pour les autres ce sont des informations nouvelles.+Aussi, si dans la structure de données de réponse[‘currently’] la clé « precipType » est présente, nous l'​imprimerons ; autrement, nous continuerons ​sans problème. C'est la partie « clé dans le dictionnaire » de la clause if. À nouveau, pour beaucoup d'​entre vous, nous avons déjà fait de telles choses ; c'est donc un vieux sujet. Pour les autres ce sont des informations nouvelles.
  
 Maintenant, regardons, la manière d'​obtenir les données en direct. Nous commençons par définir un certain nombre de variables de sorte que nous pouvons les avoir simplement prêtes à l'​emploi dans une chaîne. Voici le code (en haut à droite). ​ Maintenant, regardons, la manière d'​obtenir les données en direct. Nous commençons par définir un certain nombre de variables de sorte que nous pouvons les avoir simplement prêtes à l'​emploi dans une chaîne. Voici le code (en haut à droite). ​
Ligne 230: Ligne 230:
 For those of you who don’t live in the US, and/or don’t use English as your primary language, there are various options for you that keep you from having to write Fahrenheit to Celsius conversion functions, and will present the display text in a language that you want. For example, if you want to see the output in Norwegian, you can pass “nb” within the URL as language and “si” as the units. Below is a modified URL string creation statement that you can use to set things up correctly. Set ‘unitstouse’ as “si” and ‘langtouse’ to ‘nb’. If you want Spanish, use “es”. If you want German, use “de”, and so on. It’s all in the API docs.** For those of you who don’t live in the US, and/or don’t use English as your primary language, there are various options for you that keep you from having to write Fahrenheit to Celsius conversion functions, and will present the display text in a language that you want. For example, if you want to see the output in Norwegian, you can pass “nb” within the URL as language and “si” as the units. Below is a modified URL string creation statement that you can use to set things up correctly. Set ‘unitstouse’ as “si” and ‘langtouse’ to ‘nb’. If you want Spanish, use “es”. If you want German, use “de”, and so on. It’s all in the API docs.**
  
-Maintenant nous avons la structure de données en JSON dans notre dictionnaire,​ exactement comme nous les lisions précédemment à partir du ficher. Aussi, nous pouvons commenter nos quatre lignes qui lisent le fichier local et ajouter les lignes ci-dessus. De cette façon, si vous voulez continuer à tester, vous pouvez encore utiliser ​les fichier local en commentant le code de demande directe et en décommentant le code de lecture du fichier local.+Maintenant nous avons la structure de données en JSON dans notre dictionnaire,​ exactement comme nous les lisions précédemment à partir du ficher. Aussi, nous pouvons commenter nos quatre lignes qui lisent le fichier local et ajouter les lignes ci-dessus. De cette façon, si vous voulez continuer à tester, vous pouvez encore utiliser ​le fichier local en commentant le code de demande directe et en décommentant le code de lecture du fichier local.
  
 J'ai pris le programme de démonstration complètement fonctionnel que j'​avais créé (sans ma clé secrète, bien sûr, mais vous pouvez mettre la votre) et je l'ai porté sur pastebin. L'​adresse est https://​pastebin.com/​yJ7dJGis . J'ai pris le programme de démonstration complètement fonctionnel que j'​avais créé (sans ma clé secrète, bien sûr, mais vous pouvez mettre la votre) et je l'ai porté sur pastebin. L'​adresse est https://​pastebin.com/​yJ7dJGis .
Ligne 242: Ligne 242:
 Start up the Time Machine!** Start up the Time Machine!**
  
-Où aller à partir de là ? Eh bien, si vous retournez à la page de documentation de l'API DarSky vers laquelle je vous ait dirigé précédemment,​ vous trouverez une liste complète de toutes les clés disponibles. Elles comprennent les prévisions quotidiennes pour aujourd'​hui et les sept jours suivants, des prévisions à l'​heure,​ la possibilité de changer la langue de sortie et les unités de mesure, des prévisions minute par minute pour la prochaine heure, des alertes ​en cas d'​informations sur du mauvais temps, et même un « time machine mode » (mode « machine à remonter le temps ») qui vous permet d'​inclure une date dans le passé ou le futur pour disposer des données observées (passé) ou prévues (futur). Je n'ai pas encore joué avec ces options ; aussi, je ne sais pas de combien vous pouvez vous éloigner du temps présent dans un sens ou dans l'​autre.+Où aller à partir de là ? Eh bien, si vous retournez à la page de documentation de l'API DarSky vers laquelle je vous ait dirigé précédemment,​ vous trouverez une liste complète de toutes les clés disponibles. Elles comprennent les prévisions quotidiennes pour aujourd'​hui et les sept jours suivants, des prévisions à l'​heure,​ la possibilité de changer la langue de sortie et les unités de mesure, des prévisions minute par minute pour la prochaine heure, des alertes d'​informations sur du mauvais temps, et même un « time machine mode » (mode « machine à remonter le temps ») qui vous permet d'​inclure une date dans le passé ou le futur pour disposer des données observées (passé) ou prévues (futur). Je n'ai pas encore joué avec ces options ; aussi, je ne sais pas de combien vous pouvez vous éloigner du temps présent dans un sens ou dans l'​autre.
  
-Si vous êtes un « fana de météo » comme moi, ceci peut être un sujet vraiment ​amusant. Il devrait être assez facile de mettre ce code dans une interface graphique. Nous pourrions faire cela quelque part dans le futur.+Si vous êtes un « fana de météo » comme moi, ceci peut être un très amusant ​projet. Il devrait être assez facile de mettre ce code dans une interface graphique. Nous pourrions faire cela à un moment quelconque ​dans le futur.
  
 Démarrez la machine à remonter le temps ! Démarrez la machine à remonter le temps !
  
issue146/python.txt · Dernière modification: 2019/07/16 23:06 par andre_domenech