Méthode file_get_contents php - Problème de géocoding yahoo

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par vinz7tim, 26 Novembre 2009.

  1. vinz7tim
    vinz7tim Nouveau WRInaute
    Inscrit:
    26 Novembre 2009
    Messages:
    3
    J'aime reçus:
    0
    Bonjour à tous,

    Je me permets de vous solliciter pour un problème qui m'est incompréhensible et pour lequel j'aimerais que vous m'éclairiez.

    Je possède une page sur un site qui me permet d'afficher les agences d'une entreprise à la googlemaps. J'utilise le géocoding de yahoo qui est plus pertinent et plus précis et me permets de récupérer la latitude et la longitude terrestre d'une adresse. Tout fonctionnait correctement depuis 6 mois, et depuis peu, j'ai des erreurs file_get_contents qui s'affichent : Warning: file_get_contents(url) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request.

    L'url du file_get_contents est du type : http://api.local.yahoo.com/MapsService/V1/geocode?appid=yahoo_05e982f0 ... &location=

    Le paramètre location est rempli correctement et est du type : adresse, CP ville, Pays. Les 4 valeurs sont concaténées et transformées avec rawurlencode et donc avec des %20 pour les espaces, des %E9 pour les "é" ....

    Mon problème est le suivant : Je me suis aperçu que les erreurs file_get_contents étaient dûes au faite que dans certaines adresses, il y avait des accents du genre (54%20avenue%20Saint%20Andr%E9). A partir de ce moment, je me suis dis qu'il s'agissait d'une problème d'encodage. Mais pourquoi, et pourquoi cela a changé de fonctionnement ?
    Après quelques tests, je me suis créé un petit fichier test avec une adresse contenant un accent avec le code suivant :

    Code:
    <?php 
        $address = strtolower("Cour Napoléon, 75001 Paris");
        $url = 'http://api.local.yahoo.com/MapsService/V1/geocode';
        $url .= sprintf('?appid=%s&location=%s',"yahoo_ab67cd17a7",rawurlencode($address));
        $result = false;
        if($result = file_get_contents($url)) {
    		preg_match('!<Latitude>(.*)</Latitude><Longitude>(.*)</Longitude>!U', $result, $match);
     		if (isset($match) )  {
           	 	       $geocode = array('latitude'  =>  $match[1],'longitude' =>  $match[2]);
    			echo($geocode['latitude'].", ".$geocode['longitude']);
      		}          
    	} 
    	
    ?>
    
    Pour tester, je me suis créer deux fichiers : un premier fichier enregistré en iso-8859-1 et un autre fichier enregistré en utf-8 avec bien entendu exactement le même code cité ci-dessus. L'erreur apparaît alors dans le premier cas (iso-8859-1) mais pas dans le second cas (utf-8). Bizarre, d'autant plus, que l'adresse est encodée en rawurlencode. Je me suis dis alors qu'il s'agissait peut être d'une mauvaise configuration serveur mais pas du tout puisque ces deux cas sont identiques sur 2 serveurs apache en php5 et 1 serveur php4.
    Enfin, j'ai gardé mes deux fichiers tels quels et j'ai testé avec un htaccess possédant le paramètre AddDefaultCharset UTF-8 et en suite avec un AddDefaultCharset ISO-8859-1 mais rien n'y fait. Le premier cas ne fonctionne pas tandis que le deuxième cas fonctionne.

    Bien entendu, si l'adresse ne possède pas d'accents, les deux cas (iso et utf) fonctionnent.

    Alors :
    1 - Pourquoi une telle différence de fonctionnement en iso et utf-8 dans la mesure où l'adresse est encodée en rawurlencode ?
    2 - Est ce que yahoo aurait changé des choses de leur coté ?
    3 - pourquoi y aurait-il eu un changement de fonctionnement ?


    Merci par avance de votre aide.
     
  2. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 901
    J'aime reçus:
    0
    tu dois mettre : rawurlencode(utf8_encode($address))
     
  3. vinz7tim
    vinz7tim Nouveau WRInaute
    Inscrit:
    26 Novembre 2009
    Messages:
    3
    J'aime reçus:
    0
    Bonjour,

    Et merci de cette réponse rapide.

    En effet, j'avais testé et cela fonctionnait avec rawurlencode(utf8_encode($address)) pour un fichier iso. Mais cela implique que je dois modifier mon fichier, (ce que je ne voulais pas) pour que l'encodage de mon rawurlencode soit au format UTF-8 et non iso. En gros, les "é" en iso-8859-1 sont encodés "%E9" et les "é" en UTF-8 sont encodés "%C3%A9". Pour du coup, la finalité de l'url n'est plus du tout la même qu'au départ et c'est surement pourquoi yahoo me retourne une "bad request".

    Comme je le précisais au début, le fichier était encodé en ISO et la requête sur yahoo fonctionnait. Maintenant, cela ne fonctionne plus. Yahoo aurait il modifié des choses de son coté ? Car si ce n'est pas le cas, je ne comprends pas bien. Une configuration serveur serait elle en cause ?
     
  4. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 901
    J'aime reçus:
    0
    C'est logique que l'API de yahoo attende de l'UTF8 car elle doit pouvoir répondre dans tous les pays et toutes les langues.

    Tu as deux solutions, soit tu modifies l'encodage de ton site (et de sa base de données si l'adresse vient de là) pour être en utf8 soit tu utilises la conversion avec la fonction utf8_encode.

    je ne sais pas si c'est normal qu'ils aient modifié le fonctionnement mais ça ne changera rien à ton problème.
     
  5. vinz7tim
    vinz7tim Nouveau WRInaute
    Inscrit:
    26 Novembre 2009
    Messages:
    3
    J'aime reçus:
    0
    Merci beaucoup forty, tu m'as permis d'avancer.

    Je comprends que yahoo passe à UTF-8 surtout que les adresses Web vont pouvoir bientôt accepter prochainement les caractères spéciaux et donc UTF-8. C'est sûrement pour cela mais ils pourraient prévenir.

    Si tu as d'autres commentaires à faire, n'hésites pas.
     
  6. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Tu as publié ton app_id Yahoo, je ne suis pas sûr que ce soit une bonne idée...

    Jacques.
     
  7. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 901
    J'aime reçus:
    0
    c'est pas compliqué d'en récupérer une gratuitement ici : -https://developer.yahoo.com/wsregapp/
     
  8. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Et si quelqu'un la récupère et fait tout plein de requêtes avec et atteint le nombre de requêtes/jour autorisé ses appels ne marcheront plus... S'ils attribuent des app_ids différentes à chaque utilisateur c'est qu'il y a une bonne raison...

    Jacques.
     
