Comment puis-je obtenir l'emplacement d'un utilisateur dans une règle KRL?Comment puis-je obtenir l'emplacement d'un utilisateur dans une règle KRL?
- Quelle est la méthode?
- Quel est l'avantage ou l'inconvénient de l'utilisation de cette méthode?
Comment puis-je obtenir l'emplacement d'un utilisateur dans une règle KRL?Comment puis-je obtenir l'emplacement d'un utilisateur dans une règle KRL?
Voici un exemple simple
rule locations is active {
select using ".*" setting()
pre {
whereareyou = location:region();
msg = <<
#{whereareyou}
>>;
}
notify("I think you live in", msg) with sticky = true;
}
Et voici les docs. Le problème que vous trouverez est que, parfois, l'adresse IP ne représente pas vraiment l'emplacement réel de l'utilisateur, car l'utilisateur pourrait utiliser un proxy. Aussi avec la plupart des FAI, l'IP est enregistrée à un emplacement et le concentrateur du FAI n'est pas l'emplacement direct de l'adresse IP utilisée à un moment donné. Avec l'avènement du html 5 et de l'emplacement apis dans le navigateur, il est possible que dans le futur, il soit possible d'obtenir une localisation plus précise mais cela n'a pas encore été implémenté dans KRL.
HTM5 L'emplacement du navigateur est disponible maintenant, mais nécessite un peu de javascript pour que cela se produise. Ceci est une application légèrement ancienne qui utilise les API de localisation du navigateur. Cela pourrait probablement être mis à jour pour ne pas utiliser un formulaire, mais ici il est pour référence:
ruleset a8x47 {
meta {
name "WikiNearMe"
description <<
Shows Wikipedia content near the user.
>>
author "TubTeam"
logging off
}
dispatch {
domain "wikipedia.org"
}
global {
datasource placearticles:JSON <- "http://ws.geonames.org/findNearbyWikipediaJSON";
}
rule getlocation is active {
select when pageview "/wiki/" setting()
pre {
form = <<
<div id="my_div">
<form id="nearmeform" onsubmit="return false" style="display:none;">
<input type="text" name="lat" id="nearmelat"/>
<input type="text" name="lon" id="nearmelon"/>
<input type="submit" value="Submit" />
</form>
<div id="nearmelinks" style="text-align:left;">
<h2>Nearby Links</h2>
</div>
</div>
>>;
}
// notify("Hello World", "This is a sample rule.");
emit <<
navigator.geolocation.getCurrentPosition(function(position){
$K("#nearmelat").val(position.coords.latitude);
$K("#nearmelon").val(position.coords.longitude);
$K("#nearmeform").submit();
//alert("lat: " + position.coords.latitude + " lon: " + position.coords.longitude);
});
>>
{
append("#siteNotice", form);
watch("#nearmeform", "submit");
}
}
rule shownearby is active {
select when web submit "#nearmeform"
foreach datasource:placearticles({"lat":page:param("lat"), "lng":page:param("lon"), "style":"full", "formatted":"true"}).pick("$..geonames") setting (item)
pre {
title = item.pick("$..title");
link = item.pick("$..wikipediaUrl");
}
append("#nearmelinks", "<a href='http://#{link}'>#{title}</a><br/>");
}
}
+1, Ceci est intéressant. Merci! – Alex