0

我想知道一种方法可以获取所有访问网站(我的网站)的访问者的国家名称。我已经看到maxmind.com了,因为我是初学者,所以设置它非常复杂。希望能得到一些好的答案。我已经在这个网站上尝试了很多东西,但无法提出解决方案。

GeoServiceReference.GeocodeServiceClient client = new GeoServiceReference.GeocodeServiceClient();

var countries = new List<string>();

for (double lat = 0; lat < 360; lat+=0.1)
    for(double lon = 0; lon < 360; lon+=0.1)
    {
        var result = client.ReverseGeocode(new GeoServiceReference.ReverseGeocodeRequest
        {
            Location = new GeoServiceReference.Location
            {
                Latitude = lat,
                Longitude = lon
            }
        });

        if (!countries.Contains(result.Results.First().Address.CountryRegion))
        {
            Console.WriteLine(result.Results.First().Address.CountryRegion);
            countries.Add(result.Results.First().Address.CountryRegion);
        }
    }
4

2 回答 2

2

作为 Maxmind 的替代方案,freegeoip.net提供基于 Maxmind 遗留数据库的免费 REST 服务。它非常易于使用 - 您只需向以下格式的 URL 发出 HTTP GET 请求:

http://freegeoip.net/json/{ip_or_hostname}

您可以使用像RestSharp这样的库- 再次,非常易于使用 - 发出此请求并解析结果。

这是一个简单的示例,应该可以为您指明正确的方向:

public Geolocation GetGeolocationData(string ipAddress)
{
    var client = new RestClient("http://freegeoip.net/");

    var request = new RestRequest("json/{ip}");
    request.AddUrlSegment("ip", ipAddress);

    var response = client.Execute<Geolocation>(request);
    return response.Data;
}

在这里,我假设这Geolocation是一个类,它的某些属性与 REST 服务返回的 JSON 结果中的名称相匹配,例如:

public class Geolocation
{
    public string CountryName { get; set; }
    ...
}
于 2014-08-13T18:13:16.870 回答
0

最方便的工具是 API,或者如果您想托管数据并在服务器上执行查找,那么您可以考虑获取数据库的副本。 http://www.ipinfodb.com

于 2014-09-11T09:33:54.227 回答