Adobe Air - IP到位
刚刚尝试过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(毫无疑问,这些服务的免费版本可用,如果他们收费)。
感谢您的回答和示例。你有MaxMind的一些经验吗? http://www.maxmind.com/app/geolitecity - 如果我将其托管在我自己的服务器上,那是免费的吗?这样我可以查找IP并获取用户位置,对吗? – Tom 2012-03-20 14:34:50
除非您确信每天会超过1000次查询,否则geoip是免费的,尽管基于IP的查找似乎都能达到相同的目的,只有不同之处似乎是您可以使用它们自己托管IP数据库提供并因此进行一次呼叫,其中用户外部/ WAN IP被解析,然后用于查找,但时间差可能可以忽略不计,并且您将节省大量时间而不直接处理数据库(获取更新)并将其留给第三方服务。 – shaunhusain 2012-03-20 15:36:59
我个人可能会试着去写简单的服务器端脚本来返回客户端IP,然后打电话给geoip进行反向查找,但是如果你想做额外的工作来设置DB并将它们提供的代码对象连接到数据库,这也是一个可行的解决方案。从长远来看,它的价格似乎更高http://www.maxmind.com/app/builder – shaunhusain 2012-03-20 15:40:41
我打算在这个问题上进行一些探索,但是我相信因为您将在桌面应用程序的上下文中运行,您可能需要依靠外部服务来提供信息。看起来,AIR地理位置API仅适用于具有地理位置传感器的设备(基于GPS或无线接入点)。在HTML5上下文中,您可以使用那里的geoloc API和ExternalInterface ...这是一个免费的有限使用服务http://www.geoio.com/ – shaunhusain 2012-03-19 18:50:24