Практика
Для определение местоположения по IP с сервиса IpGeoBase реализуем:
Вот так вот незатейливо выглядит класс Location:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
public class Location {
private String country = "";
private String city = "";
private String address = "";
private double latitude;
private double longitude;
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
}
|
Так же рекомендуем почитать: Преобразование числа в его текстовое представление на JavaScript
Метод для получения локейшена:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
public Location getIpGeoBaseDataByIp(String ip) {
Location loc = new Location();
try {
JAXBContext jaxbContext = JAXBContext
.newInstance(IpGeoBaseLocation.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
IpGeoBaseLocation ipGeoBaseLocation = (IpGeoBaseLocation) jaxbUnmarshaller
.unmarshal(new ByteArrayInputStream(makeGetRequest(
"http://ipgeobase.ru:7020/geo?ip=" + ip).getBytes()));
if (ipGeoBaseLocation.getIp().getCity() != null) {
loc.setCity(ipGeoBaseLocation.getIp().getCity());
}
if (ipGeoBaseLocation.getIp().getDistrict() != null) {
loc.setCountry(ipGeoBaseLocation.getIp().getCountry());
}
if (ipGeoBaseLocation.getIp().getRegion() != null) {
loc.setAddress(ipGeoBaseLocation.getIp().getRegion());
}
if (ipGeoBaseLocation.getIp().getLat() != 0) {
loc.setLatitude(ipGeoBaseLocation.getIp().getLat());
}
if (ipGeoBaseLocation.getIp().getLng() != 0) {
loc.setLongitude(ipGeoBaseLocation.getIp().getLng());
}
return loc;
} catch (Exception e) {
e.printStackTrace();
}
return loc;
}
|
Создаем экземпляр объекта типа Location, который в последствии заполним данными. Получаем экземпляр объекта типа JAXBContext с помощью вызова статического метода newInstance() в него мы должны передать класс с которым будет происходить “связывание” XML ответа, создаем демаршалер и вызываем его метод unmarshal() в который мы передаем поток байтов на полученный XML документ – в результате после приведения типа к IpGeoBaseLocation используем его экземпляр ipGeoBaseLocation для заполнения нашего локейшена и возвращаем его.
Метод с помощью которого выполняется Get запрос:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
private static String makeGetRequest(String URL) throws IOException {
URL url = new URL(URL);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
StringBuffer response = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(
connection.getInputStream(), "windows-1251"));
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
return response.toString();
}
|
Класс IpGeoBaseLocation:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "ip-answer")
public class IpGeoBaseLocation {
private IpGeoBaseIP ip;
public IpGeoBaseIP getIp() {
return ip;
}
@XmlElement
public void setIp(IpGeoBaseIP ip) {
this.ip = ip;
}
public static class IpGeoBaseIP {
private String inetnum;
private String country;
private String city;
private String region;
private String district;
private double lat;
private double lng;
public String getInetnum() {
return inetnum;
}
@XmlElement
public void setInetnum(String inetnum) {
this.inetnum = inetnum;
}
public String getCountry() {
return country;
}
@XmlElement
public void setCountry(String country) {
this.country = country;
}
public String getCity() {
return city;
}
@XmlElement
public void setCity(String city) {
this.city = city;
}
public String getRegion() {
return region;
}
@XmlElement
public void setRegion(String region) {
this.region = region;
}
public String getDistrict() {
return district;
}
@XmlElement
public void setDistrict(String district) {
this.district = district;
}
public double getLat() {
return lat;
}
@XmlElement
public void setLat(double lat) {
this.lat = lat;
}
public double getLng() {
return lng;
}
@XmlElement
public void setLng(double lng) {
this.lng = lng;
}
}
}
|
Комментарии
Оставить комментарий
Разработка программного обеспечения и информационных систем
Термины: Разработка программного обеспечения и информационных систем