public void GetIpStackTest() { var ipStack = IpStack.FromJson(IpStackService.GetIpStack("178.235.146.51").Result); Assert.AreEqual("Gdynia", ipStack.City); Assert.AreEqual("Poland", ipStack.CountryName); Assert.IsTrue(54.483871459960938 == ipStack.Latitude); Assert.IsTrue(18.464729309082031 == ipStack.Longitude); Assert.AreEqual("178.235.146.51", ipStack.Ip); }
public static ResultCode AddGeolocation(string ipOrUrl) { if (GeolocationDao.GetGeolocationByIpOrHost(ipOrUrl) != null) { return(ResultCode.RecordAlreadyExists); } string response = null; try { response = IpStackService.GetIpStack(ipOrUrl).Result; } catch (Exception e) { log.Error("Failed to get geolocation from IPStack", e); return(ResultCode.ServiceUnavailable); } if (response == null) { return(ResultCode.ServiceUnavailable); } IpStack ipStack = null; try { ipStack = IpStack.FromJson(response); } catch (Exception e) { log.Error("Failed to parse json from IPStack", e); return(ResultCode.UnexpectedError); } if (ipStack.Latitude == null || ipStack.Longitude == null) { return(ResultCode.UrlNotFound); } var geolocation = IpStackService.GetGeolocationFromIpStack(ipStack, ipOrUrl); try { if (GeolocationDao.Insert(geolocation)) { return(ResultCode.OK); } } catch (Exception) { return(ResultCode.DatabaseError); } return(ResultCode.UnexpectedError); }
internal static Geolocation GetGeolocationFromIpStack(IpStack ipStack, string ipOrUrl) { if (ipStack == null) { return(null); } return(new Geolocation { Ip = ipStack.Ip, Host = ipStack.Ip == ipOrUrl ? null : ipOrUrl, Latitude = ipStack.Latitude ?? 0, Longitude = ipStack.Longitude ?? 0, Location = $"{ipStack.CountryName}, {ipStack.City}" }); }