IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème de lecture json dans console python [Python 2.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 15
    Points
    15
    Par défaut Problème de lecture json dans console python
    Bonjour à tous,

    Devenant folle pour un code tellement simple...

    Je suis sur un programme de géolocalisation... il y a quelques jours cela se passé très bien... puis depuis hier plus rien. Je fais donc appel à vos idées...

    Problème :

    Ma lecture du json me renvois un resultat NULL...

    CODE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import json
    import requests
     
    requete = "https://maps.googleapis.com/maps/api/geocode/json?components=postal_code:94600&key=MyKey"
    r = requests.get(requete)
    r.json()
     
    {u'status': u'ZERO_RESULTS', u'results': []}
    Jusque là, j'ai pensé à la clef de l'API Google Maps Geocoding API
    Mais en entrant directement l'url dans mon navigateur j'ai bien le résultat et pas de retour comme quoi elle n'est plus valide :


    Nom : URLOK.PNG
Affichages : 146
Taille : 81,8 Ko

    On voit bien que le json n'est pas vide dans la requête.

    Par contre si je met un autre code postal dans mon code le json me retourne enfin un résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import json
    import requests
     
    requete = "https://maps.googleapis.com/maps/api/geocode/json?components=postal_code:50110&key=MyKey"
     
    r = requests.get(requete)
    r.json()
     
    {u'status': u'OK', u'results': [{u'geometry': {u'location': {u'lat': 41.8394094, u'lng': -94.98161929999999}, u'viewport': {u'northeast': {u'lat': 41.8407583802915, u'lng': -94.98027031970848}, u'southwest': {u'lat': 41.8380604197085, u'lng': -94.9829682802915}}, u'location_type': u'APPROXIMATE'}, u'address_components': [{u'long_name': u'50110', u'types': [u'postal_code'], u'short_name': u'50110'}, {u'long_name': u'Gray', u'types': [u'locality', u'political'], u'short_name': u'Gray'}, {u'long_name': u'Lincoln', u'types': [u'administrative_area_level_3', u'political'], u'short_name': u'Lincoln'}, {u'long_name': u'Audubon County', u'types': [u'administrative_area_level_2', u'political'], u'short_name': u'Audubon County'}, {u'long_name': u'Iowa', u'types': [u'administrative_area_level_1', u'political'], u'short_name': u'IA'}, {u'long_name': u'United States', u'types': [u'country', u'political'], u'short_name': u'US'}], u'place_id': u'ChIJO6QO0Ycp7YcRsjTxouFbtCY', u'formatted_address': u'Gray, IA 50110, USA', u'types': [u'postal_code']}]}
    A part me dire que la requête sous python préfère la Normandie à l'île de France...
    J'ai essayé avec urllib2 = même problème.

    Merci pour votre aide sur ce sujet ou vos idées

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Mathilde94 Voir le message
    A part me dire que la requête sous python préfère la Normandie à l'île de France...
    L'Iowa n'est pas en Normandie.
    Et un code postal n'étant pas unique au niveau mondial, essayez déjà de préciser le "pays" pour être sur qu'il n'applique pas un défaut inapproprié.
    note: {u'status': u'ZERO_RESULTS', u'results': []} signifie que la requête est correcte mais qu'il n'y a pas de résultat pour ce code postal.... Et vous voyez bien que dans un cas çà retourne quelque chose en France et dans l'autre une adresse aux USA.
    En gros, çà fait ce que çà peut pour gérer votre manque de précision.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Il faut souvent se méfier des différences constatées lors de l'accès à une URL via un navigateur et via un programme perso. En effet, il ne faut pas oublier qu'une requête HTTP, ce n'est pas juste un GET + URL.. C'est aussi un nombre variables d'en-têtes. Dans Firefox, il suffit d'aller dans Menu / Développement / Réseau et recharger la page pour voir les échanges entre Firefox et le serveur pour afficher la page. Voilà ce que ça donne avec ton URL :

    Nom : reseau firefox.PNG
Affichages : 120
Taille : 19,6 Ko
    Tu vois qu'il a rajouté plusieurs en-têtes à ta requête. Je n'ai pas l'impression qu'une de ces en-têtes permette d'identifier ton origine géographique... Peut-être éventuellement "Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3" qui pourrait faire croire que tu es français car tu demandes le français en priorité.

    Dans certains cas, le serveur peut réagir très différemment à cause de ces en-têtes ! J'ai souvenir d'un projet où le serveur refusait les connexions si la requête n'avait pas d'en-tête "user agent" Bien évidemment, mon programme n'en donnait pas et je ne comprenais pas pourquoi il n'arrivait jamais à se connecter...


    EDIT : BINGO !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import urllib.request
     
    url = "http://maps.googleapis.com/maps/api/geocode/json?components=postal_code:94600"
    data = None
    headers = {"Accept-Language": "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3"}
     
    req = urllib.request.Request(url, data, headers)
    print(req)
     
    opened_url = urllib.request.urlopen(req)
    data = opened_url.read()
    print(data.decode("utf-8"))
    Renvoie ce la même chose que Firefox

    Tu peux changer les headers par headers = {"Accept-Language": "en-US;q=0.5,en;q=0.3"}" et voir que tu auras zéro résultat.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 15
    Points
    15
    Par défaut
    Merci Bktero pour ton partage Cela explique le bon retour via le navigateur.

    La première réponse m'a en effet mise sur la piste du langage de mon navigateur. J'ai donc rajouter l'ajout du code ISO2 des pays afin d'être plus précise et cela fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/02/2016, 16h46
  2. Réponses: 4
    Dernier message: 24/11/2012, 14h37
  3. Problème de lecture vidéo dans PPS
    Par Claude_Azoulai dans le forum Powerpoint
    Réponses: 1
    Dernier message: 15/07/2009, 18h19
  4. Problème de lecture/ecriture dans un fichier txt
    Par fraid49 dans le forum Général Python
    Réponses: 6
    Dernier message: 20/11/2008, 11h32
  5. Problème a l'affichage dans la console (printf)
    Par PhoneKilleR dans le forum C
    Réponses: 21
    Dernier message: 23/09/2003, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo