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 :

Comment récupérer un tableau JSON en php (requête HTTP google API)


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut Comment récupérer un tableau JSON en php (requête HTTP google API)
    Bonjour,

    J'ai activé une API google qui sert à récupérer la longitude et latitude par une requête HTTP.

    voici l'url d'exemple :
    https://maps.googleapis.com/maps/api...ance&key=MAKEY

    La requête fonctionne et m'affiche un tableau, exemple de tableau pour la requete ci-dessus :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    {
       "results" : [
          {
             "address_components" : [
                {
                   "long_name" : "Paris",
                   "short_name" : "Paris",
                   "types" : [ "locality", "political" ]
                },
                {
                   "long_name" : "Paris",
                   "short_name" : "Paris",
                   "types" : [ "administrative_area_level_2", "political" ]
                },
                {
                   "long_name" : "Île-de-France",
                   "short_name" : "Île-de-France",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "France",
                   "short_name" : "FR",
                   "types" : [ "country", "political" ]
                }
             ],
             "formatted_address" : "Paris, France",
             "geometry" : {
                "bounds" : {
                   "northeast" : {
                      "lat" : 48.9021449,
                      "lng" : 2.4699208
                   },
                   "southwest" : {
                      "lat" : 48.815573,
                      "lng" : 2.225193
                   }
                },
                "location" : {
                   "lat" : 48.856614,
                   "lng" : 2.3522219
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 48.9021449,
                      "lng" : 2.4699208
                   },
                   "southwest" : {
                      "lat" : 48.815573,
                      "lng" : 2.225193
                   }
                }
             },
             "place_id" : "ChIJD7fiBh9u5kcRYJSMaMOCCwQ",
             "types" : [ "locality", "political" ]
          },
          {
             "address_components" : [
                {
                   "long_name" : "Paris",
                   "short_name" : "Paris",
                   "types" : [ "sublocality_level_1", "sublocality", "political" ]
                },
                {
                   "long_name" : "Salles",
                   "short_name" : "Salles",
                   "types" : [ "locality", "political" ]
                },
                {
                   "long_name" : "Gironde",
                   "short_name" : "Gironde",
                   "types" : [ "administrative_area_level_2", "political" ]
                },
                {
                   "long_name" : "Aquitaine",
                   "short_name" : "Aquitaine",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "France",
                   "short_name" : "FR",
                   "types" : [ "country", "political" ]
                },
                {
                   "long_name" : "33770",
                   "short_name" : "33770",
                   "types" : [ "postal_code" ]
                }
             ],
             "formatted_address" : "Paris, 33770 Salles, France",
             "geometry" : {
                "location" : {
                   "lat" : 44.562918,
                   "lng" : -0.8655079999999999
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 44.56426698029149,
                      "lng" : -0.864159019708498
                   },
                   "southwest" : {
                      "lat" : 44.56156901970849,
                      "lng" : -0.866856980291502
                   }
                }
             },
             "place_id" : "ChIJt0HoUJ7tVA0RLqe2NDiDIAQ",
             "types" : [ "sublocality_level_1", "sublocality", "political" ]
          }
       ],
       "status" : "OK"
    }
    Ma question : La requête fonctionne sans problème mais comment récupérer le tableau ? Il est en JSON d’après la doc.. c'est peut-être une question stupide mais bon

    J'ai bien-sur lu la doc google https://developers.google.com/maps/d...eocoding/intro
    mais je ne comprends pas, déjà je n'ai jamais utilisé JSON

    Mon but est que j'ai un formulaire d'inscription ou l'utilisateur rentre une adresse et je veux que google me donne la longitude et latitude.
    mais je ne sais pas comment récupérer le tableau..

    merci pour votre aide

  2. #2
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Bonjour,

    Il va falloir combiner file_get_contents et json_decode pour cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $result = json_decode(file_get_contents('https://maps.googleapis.com/maps/api...ance&key=MAKEY'));
    var_dump($result);
    Ensuite tu auras un objet ($result) et tu peux accèder à ses valeurs ($result->results->address_components[0]->long_name par exemple).

  3. #3
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    Merci ta solution a l'air intéressante mais j'ai une erreur voici ma page test.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    $result = json_decode(file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?address=Paris,+France&key=MAKEYICI'));
     
    $result->results->address_components[0]->long_name
     
    ?>
    ( ! ) Notice: Trying to get property of non-object in C:\wamp\www\pag\test.php on line 5
    ( ! ) Notice: Trying to get property of non-object in C:\wamp\www\pag\test.php on line 5

    je crois qu'il ne récupère pas bien le tableau ? enfin d’après l'erreur..
    avec var_dump($result); il m'affiche :

    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
    object(stdClass)[1]
      public 'results' => 
        array (size=2)
          0 => 
            object(stdClass)[2]
              public 'address_components' => 
                array (size=4)
                  ...
              public 'formatted_address' => string 'Paris, France' (length=13)
              public 'geometry' => 
                object(stdClass)[7]
                  ...
              public 'place_id' => string 'ChIJD7fiBh9u5kcRYJSMaMOCCwQ' (length=27)
              public 'types' => 
                array (size=2)
                  ...
          1 => 
            object(stdClass)[15]
              public 'address_components' => 
                array (size=6)
                  ...
              public 'formatted_address' => string 'Paris, 33770 Salles, France' (length=27)
              public 'geometry' => 
                object(stdClass)[22]
                  ...
              public 'place_id' => string 'ChIJt0HoUJ7tVA0RLqe2NDiDIAQ' (length=27)
              public 'types' => 
                array (size=3)
                  ...
      public 'status' => string 'OK' (length=2)

  4. #4
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Tout marche bien donc ! il faut faire attention aux types (j'avais pas fait gaffe mais results est un array, donc on peut par exemple utiliser [0] pour prendre le premier résultat.

    En gros :
    • object(stdClass):utiliser -> pour accéder aux propriétés
    • array: utiliser [index] pour accéder aux items


    On a donc : $result->results[0]->address_components[0]->long_name

  5. #5
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    oui mais maintenant je n'ai plus d'erreur mais également pas de résultat à l'écran

    code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    $result = json_decode(file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?address=92500,+France&key=KEY'));
     
    $result->results[0]->address_components[0]->long_name
     
    ?>
    Je pense qu'il récupère bien le tableau maintenant, mais pour l'affichage j'ai raté quelque chose surement ?

    Sinon une question : c'est normal que si je tape moi même l'url dans mon navigateur (sans mon script) il ne m'affiche pas la même chose que si j'affiche le résultat avec ma page test.

    dans le navigateur j'ai un tableau plus complet j'ai l'impression :
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    {
       "results" : [
          {
             "address_components" : [
                {
                   "long_name" : "92500",
                   "short_name" : "92500",
                   "types" : [ "postal_code" ]
                },
                {
                   "long_name" : "Rueil-Malmaison",
                   "short_name" : "Rueil-Malmaison",
                   "types" : [ "locality", "political" ]
                },
                {
                   "long_name" : "Île-de-France",
                   "short_name" : "Île-de-France",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "France",
                   "short_name" : "FR",
                   "types" : [ "country", "political" ]
                }
             ],
             "formatted_address" : "92500 Rueil-Malmaison, France",
             "geometry" : {
                "bounds" : {
                   "northeast" : {
                      "lat" : 48.8960507,
                      "lng" : 2.2132624
                   },
                   "southwest" : {
                      "lat" : 48.8476741,
                      "lng" : 2.1479901
                   }
                },
                "location" : {
                   "lat" : 48.8695678,
                   "lng" : 2.1771764
                },
                "location_type" : "APPROXIMATE",
                "viewport" : {
                   "northeast" : {
                      "lat" : 48.8960507,
                      "lng" : 2.2132624
                   },
                   "southwest" : {
                      "lat" : 48.8476741,
                      "lng" : 2.1479901
                   }
                }
             },
             "place_id" : "ChIJK4enU1pj5kcREIHY4caCCxw",
             "types" : [ "postal_code" ]
          }
       ],
       "status" : "OK"
    }
    et le résultat dans ma page avec var_dump($result);
    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
    object(stdClass)[1]
      public 'results' => 
        array (size=1)
          0 => 
            object(stdClass)[2]
              public 'address_components' => 
                array (size=4)
                  ...
              public 'formatted_address' => string '92500 Rueil-Malmaison, France' (length=29)
              public 'geometry' => 
                object(stdClass)[7]
                  ...
              public 'place_id' => string 'ChIJK4enU1pj5kcREIHY4caCCxw' (length=27)
              public 'types' => 
                array (size=1)
                  ...
      public 'status' => string 'OK' (length=2)
    il y a moins de résultat, il m'affiche des "..." a la place des résultats ?

  6. #6
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Jusque là tout est normal.

    Pour le problème d'affichage, tu n'utilises aucune fonction ou mot clé pour afficher. En général on utilise echo, mais tu peux aussi utiliser print_r, print, sprintf (un peu plus complexe...)...

    Pour le reste, c'est juste xdebug qui ne veut pas afficher la variable en entier pour ne pas donner trop d'infos et devenir illisible. Du coup on a des ..., mais si tu fais un var_dump de quelque chose de plus spécifique tu le verras en entier (par exemple var_dump($result->results[0]->address_components[0])).

    Une solution consisterait à utiliser un dumper alternatif, comme celui de symfony par exemple, qui te donne une version complète de l'objet en version fermée et te laisse la possibilité de naviguer dedans.

  7. #7
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    pour le moment j'avance dans mon mini script

    voici mon code pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    // requête https vers google api
    $result = json_decode(file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?address=92500,+France&key=KEY'));
     
    // test de la réponse google
    var_dump($result->results[0]);
     
    // affichage des infos
    $ville = $result->results[0]->address_components[1]->long_name;
     
    echo "Votre ville est : $ville";
     
    ?>
    pour le moment nickel

    sinon, il faut que je stocke dans ma bdd la longitude et latitude, selon toi je dois choisir quel type de champ ? y a t'il un champ conçu pour la longitude/latitude dans sql ?

  8. #8
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Pour moi, un champ pour chaque et surement un varchar (taille à définir selon la précision). Un signed float marche aussi ceci dit (normalement, du moins je ne connais pas assez les coordonnées géographiques pour trouver un problème...).

  9. #9
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    ok je te remercie, j'ai préféré float pour les deux champs.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/07/2011, 16h21
  2. Comment récupérer une variable javascript en php?
    Par sheira dans le forum Langage
    Réponses: 13
    Dernier message: 07/12/2010, 12h00
  3. Comment récupérer une variable javascript dans PHP
    Par pierrot10 dans le forum Langage
    Réponses: 1
    Dernier message: 08/10/2010, 06h08
  4. comment récupérer le message du vrai PHP ?
    Par junior68 dans le forum Langage
    Réponses: 2
    Dernier message: 01/08/2008, 12h13
  5. Réponses: 1
    Dernier message: 14/09/2006, 10h53

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