Bonjour, je travaille avec une API qui me donne des données JSON et je souhaite en extraire un tableau en php comme celui-ci.
Le code ci-dessous me donne une liste de pays en JSON
{
"ResultCode": 1,
"ErrorCodes": [],
"Items": [
{
"CountryIso": "AD",
"CountryName": "Andorra",
"InternationalDialingInformation": [],
"RegionCodes": [
"AD"
]
},
{
"CountryIso": "AE",
"CountryName": "United Arab Emirates",
"InternationalDialingInformation": [
{
"Prefix": "971",
"MinimumLength": 12,
"MaximumLength": 12
}
],
"RegionCodes": [
"AE"
]
},
{
"CountryIso": "AF",
"CountryName": "Afghanistan",
"InternationalDialingInformation": [
{
"Prefix": "93",
"MinimumLength": 11,
"MaximumLength": 11
}
],
"RegionCodes": [
"AF"
]
},
{
"CountryIso": "AG",
"CountryName": "Antigua",
"InternationalDialingInformation": [
{
"Prefix": "1268",
"MinimumLength": 11,
"MaximumLength": 11
}
],
"RegionCodes": [
"AG"
]
},
{
"CountryIso": "AI",
"CountryName": "Anguilla",
"InternationalDialingInformation": [
{
"Prefix": "1264",
"MinimumLength": 11,
"MaximumLength": 11
}
],
"RegionCodes": [
"AI"
]
},
{
"CountryIso": "AL",
"CountryName": "Albania",
"InternationalDialingInformation": [
{
"Prefix": "355",
"MinimumLength": 12,
"MaximumLength": 12
}
],
"RegionCodes": [
"AL"
]
},
{
"CountryIso": "AM",
"CountryName": "Armenia",
"InternationalDialingInformation": [
{
"Prefix": "374",
"MinimumLength": 11,
"MaximumLength": 11
}
],
"RegionCodes": [
"AM"
]
},
{
"CountryIso": "AN",
"CountryName": "Netherlands Antilles",
"InternationalDialingInformation": [
{
"Prefix": "599",
"MinimumLength": 10,
"MaximumLength": 10
}
],
"RegionCodes": [
"AN"
]
},
{
"CountryIso": "AO",
"CountryName": "Angola",
"InternationalDialingInformation": [
{
"Prefix": "244",
"MinimumLength": 12,
"MaximumLength": 12
}
],
"RegionCodes": [
"AO"
]
},
{
"CountryIso": "AR",
"CountryName": "Argentina",
"InternationalDialingInformation": [
{
"Prefix": "54",
"MinimumLength": 12,
"MaximumLength": 12
}
],
"RegionCodes": [
"AR"
]
},
{
"CountryIso": "AS",
"CountryName": "American Samoa",
"InternationalDialingInformation": [
{
"Prefix": "1684",
"MinimumLength": 11,
"MaximumLength": 11
}
],
"RegionCodes": [
"AS"
]
},
{
"CountryIso": "AT",
exemple de données JSON reçues
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.dingconnect.com/api/V1/GetCountries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"api_key: 5sIkXhACG4n5kaktzVECSl",
"Cookie: visid_incap_1373684=W9x+2eX9SnqTQX976o3oKHP6p14AAAAAQUIPAAAAAACMqfJ0lIy4A94PIJ9/k566; visid_incap_1694192=CGL0RcqDS4y8rtfUDyl8RIn7p14AAAAAQUIPAAAAAAAgAZUccrSXJcreVE5ZcnLv; incap_ses_314_1694192=sszNShN26mgsFiNoe41bBOCRrV4AAAAAIX3OEAYdaCajfehID6IgsQ=="
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
ce que je veux, c'est avoir un tableau de nom et d'identifiant de pays pour que je peux faire une liste déroulante des pays reçus.
Je n'ai vraiment aucune idée de comment faire cela. Toute aide est vraiment appréciée. Merci!
3 Réponses :
Je vous suggère d'utiliser le package jQuery ou CDN. C'est génial lorsque vous faites des requêtes API et il est livré avec un excellent support pour Ajax . Personnellement, je trouve qu'avec Ajax et jQuery vous aurez une expérience beaucoup plus agréable, car c'est plus simple.
Si $ response est un JSON, vous pouvez faire json_decode ($ response); qui convertira le JSON en un objet ou un tableau PHP, et vous pourrez travailler à partir de là sur l'extraction du nom et de l'ID des pays.
Vous devez json_decode la réponse $, lire chaque élément dans une boucle et le transmettre à un tableau nouvellement créé.
Remarque: si vous n'avez pas besoin des codes ISO , vous pouvez également utiliser array_map au lieu de foreach.
[
"AD" => "Andorra",
"AE" => "United Arab Emirates",
"AF" => "Afghanistan",
// etc.
]
Vos $ pays sera un tableau:
$response = curl_exec($curl); // original line
$countryData = json_decode($response)->Items;
$countries = [];
if ($countryData !== false) {
foreach ($countryData as $countryItem) {
$countries[$countryItem->CountryIso] = $countryItem->CountryName;
}
}
// var_dump($countries);
Est-ce que cela répond à votre question? Pas de contrôle d'accès L'en-tête Allow-Origin est présent sur la ressource demandée, lorsque vous essayez d'obtenir des données à partir d'une API REST
Je suis désolé de dire que non, je n'ai pas pu comprendre la réponse et la question est également différente, il a le problème que je reçois mais je ne suis pas non plus sûr si je suis dans la bonne direction pour obtenir les données ou non! mais vraiment merci pour ton commentaire.
C'est vraiment le même problème. Si l'API que vous utilisez ne définit pas d'en-têtes CORS, vous ne pouvez pas utiliser l'API à partir d'un navigateur et devez utiliser l'une des solutions de contournement. Je vois votre question spécifique apparaître peut-être une fois par semaine, mais la réponse est toujours plus ou moins la même. Utilisez un proxy côté serveur que vous contrôlez ou demandez au propriétaire de l'API d'ajouter des en-têtes CORS.
Jetez un œil ici aussi: stackoverflow.com/... .
Il n’existe pas de service Web de niveau 0 REST . Le modèle majoritaire de Richardsen (RMM) est absurde en ce sens que même avec le niveau 3 en place, on peut avoir un serveur ou un client qui enfreint les principes de l'architecture REST. C'est à dire. RMM ne parle même pas de prise en charge du type de média et de négociation de type de contenu.