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

Langage PHP Discussion :

Lecture d'un fichier Json


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Points : 15
    Points
    15
    Par défaut Lecture d'un fichier Json
    Bonjour,

    J'essaie d'accéder à un fichier "JSON" pour en extraire les données mais je n'y arrive pas

    le fichier "Json" est distant et j'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    // chemin d'accès à votre fichier JSON
    $file = 'https://nominatim.openstreetmap.org/reverse?format=json&lat=35.6082351&lon=-0.563609&zoom=18&addressdetails=1'; 
    // mettre le contenu du fichier dans une variable
    $data = file_get_contents($file);
    if (!$data) { echo "Impossible d'ouvrir le fichier"; }
    // décoder le flux JSON
    $obj = json_decode($data); 
    // accéder à l'élément approprié
    echo $obj[0]->road;
    ?>
    L'erreur "Impossible d'ouvrir le fichier" s'affiche et donc je ne peux pas afficher les données y afférents.

    Dois-je utiliser d'autres fonctions pour y accéder ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Déveleoppeur Web/Mobile
    Inscrit en
    Avril 2013
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déveleoppeur Web/Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 330
    Points : 545
    Points
    545
    Par défaut
    Essaie d'afficher l'erreur pour avoir plus de précisions :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try {
        file_get_contents('www.google.com');
    }
    catch (Exception $e) {
        echo $e->getMessage();
    }

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    j'ai effectivement fais des recherches et j'ai constaté que le serveur distant ne permet pas la fonction file_get_contents ()
    pour cela je viens de modifier le code en utilisant CURL et ça marche je peux y accéder

    je stock l'ensemble du fichier JSON dans la variable $data mais malheureusement ce type de stockage ne me permet pas d'extraire les données par item

    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <?php
     
     
    function get_data($url) {
      // Créer une nouvelle ressource CURL
      $ch = curl_init();
      // Timeout
      $timeout = 5;
     
      // l'URL de la page du site à extraire :
      curl_setopt($ch, CURLOPT_URL, $url);
      // Le contenu du User-Agent
      curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
      // Retour du transfert 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      // SSL
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,true);
      // Vérifier le pper certificat
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
      // Le nombre maximum de redirections HTTP à suivre
      curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
      // pour suivre toutes location
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
      // Le nombre de secondes à attendre lors de la tentative de connexion
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
     
      $data = curl_exec($ch);
      curl_close($ch);
      return $data;
    }
     
    $url = "https://nominatim.openstreetmap.org/reverse?format=json&lat=35.6082351&lon=-0.563609&zoom=18&addressdetails=1";
     
    $data = get_data($url);
     
    echo $data;
     
     
    // décoder le flux JSON
    $obj = json_decode($data); 
    // accéder à l'élément approprié
    echo $obj[0]->raod;
    ?>
    ai-je loupé une étape ? ^^

    Merci d'avance pour votre aide

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Un petit var_dump de ta variable $obj te permettrait d'y voir plus clair dans sa structure (nb: tu peux aussi réencoder en json en utilisant l'option de pretty print).

    Il n'y a pas d'index 0 pas plus que de clef "raod" dans ton json, par contre il y a une clef "address" associée à un objet json avec une clef "road", ce qui nous donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $obj->address->road;

    PHP 5.2! Tu rigoles, on en est à la 7.4.49 maintenant et la version 8.0 est en alpha. Il ne faut plus travailler sur des versions aussi vieilles, celle-ci n'est plus supportée depuis des lustres!

    À propos de file_get_contents(): tu utilises cURL ça marche et c'est tant mieux, par contre ce n'est pas pour autant que tu ne peux pas le faire avec file_get_contents() car les trois quarts du temps, la seule chose qui bloque c'est juste la définition de l'user agent, or tu peux également la faire en utilisant les contextes de flux (voir stream_context_create()).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. Lecture d'un fichier Json
    Par BenkessiratAmina dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 20/03/2017, 22h49
  2. Lecture d'un fichier json
    Par jerem_orga dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 02/09/2014, 22h26
  3. [Gson] Lecture d'un fichier json
    Par Energizing dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 14/02/2013, 23h20
  4. [AJAX] Lecture d'un fichier json par ajax
    Par zizoo510 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/08/2008, 12h11

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