Géolocaliser les articles en fonction de l’ip de l’internaute qui se connecte à votre site

Remerciements : CM, Sam, Florence HENRY

Objectif : Géolocaliser les articles en fonction de l’ip de l’internaute qui se connecte à votre site.

Prérequis : Avoir installé le plugin GIS et avoir géolocalisé les articles de votre site en fonction des lieux qu’ils évoquent
Avoir créé un compte sur http://ipinfodb.com et avoir récupéré l’API key.

Possible : Vous êtes lecteur d’un quotidien régional. La page d’accueil du site du journal affiche en priorité les articles qui concernent votre canton.

Exemple en ligne : Géolocalisez les livres proches de chez vous http://www.bibliosurf.com/spip.php?page=jeu_de_cartesbis.

Méthode

1. Copier les fonctions suivantes dans le fichier mes_fonctions.php

function get_url_contents($url){
       $crl = curl_init();
       $timeout = 5;
       curl_setopt ($crl, CURLOPT_URL,$url);
       curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
       $ret = curl_exec($crl);
       curl_close($crl);
       return split("\n", $ret);
}

 $ip = $_SERVER['REMOTE_ADDR'];
 $xml = get_url_contents("http://api.ipinfodb.com/v2/ip_query.php?key=<your_api_key>&ip=" . $ip);

  $latitude = preg_replace("/<\/?Latitude>/", "", $xml[9]);
  $longitude = preg_replace("/<\/?Longitude>/", "", $xml[10]);

Cette fonction utilise le site http://ipinfodb.com pour récupérer la latitude et la longitude de l’IP qui se connecte au site.

function balise_LATITUDE($p){
   $ip = $p->param[0][1][0]->texte ;
   $p->code = "calculer_balise_LATITUDE($ip)";
   $p->interdire_scripts = false;
   return $p;
}

function calculer_balise_LATITUDE() {
   $xml = get_url_contents("http://api.ipinfodb.com/v2/ip_query.php?key=<your_api_key>&ip=" . $_SERVER['REMOTE_ADDR']);
  $latitude = preg_replace("/<\/?Latitude>/", "", $xml[9]);
   return round($latitude, 1);
}


function balise_LONGITUDE($z){
   $ip = $z->param[0][1][0]->texte ;
   $z->code = "calculer_balise_LONGITUDE($ip)";
   $z->interdire_scripts = false;
   return $z;
}

function calculer_balise_LONGITUDE() {
   $xml = get_url_contents("ttp://api.ipinfodb.com/v2/ip_query.php?key=<your_api_key>&ip=" . $_SERVER['REMOTE_ADDR']);
  $longitude = preg_replace("/<\/?Longitude>/", "", $xml[10]);
   return round($longitude, 1);
}

Ces fonctions transforment la valeur du code PHP en balise spip en l’occurrence #LATITUDE et #LONGITUDE.

2. Copier le code suivant dans votre squelette

#SET{demi_precision, 0.3} 
#SET{lat_min, #LATITUDE|moins{#GET{demi_precision}}}
#SET{lat_max, #LATITUDE|plus{#GET{demi_precision}}}
#SET{long_min, #LONGITUDE|moins{#GET{demi_precision}}}
#SET{long_max, #LONGITUDE|plus{#GET{demi_precision}}}

<BOUCLE_gis(spip_gis){lat >= #GET{lat_min}}
                     {lat <= #GET{lat_max}}
                     {lonx >= #GET{long_min}}
                     {lonx <= #GET{long_max}}>

Vous pouvez élargir ou diminuer le périmètre de la géolocalisation en modifiant la valeur 0.3.

On fait la requête sur la table SPIP_GIS pour obtenir les #ID_ARTICLE correspondant au périmètre de la géolocalisation. (Attention à partir de SPIP 2.1, le nom de la table s’écrit comment il est saisi dans la base en l’occurrence spip_gis).

suite du code

<BOUCLE_bis(ARTICLES){id_article}{pagination}>
   <a href="#URL_ARTICLE">
   #TITRE
   </a>
</BOUCLE_bis>
       <div>#PAGINATION{precedent_suivant}</div>
 </B_bis>
	 Il n'y a pas encore d'article géolocalisé proche de chez vous. 
 <//B_bis>

</BOUCLE_gis>

NB :Cette boucle est bien sûr à modifier en fonction de vos attentes d’affichage des données.

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom