Конвертировать код из PHP в Ruby on Rails - PullRequest
1 голос
/ 25 января 2010

Я пытаюсь использовать веб-сервис geoip для приложения ruby ​​on rails. Они не дают никаких рубиновых демо, но это то, что они дают для PHP. Мне было интересно, если кто-нибудь знает, как преобразовать это для работы на рубине на рельсах? Мне нужны только город и регион из данных. Больше примеров можно найти на их сайте по адресу

$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 Ответ

1 голос
/ 25 января 2010

У меня нет лицензионного ключа 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]
...