`

Rails 如何实现通过登录IP确定城市功能

阅读更多


对于Rails而言,主流方式应该是使用google库的插件geoip
github地址如下

  require 'geoip'
  GeoIP.new('GeoLiteCity.dat').country('www.atlantis.sk')
  => ["www.atlantis.sk", "217.67.18.26", "SK", "SVK", "Slovakia", "EU", "02", "Bratislava", "", 48.15, 17.1167, nil, nil, "Europe/Bratislava"]

  Returned values are the requested hostname, the IP address as a dotted quad,
  Maxmind's country code, the ISO3166-1 country code, the ISO3166-2 country code,
  the ISO3166 country name, and the continent code.

  GeoIP.new('GeoCity.dat').city('github.com')
  => ["github.com", "207.97.227.239", "US", "USA", "United States", "NA", "CA", "San Francisco", "94110", 37.7484, -122.4156, 807, 415, "America/Los_Angeles"]

  Returned values are the country values followed by region or state name,
  city name, postal_code/zipcode, latitude, longitude, USA DMA code, USA area code,
  timezone name. Sorry it's not a Hash... historical.

  GeoIP.new('GeoIPASNum.dat').asn("www.fsb.ru")
  => ["AS8342", "RTComm.RU Autonomous System"]


另外一个 geo_ip

使用如下:
  GeoIp.geolocation(ip_address)


  # 209.85.227.104 = google.be (US)
  GeoIp.geolocation('209.85.227.104')
#returns:

  {
    :status           =>"OK",
    :ip               =>"209.85.227.104"
    :country_code     =>"US",
    :country_name     =>"United States",
    :region_code      =>"06",
    :region_name      =>"California",
    :city             =>"Mountain View",
    :zip_postal_code  =>"94043",
    :latitude         =>"37.4192",
    :longitude        =>"-122.057"
  }


geokit是一个关于地理的工具,比如根据经纬度确定城市和距离之类

#Find near latitude and longitude:
Store.find(:all, :origin =>[37.792,-122.393], :within=>10)
#Find near an address:
Store.find(:all, :origin=>'100 Spear st, San Francisco, CA', :within=>10)
#Order by distance from the center of a zipcode:
Store.find(:all, :origin=>'94117', :within=>10,
           :order=>'distance asc')
#Combine distance conditions with regular conditions
Store.find(:all, :origin=>'94117', :within=>10, 
           :conditions=>{:store_type=>'CAFE'})



一个是通过网络的IP查询API,这个办法IP库更新比较快。通用的库有几个比如google。
xml处理页面完全可以通过nokogiri等专门处理工具代替

提供IP地址查询的API很多比如网易
http://www.youdao.com/smartresult-xml/search.s?type=ip&q=IP地址
require 'net/http'
require 'rexml/document'
include REXML

class MapsController < ApplicationController
	def index
		@location = locateIp()
        end

	def locateIp
		#ip = "123.123.123.123";
		ip = request.remote_ip
		ips = ip.to_s
		url = "http://ipinfodb.com/ip_query.php?ip="+ips+"&timezone=false"

		xml_data = Net::HTTP.get_response(URI.parse(url)).body

                xmldoc = REXML::Document.new(xml_data)

		# Now get the root element
		root = xmldoc.root
		city = ""
		regionName = ""
		countryName = ""

		# This will take country name...
		xmldoc.elements.each("Response/CountryName") {
		|e| countryName << e.text
	         }

		# Now get city name...
		xmldoc.elements.each("Response/City") {
   		|e| city << e.text
	        }

		# This will take regionName...
		xmldoc.elements.each("Response/RegionName") {
   		|e| regionName << e.text
	        }

     	       ipLocation = city +", "+regionName+", "+countryName

               return ipLocation

        end  #end of method locateIp

end
分享到:
评论
2 楼 fireflyman 2010-11-04  
1 楼 qichunren 2010-08-25  
支持! 

相关推荐

    Rails实现的简历系统

    在Rails中,可以使用第三方库如`gem 'recaptcha'`来集成谷歌的reCAPTCHA服务,或者创建自定义的验证码生成器,通过随机字符或图片实现。 4. **数据查询**:Rails的ActiveRecord层提供了强大的查询接口,如`where`、...

    rails实现验证码实例

    通过以上步骤,你可以在Rails应用中实现一个基本的验证码功能。如果你有“type-windows.xml”这样的配置文件,可能需要根据文件内容调整验证码的字体设置,以适应Windows环境下的显示效果。对于初学者来说,阅读和...

    Rails 101 入门电子书

    ### Rails 101 入门电子书知识点详解 #### 一、简介 ...通过以上内容的学习,初学者可以全面掌握Ruby on Rails的基础知识,包括环境搭建、基本操作、高级特性等,为后续更深入的学习打下坚实的基础。

    web开发之rails最新调试通过购物车代码

    本压缩包中的"web开发之rails最新调试通过购物车代码"是关于使用Rails进行Web应用开发的一个实例,特别是针对购物车功能的实现。 购物车是电商网站的核心部分,它允许用户选择商品并保存这些选择以便后续购买。在...

    Rails101_by_rails4.0

    作者特别提到了“CRUD懶人大法Scaffold”,它是一种通过Rails自动生成代码的方式来快速搭建基本的CRUD操作,这大大简化了开发流程,使得开发者可以将更多的精力放在业务逻辑的实现上。 此外,书中还介绍了一些Rails...

    Rails项目源代码

    这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    Rails 101S

    ### Rails 101S: 初学者必备的Ruby on Rails 宝典 #### Introduction: 深入了解Ruby on Rails 《Rails 101S》是一本为Ruby on Rails初学者准备的手册,旨在帮助新手快速入门并掌握基本的开发技能。本手册将从最...

    RailsSpace

    本书通过构建一个面向Ruby社区的社交网络平台——RailsSpace,来帮助读者掌握Ruby on Rails的核心概念和技术。本书不仅适合初学者,也适合有一定基础并希望深入了解Rails框架的开发者。 #### 二、基础知识篇 #####...

    component base rails applications

    - 引擎挂载(Engine Mounting)是指将引擎组件整合进主Rails应用中的过程,通过定义挂载点来实现。 3. 组件化与Rails基础: - 本书假设读者已经掌握Ruby和Rails基础知识,包括Rails 2等基础知识,不包含这些内容...

    rails2-sample

    这一章节将介绍如何在Rails应用中集成Ajax技术,实现更加交互式的用户体验。同时,还将探讨Web 2.0的概念,包括社会化网络、用户生成内容和实时数据流等。 #### 8. Protective Measures(防护措施) 网络安全是...

    使用Aptana+Rails开发Rails Web应用(中文)

    在开发Web应用时,Ruby on Rails(简称Rails)框架因其高效、...通过深入学习和实践,你将能够利用这个强大的工具构建出功能强大的Web应用程序。无论是初学者还是经验丰富的开发者,Aptana+Rails都会是一个理想的选择。

    深入解析Rails测试策略:单元测试与功能测试的区别

    单元测试和功能测试是Rails中两种主要的测试类型,它们在目的、范围和实现方式上有所不同。本文将详细探讨Rails中单元测试和功能测试的区别,并提供实际代码示例。 单元测试和功能测试是Rails测试策略的两个重要组成...

    中文版rails教程

    在Ruby on Rails中,开发者可以快速构建功能丰富的动态网站,因为它提供了大量的内置功能和库,如数据库连接、ORM(对象关系映射)系统ActiveRecord、模板引擎ActionView以及路由系统ActionController等。...

    Struts2和Rails的国际化实现

    Struts2是Java平台上的一款MVC框架,它的国际化功能主要通过`ResourceBundle`和`ActionSupport`类来实现。以下是Struts2国际化的基本步骤: 1. **创建资源文件**:首先,你需要创建一个或多个`.properties`文件,...

Global site tag (gtag.js) - Google Analytics