2010-12-01 2 views

ответ

5

Вот простой пример

rule locations is active { 
    select using ".*" setting() 
    pre { 
     whereareyou = location:region(); 
     msg = << 
     #{whereareyou}  
     >>; 
    } 
    notify("I think you live in", msg) with sticky = true; 
} 

А вот Документы. http://docs.kynetx.com/docs/Location

Проблема, которую вы обнаружите, заключается в том, что иногда ip фактически не представляет собой реальное местоположение пользователя, поскольку пользователь может использовать прокси-сервер. Также с большинством интернет-провайдеров ip зарегистрирован в местоположении и концентратор ISP, а не прямое место, где IP используется в любой момент.

С появлением html 5 и местоположения apis в браузере в будущем может оказаться возможным получить более точное местоположение, но это еще не реализовано в KRL.

+0

+1, Это интересно. Благодаря! – Alex 2010-12-01 17:11:14

2

Расположение браузера HTM5 доступно сейчас, но для его совершения требуется некоторый javascript. Это немного старое приложение, в котором используются API-интерфейсы браузера. Вероятно, это может быть обновлено, чтобы не использовать форму, но вот для справки:

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/>"); 
    } 
} 
Смежные вопросы