2010-01-24 61 views
1

我正嘗試在rails應用程序上使用geoip的web服務。他們不提供任何ruby演示,但這是他們爲PHP提供的。我想知道如果有人知道如何將其轉換爲在軌道上的紅寶石工作?我只需要從數據中獲得城市和地區。更多的例子可以在他們的網站上找到在將代碼從PHP轉換爲Ruby on Rails

$query = "http://geoip3.maxmind.com/b?l=" . $license_key . "&i=" . $ipaddress; 
$url = parse_url($query); 
$host = $url["host"]; 
$path = $url["path"] . "?" . $url["query"]; 
$timeout = 1; 
$fp = fsockopen ($host, 80, $errno, $errstr, $timeout) 
or die('Can not open connection to server.'); 
if ($fp) { 
    fputs ($fp, "GET $path HTTP/1.0\nHost: " . $host . "\n\n"); 
    while (!feof($fp)) { 
    $buf .= fgets($fp, 128); 
    } 
    $lines = split("\n", $buf); 
    $data = $lines[count($lines)-1]; 
    fclose($fp); 
} else { 
    # enter error handing code here 
} 

echo $data; 
$geo = explode(",",$data); 
$country = $geo[0]; 
$state = $geo[1]; 
$city = $geo[2]; 
$lat = $geo[3]; 
$lon = $geo[4]; 

回答

1

我沒有geoip的許可證密鑰,所以不能完全測試,但這應該工作:

require 'net/http' 

url = 'http://geoip3.maxmind.com/b?l=%s&i=%s' % [license_key, ip_address] 
res = Net::HTTP.get_response(URI.parse(url)) 

lines = res.body.split("\n") 

geo = lines[-1].split(',') 

country = geo[0] 
state = geo[1] 
city = geo[2] 
lat = geo[3] 
lon = geo[4] 
+0

已經編碼的PHP的公平位和零紅寶石,我得說它看起來在紅寶石裏更好些。 – 2010-01-24 23:17:06

+0

@Kenny:再次,你的php例子可以使用'file()'(參見:http://php.net/manual/en/function.file.php)編碼得更簡單。 – 2010-01-25 00:38:53