SPIP-Contrib

SPIP-Contrib

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

274 Plugins, 192 contribs sur SPIP-Zone, 248 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.

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

  • SPIP-Listes

    30 novembre 2006 – 1695 commentaires

    SPIP-listes permet la gestion et l’envoi de lettres d’information (newsletters) au moyen d’un courriel au format html ou texte. Il est possible d’envoyer des messages aux abonnés qui se sont formellement inscrits à une ou plusieurs lettres (...)

  • Table des Matières

    29 juillet 2007 – 55 commentaires

    Ajoute des ancres en fonction des intertitres et fournit une balise pour afficher la « table des matières » d’un article - autrement dit un « sommaire » -.

  • Forms&Tables 2.0

    31 décembre 2009 – 584 commentaires

    Gestion et administration de formulaires éditables. Ce plugin permet également la publication de sondages et enquètes, la collecte des réponses dans la base de données et le téléchargement au format csv. Ce plugin est une adaptation de la version pour (...)

  • Formidable, le générateur de formulaires

    23 janvier – 268 commentaires

    Un générateur de formulaires facilement configurable pour les non-informaticiens et facilement extensible pour les développeurs. Introduction L’objectif était de créer un plugin permettant de générer des formulaires. Historiquement, 2 plugins avaient (...)

  • Rainette, la méteo au quotidien

    31 juillet 2009 – 64 commentaires

    Ce plugin permet d’afficher les conditions et les prévisions météorologiques d’une ville donnée à partir du flux xml fourni par le site weather.com(r).