Как я могу получить местоположение пользователя в правиле KRL? - PullRequest
2 голосов
/ 01 декабря 2010

Как получить местоположение пользователя в правиле KRL?

  • Какой метод?
  • В чем преимущество или недостаток использования этого метода?

Ответы [ 2 ]

5 голосов
/ 01 декабря 2010

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

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 регистрируется в местоположении и в хабе интернет-провайдера, а не в месте, где в данный момент используется IP.

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

2 голосов
/ 02 декабря 2010

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/>");
  }
}
...