3 pièce(s) jointe(s)
Foreach sur un curl avec des données CONCAT
Hello tout le monde !
J'essaye de récupérer dans une table l'adresse, la ville et le CP de plusieurs client pour ensuite récupérer la latitude et la longitude de ces adresses.
Quand je fais ce code :
Code:
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
| $reponse = $bdd->query('SELECT address, city, postal_code FROM address');
while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC))
{
echo '<tr>';
foreach ($donnees as $field) {
$curl= curl_init('https://nominatim.openstreetmap.org/search?q='.$field.'&format=jsonv2');
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13');
curl_setopt($curl, CURLOPT_CAINFO, 'D:\wamp\www\\cacert.pem');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Accept: application/json'
));
$data = curl_exec($curl);
if($data === false){
var_dump(curl_error($curl));
}
else {
$data = json_decode($data, true);
echo '<pre>';
var_dump($data);
}
echo '</tr>';
}
} |
Je récupère les données mais ça me retourne tous les résultats possibles pour chaque code postal en premier alors que je n'ai besoin que d'un seul résultat par ligne de ma BDD et pas 50.
Je veux que les trois valeurs de base soient ensemble dans l'URL car sinon les données ne sont pas bonnes.
Toutes les adresses de ma BDD sont en France mais je me retrouve avec des résultats hors FR du coup. Dans l'exemple ci-dessous, ça prend le premier code postal de ma BDD "13600" et ça me retourne tous les résultats possible, alors que je ne veux que la FR :
Pièce jointe 627717
Du coup j'ai voulu utiliser CONCAT pour rassembler les trois colonnes de ma table dans une seule chaine de caractère :
Code:
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
| $reponse = $bdd->query('SELECT CONCAT(address, city, postal_code) FROM address');
while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC))
{
echo '<tr>';
foreach ($donnees as $field) {
$curl= curl_init('https://nominatim.openstreetmap.org/search?q='.$field.'&format=jsonv2');
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13');
curl_setopt($curl, CURLOPT_CAINFO, 'D:\wamp\www\\cacert.pem');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Accept: application/json'
));
$data = curl_exec($curl);
if($data === false){
var_dump(curl_error($curl));
}
else {
$data = json_decode($data, true);
echo '<pre>';
var_dump($data);
}
echo '</tr>';
}
} |
Sauf que dès que j'utilise le CONCAT, je n'ai plus de résultats, je n'ai que des NULL. J'ai testé avec le CONCAT_WS et même en utilisant COALESCE() mais rien n'y fait...
Pièce jointe 627718
Y'a t'il un autre moyen d'arriver au résultat voulu sans forcément utiliser un CONCAT pour le coup ?
Par ailleurs il y a un problème quand j'essaye de récupérer la latitude et longitude sans utiliser le CONCAT.
Pièce jointe 627719
Pourtant quand j'ai testé mon code en dehors de la boucle l'appel fonctionnait correctement.
Voici le code dans la boucle sans le CONCAT :
Code:
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
| $reponse = $bdd->query('SELECT address, city, postal_code FROM address');
while ($donnees = $reponse->fetch())
{
echo '<tr>';
foreach ($donnees as $field) {
$curl= curl_init('https://nominatim.openstreetmap.org/search?q='.$field.'&format=jsonv2');
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13');
curl_setopt($curl, CURLOPT_CAINFO, 'D:\wamp\www\\cacert.pem');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Accept: application/json'
));
$data = curl_exec($curl);
if($data === false){
var_dump(curl_error($curl));
}
else {
$data = json_decode($data, true);
echo '<pre>';
var_dump($data);
$lat = $data[0]['lat'];
echo $lat;
}
echo '</tr>';
}
} |
La latitude est pourtant bien présente dans $data[0]['lat'] je ne comprends pas trop.