SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

288 Plugins, 197 contribs sur SPIP-Zone, 195 visiteurs en ce moment

Accueil > Géo, carto, météo > GIS > Géolocalisation des visiteurs > Géolocaliser les articles en fonction de l’ip de l’internaute qui se connecte (...)

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

16 octobre 2010 – par Bernt – commentaires

9 votes

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.

Voir en ligne : http://plugins.spip.net/geo_visiteurs

Dernière modification de cette page le 11 juin 2012

Retour en haut de la page

Vos commentaires

Répondre à cet article

Qui êtes-vous ?

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Pour un fonctionnement communautaire efficace dans la communauté SPIP

    24 mai – commentaires

    Où l’on propose de tester des nouvelles façons de prendre des décisions et d’avancer collectivement sur des projets SPIP, de manière transparente, en impliquant la communauté, et en étant plus accueillants pour les nouvelles personnes. Tout ça dans la (...)

  • Acces Restreint 3.0

    11 décembre 2008 – 803 commentaires

    Le plugin accès restreint permet de définir et de gérer des zones de l’espace public en accès restreint. Cette version du plugin a été redévelopée et optimisée tout spécialement pour SPIP 2.0. Il en découle une amélioration des performances sur les gros (...)

  • GIS 4

    11 août 2012 – 1348 commentaires

    Présentation et nouveautés La version 4 de GIS abandonne la libraire Mapstraction au profit de Leaflet. Cette librairie permet de s’affranchir des librairies propriétaires tout en gardant les mêmes fonctionnalités, elle propose même de nouvelles (...)

  • GIS Geometries

    19 mars 2014 – 49 commentaires

    Ce plugin ajoute au plugin GIS la possibilité d’afficher et d’éditer des formes géométriques. Avertissement : ce plugin ne fonctionne que sur les sites qui utilisent une base de données MySQL en version 4.1 minimum, car la gestion des données (...)

  • Présentation : Organisation et décisions dans une optique autogérée et non-argentée

    11 mai – commentaires

    Cette présentation a été faite durant la rencontre SPIP à Toulouse en mai 2017. Elle propose des pistes de solutions pour avancer sur les chantiers compliqués et bloquants, notamment par la rédaction d’une charte/mode d’emploi pour la communauté et (...)

Ça spipe par là