Adob​​e Air - IP到位

问题描述:

有没有办法根据IP地址获得用户的广泛位置? (我正在为笔记本用户构建一个Adobe Air桌面应用程序)Adob​​e Air - IP到位

+0

我打算在这个问题上进行一些探索,但是我相信因为您将在桌面应用程序的上下文中运行,您可能需要依靠外部服务来提供信息。看起来,AIR地理位置API仅适用于具有地理位置传感器的设备(基于GPS或无线接入点)。在HTML5上下文中,您可以使用那里的geoloc API和ExternalInterface ...这是一个免费的有限使用服务http://www.geoio.com/ – shaunhusain 2012-03-19 18:50:24

刚刚尝试过http://www.netimpact.com/,就像您正在寻找它的广泛位置一样,它使我距离我的实际位置3.7英里,看起来相对简单易用,并且可以使用可以使用split方法拆分的分隔数据进行响应,或者可以选择获取JSON编码的对象数据,这些数据可以使用JSON.parse()方便地读入Flex中的AS3对象。请务必阅读其网站上的常见问题解答,以便更好地了解他们如何检索数据以及准确度如何,他们每天为每位开发人员提供1000个请求,如果您需要更多,他们的定价从每月20美元开始。

注意:Netimpact已关闭,他们将用户迁移到其新提供商KickFire。他们还扩大了他们的产品范围,不仅包括IP2GEO,还包括IP2Company,& Domain2IP。

编辑:上探索这个进一步和一些示例代码

的位更多的信息。因此,我看到的唯一问题是使用我的解决方案获取WAN IP地址,我认为您需要使用某种服务器端脚本来反弹用户的外部IP,以便完全实现此功能。我试图使用NetworkInfo,但是这总是基于局域网IP地址进行报告,这对于geoip查找不起作用。所以这导致我使用PHP或其他服务器端脚本来获取IP。在这里获取IP使用PHP进一步讨论: http://www.phpbuilder.com/board/showthread.php?t=10327697

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         creationComplete="windowedapplication1_creationCompleteHandler(event)"> 

    <fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 
      import mx.rpc.events.ResultEvent; 
      import mx.rpc.http.HTTPService; 

      private const MY_API_KEY:String = "PUT YOUR OWN KEY HERE"; 

      [Bindable] 
      private var ipLookupResult:Object; 

      protected function button1_clickHandler(event:MouseEvent):void 
      { 
       var httpService:HTTPService = new HTTPService(); 
       httpService.url = "http://api.geoio.com/q.php?key="+MY_API_KEY+"&qt=geoip&d=json&q=PUT_YOUR_IP_HERE"; 
       httpService.addEventListener(ResultEvent.RESULT, lookupResultHandler); 
       httpService.send(); 
      } 
      private function lookupResultHandler(event:ResultEvent):void 
      { 
       ipLookupResult = JSON.parse(event.result as String); 
      } 

      protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void 
      { 
       for each(var ni:NetworkInterface in NetworkInfo.networkInfo.findInterfaces()) 
       { 
        var addresses:Vector.<InterfaceAddress> = ni.addresses; 
        var userIp:String = addresses[0].address; 
        trace(userIp); 
       } 
      } 

     ]]> 
    </fx:Script> 

    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <s:layout> 
     <s:VerticalLayout/> 
    </s:layout> 
    <s:Button click="button1_clickHandler(event)" label="Look me up"/> 
    <s:Form> 
     <s:FormItem label="City"> 
      <s:Label text="{ipLookupResult[0][0]}"/> 
     </s:FormItem> 
     <s:FormItem label="State"> 
      <s:Label text="{ipLookupResult[0][1]}"/> 
     </s:FormItem> 
     <s:FormItem label="Country"> 
      <s:Label text="{ipLookupResult[0][2]}"/> 
     </s:FormItem> 
     <s:FormItem label="ISP"> 
      <s:Label text="{ipLookupResult[0][3]}"/> 
     </s:FormItem> 
     <s:FormItem label="Latitude"> 
      <s:Label text="{ipLookupResult[0][4]}"/> 
     </s:FormItem> 
     <s:FormItem label="Longitude"> 
      <s:Label text="{ipLookupResult[0][5]}"/> 
     </s:FormItem> 
     <s:FormItem label="Country Code"> 
      <s:Label text="{ipLookupResult[0][6]}"/> 
     </s:FormItem> 
    </s:Form> 
</s:WindowedApplication> 

如果您没有访问编写自己的服务器端脚本,你也可以看看到外部服务获得的信息,我相信whatismyip.com提供这个,但不知道授权/费用,我知道他们特别不希望你使用主页来刮掉IP(毫无疑问,这些服务的免费版本可用,如果他们收费)。

+0

感谢您的回答和示例。你有MaxMind的一些经验吗? http://www.maxmind.com/app/geolitecity - 如果我将其托管在我自己的服务器上,那是免费的吗?这样我可以查找IP并获取用户位置,对吗? – Tom 2012-03-20 14:34:50

+0

除非您确信每天会超过1000次查询,否则geoip是免费的,尽管基于IP的查找似乎都能达到相同的目的,只有不同之处似乎是您可以使用它们自己托管IP数据库提供并因此进行一次呼叫,其中用户外部/ WAN IP被解析,然后用于查找,但时间差可能可以忽略不计,并且您将节省大量时间而不直接处理数据库(获取更新)并将其留给第三方服务。 – shaunhusain 2012-03-20 15:36:59

+0

我个人可能会试着去写简单的服务器端脚本来返回客户端IP,然后打电话给geoip进行反向查找,但是如果你想做额外的工作来设置DB并将它们提供的代码对象连接到数据库,这也是一个可行的解决方案。从长远来看,它的价格似乎更高http://www.maxmind.com/app/builder – shaunhusain 2012-03-20 15:40:41