有没有办法根据IP地址获得用户的广泛位置? (我正在为笔记本用户构建Adobe Air桌面应用程序)
答案 0 :(得分:1)
刚试过http://www.netimpact.com/,就像你正在寻找它的广阔位置一样,它让我距离我的实际位置3.7英里,似乎相对简单易用,并且可以使用分割可以分割的分隔数据做出响应方法或者可以选择获取JSON编码的对象数据,这些数据可以使用JSON.parse()轻松读入Flex中的AS3对象。请务必阅读他们网站上的常见问题解答,以便更好地了解他们如何检索数据以及准确度通常如何,如果您需要更多,他们每天允许每位开发人员提出1000个请求,他们的定价从每月20美元开始
注意:Netimpact已关闭,他们将用户迁移到新的提供商KickFire。他们还扩大了他们的产品范围,不仅包括IP2GEO,还包括IP2Company,& Domain2IP。
修改强>
有关进一步探索此内容以及一些示例代码的更多信息。所以我用我的解决方案看到的唯一问题是获取WAN IP地址,我认为您需要使用某种服务器端脚本来反弹用户外部IP才能完全实现这一功能。我尝试使用NetworkInfo,但这将始终基于LAN IP地址进行报告,这对于geoip查找无效。所以这导致我使用PHP或其他一些服务器端脚本来获取IP。关于使用PHP获取IP的进一步讨论: 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(毫无疑问,如果他们收费,这项服务的免费版本可用)。