Chargement...
Similar Threads - Méthode file_get_contents php Forum Date
Méthode qui fonctionne le mieux en référencement SEO Débuter en référencement 19 Avril 2022
Détails sur les backlogs et les sprints en méthode Agile Développement d'un site Web ou d'une appli mobile 20 Décembre 2021
Erreur de redirection et méthode de compression Développement d'un site Web ou d'une appli mobile 5 Décembre 2021
Iframe et le SEO - Méthode en 2021 ? Développement d'un site Web ou d'une appli mobile 29 Avril 2021
static possible pour une méthode avec promise ? Développement d'un site Web ou d'une appli mobile 3 Février 2021
Récapitulatif Ma méthode de Rédaction WEB Rédaction web et référencement 26 Octobre 2020
Site d'essai : quelle méthode pour interdire l'accès ? Développement d'un site Web ou d'une appli mobile 19 Octobre 2020
script ou méthode pour connaitre ses 404 Administration d'un site Web 4 Août 2020
SEO : comment choisir les bons mots-clés ? méthode/infographie Rédaction web et référencement 11 Juin 2020
Astuce Avis sur les méthodes pour booster mes ventes Demandes d'avis et de conseils sur vos sites 8 Décembre 2019
Nouvelle méthode SEO méthode américaine Référencement Google 16 Octobre 2019
Forum : méthodes de notification Développement d'un site Web ou d'une appli mobile 6 Août 2019
Fonctionnement de la méthode cocon sémantique Référencement Google 31 Mai 2019
Méthode pour générer un bon sitemap Crawl et indexation Google, sitemaps 4 Avril 2019
Ma méthode est-elle correcte ? Développement d'un site Web ou d'une appli mobile 3 Janvier 2019
méthode imparable pour rediriger les URLs en https WP Développement d'un site Web ou d'une appli mobile 23 Octobre 2018
Analyse des Pages Actives sur 1 an (méthode SEO) Techniques avancées de référencement 7 Juin 2018
Nouvelle méthode pour avoir des backlinks Netlinking, backlinks, liens et redirections 30 Mai 2018
Méthodes de référencement peu conventionnelles Référencement Google 14 Mai 2018
Les meilleures méthodes, astuces et outils SEO recommandés par WebRankInfo Référencement Google 13 Octobre 2017