ip2location_ruby 8.5.0 → 8.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +16 -0
- data/VERSION +1 -1
- data/example.rb +8 -1
- data/ip2location_ruby.gemspec +6 -2
- data/lib/ip2location_ruby.rb +125 -1
- data/rb/data/IP2LOCATION-COUNTRY-INFORMATION-BASIC.CSV +250 -0
- data/rb/data/IP2LOCATION-ISO3166-2.CSV +3625 -0
- data/spec/ip2location_ruby_country_spec.rb +21 -0
- data/spec/ip2location_ruby_region_spec.rb +9 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b96ea3f6c523f75a72a00b44179ed6cfa7101bcd9adacc1edfb58b74df8885e
|
4
|
+
data.tar.gz: c3e223b2caf2b0b8e72d80586229db8addb576a8286878f3cda360194f411562
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f587dfa25da7d4437c4dfb6089e5806461acc6917b4201922ac4dcf492e8d78507e003a4229afd324aee99d92851711fb1ed3f6071aa30934df7fa5dd164621
|
7
|
+
data.tar.gz: 8b8522bee147a05b3c799deaf8fbc4eacf26bf8109a4ad00e7fde806bd3462bc3909917075041a61352bfabbe922e0eee77742dfbb0793e230c998fdf58b4505
|
data/README.md
CHANGED
@@ -83,6 +83,22 @@ Below is the description of the functions available in the **IpTools** class.
|
|
83
83
|
| compress_ipv6 | Compress a IPv6 to shorten the length. |
|
84
84
|
| expand_ipv6 | Expand a shorten IPv6 to full length. |
|
85
85
|
|
86
|
+
## Country
|
87
|
+
Below is the description of the functions available in the **Country** class.
|
88
|
+
|
89
|
+
| Function Name | Description |
|
90
|
+
|---|---|
|
91
|
+
| Constructor | Expect a IP2Location Country Information CSV file. This database is free for download at https://www.ip2location.com/free/country-information |
|
92
|
+
| get_country_info | Provide a ISO 3166 country code to get the country information in array. Will return a full list of countries information if country code not provided. Below is the information returned: <ul><li>country_code</li><li>country_alpha3_code</li><li>country_numeric_code</li><li>capital</li><li>country_demonym</li><li>total_area</li><li>population</li><li>idd_code</li><li>currency_code</li><li>currency_name</li><li>currency_symbol</li><li>lang_code</li><li>lang_name</li><li>cctld</li></ul> |
|
93
|
+
|
94
|
+
## Region
|
95
|
+
Below is the description of the functions available in the **Region** class.
|
96
|
+
|
97
|
+
| Function Name | Description |
|
98
|
+
|---|---|
|
99
|
+
| Constructor | Expect a IP2Location ISO 3166-2 Subdivision Code CSV file. This database is free for download at https://www.ip2location.com/free/iso3166-2 |
|
100
|
+
| get_region_code | Provide a ISO 3166 country code and the region name to get ISO 3166-2 subdivision code for the region. |
|
101
|
+
|
86
102
|
# Dependencies
|
87
103
|
This library requires IP2Location BIN data file to function. You may download the BIN data file at
|
88
104
|
* IP2Location LITE BIN Data (Free): https://lite.ip2location.com
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
8.
|
1
|
+
8.6.0
|
data/example.rb
CHANGED
@@ -29,7 +29,6 @@ puts record['elevation']
|
|
29
29
|
puts 'Usage Type: ' + record['usagetype']
|
30
30
|
puts 'Address Type: ' + record['addresstype']
|
31
31
|
puts 'Category: ' + record['category']
|
32
|
-
|
33
32
|
i2l.close()
|
34
33
|
|
35
34
|
# Web Service
|
@@ -52,3 +51,11 @@ puts iptool.ipv6_to_cidr('2002:0000:0000:1234:abcd:ffff:c0a8:0000', '2002:0000:0
|
|
52
51
|
puts iptool.cidr_to_ipv6('2002::1234:abcd:ffff:c0a8:101/64')
|
53
52
|
puts iptool.compress_ipv6('2002:0000:0000:1234:ffff:ffff:ffff:ffff')
|
54
53
|
puts iptool.expand_ipv6('2002::1234:ffff:ffff:ffff:ffff')
|
54
|
+
|
55
|
+
# Country Class
|
56
|
+
country = Ip2locationCountry.new('./data/IP2LOCATION-COUNTRY-INFORMATION-BASIC.CSV')
|
57
|
+
puts country.get_country_info('US')
|
58
|
+
|
59
|
+
# Region Class
|
60
|
+
region = Ip2locationRegion.new('./data/IP2LOCATION-ISO3166-2.CSV')
|
61
|
+
puts region.get_region_code('US', 'California')
|
data/ip2location_ruby.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "ip2location_ruby"
|
3
|
-
s.version = "8.
|
3
|
+
s.version = "8.6.0"
|
4
4
|
|
5
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
6
|
s.require_paths = ["lib"]
|
@@ -30,11 +30,15 @@ Gem::Specification.new do |s|
|
|
30
30
|
"lib/ip2location_ruby/ip2location_config.rb",
|
31
31
|
"lib/ip2location_ruby/ip2location_record.rb",
|
32
32
|
"spec/assets/IP2LOCATION-LITE-DB1.IPV6.BIN",
|
33
|
+
"spec/ip2location_ruby_country_spec.rb",
|
33
34
|
"spec/ip2location_ruby_database_spec.rb",
|
34
35
|
"spec/ip2location_ruby_iptools_spec.rb",
|
36
|
+
"spec/ip2location_ruby_region_spec.rb",
|
35
37
|
"spec/ip2location_ruby_webservice_spec.rb",
|
36
38
|
"spec/spec_helper.rb",
|
37
|
-
"rb/data/IP2LOCATION-LITE-DB1.IPV6.BIN"
|
39
|
+
"rb/data/IP2LOCATION-LITE-DB1.IPV6.BIN",
|
40
|
+
"rb/data/IP2LOCATION-COUNTRY-INFORMATION-BASIC.CSV",
|
41
|
+
"rb/data/IP2LOCATION-ISO3166-2.CSV"
|
38
42
|
]
|
39
43
|
s.homepage = "https://github.com/ip2location/ip2location-ruby"
|
40
44
|
s.licenses = ["MIT"]
|
data/lib/ip2location_ruby.rb
CHANGED
@@ -3,6 +3,7 @@ require 'bindata'
|
|
3
3
|
require 'ipaddr'
|
4
4
|
require 'net/http'
|
5
5
|
require 'json'
|
6
|
+
require 'csv'
|
6
7
|
require 'ip2location_ruby/ip2location_config'
|
7
8
|
require 'ip2location_ruby/database_config'
|
8
9
|
require 'ip2location_ruby/i2l_float_data'
|
@@ -13,7 +14,7 @@ require 'ip2location_ruby/ip2location_record'
|
|
13
14
|
class Ip2location
|
14
15
|
attr_accessor :record_class4, :record_class6, :v4, :file, :db_index, :count, :base_addr, :ipno, :count, :record, :database, :columns, :ip_version, :ipv4databasecount, :ipv4databaseaddr, :ipv4indexbaseaddr, :ipv6databasecount, :ipv6databaseaddr, :ipv6indexbaseaddr, :databaseyear, :databasemonth, :databaseday, :last_err_msg
|
15
16
|
|
16
|
-
VERSION = '8.
|
17
|
+
VERSION = '8.6.0'
|
17
18
|
FIELD_NOT_SUPPORTED = 'NOT SUPPORTED'
|
18
19
|
INVALID_IP_ADDRESS = 'INVALID IP ADDRESS'
|
19
20
|
INVALID_BIN_DATABASE = 'Incorrect IP2Location BIN file format. Please make sure that you are using the latest IP2Location BIN file.'
|
@@ -964,4 +965,127 @@ class Ip2locationIpTools
|
|
964
965
|
return
|
965
966
|
end
|
966
967
|
end
|
968
|
+
end
|
969
|
+
|
970
|
+
class Ip2locationCountry
|
971
|
+
attr_accessor :fields, :records
|
972
|
+
|
973
|
+
def initialize(csv)
|
974
|
+
if csv == ''
|
975
|
+
abort('The CSV file "' + csv + '" is not found.')
|
976
|
+
end
|
977
|
+
|
978
|
+
begin
|
979
|
+
csvfile = File.open(File.expand_path csv, 'rb')
|
980
|
+
rescue
|
981
|
+
abort('Error in opening ' + csv + '. No such CSV file in the /your_ip2location_ruby_library_path/rb/ folder.')
|
982
|
+
else
|
983
|
+
end
|
984
|
+
|
985
|
+
begin
|
986
|
+
CSV.parse(csvfile)
|
987
|
+
rescue
|
988
|
+
abort('Unable to read "' + csv + '".')
|
989
|
+
else
|
990
|
+
line = 1
|
991
|
+
self.records = Hash.new
|
992
|
+
CSV.foreach((csvfile)) do |data|
|
993
|
+
if line == 1
|
994
|
+
if data[0] != 'country_code'
|
995
|
+
abort('Invalid country information CSV file.')
|
996
|
+
end
|
997
|
+
self.fields = data
|
998
|
+
else
|
999
|
+
self.records[data[0]] = data
|
1000
|
+
end
|
1001
|
+
line = line + 1
|
1002
|
+
end
|
1003
|
+
end
|
1004
|
+
end
|
1005
|
+
|
1006
|
+
def get_country_info(country_code = nil)
|
1007
|
+
if self.records.empty?
|
1008
|
+
abort('No record available.')
|
1009
|
+
end
|
1010
|
+
|
1011
|
+
if country_code
|
1012
|
+
if (self.records[country_code]).nil?
|
1013
|
+
return []
|
1014
|
+
end
|
1015
|
+
results = Hash.new
|
1016
|
+
for i in 0..(self.fields.length()-1)
|
1017
|
+
results[self.fields[i]] = self.records[country_code][i]
|
1018
|
+
end
|
1019
|
+
return results
|
1020
|
+
end
|
1021
|
+
|
1022
|
+
results = []
|
1023
|
+
self.records.each do |key, value|
|
1024
|
+
data = Hash.new
|
1025
|
+
for i in 0..(self.fields.length()-1)
|
1026
|
+
data[self.fields[i]] = self.records[key][i]
|
1027
|
+
end
|
1028
|
+
results = results.append(data)
|
1029
|
+
end
|
1030
|
+
return results
|
1031
|
+
end
|
1032
|
+
end
|
1033
|
+
|
1034
|
+
class Ip2locationRegion
|
1035
|
+
attr_accessor :records
|
1036
|
+
|
1037
|
+
def initialize(csv)
|
1038
|
+
if csv == ''
|
1039
|
+
abort('The CSV file "' + csv + '" is not found.')
|
1040
|
+
end
|
1041
|
+
|
1042
|
+
begin
|
1043
|
+
csvfile = File.open(File.expand_path csv, 'rb')
|
1044
|
+
rescue
|
1045
|
+
abort('Error in opening ' + csv + '. No such CSV file in the /your_ip2location_ruby_library_path/rb/ folder.')
|
1046
|
+
else
|
1047
|
+
end
|
1048
|
+
|
1049
|
+
begin
|
1050
|
+
CSV.parse(csvfile)
|
1051
|
+
rescue
|
1052
|
+
abort('Unable to read "' + csv + '".')
|
1053
|
+
else
|
1054
|
+
line = 1
|
1055
|
+
self.records = Hash.new
|
1056
|
+
CSV.foreach((csvfile)) do |data|
|
1057
|
+
if line == 1
|
1058
|
+
if data[1] != 'subdivision_name'
|
1059
|
+
abort('Invalid region information CSV file.')
|
1060
|
+
end
|
1061
|
+
else
|
1062
|
+
temp_data = Hash.new
|
1063
|
+
temp_data['code'] = data[2]
|
1064
|
+
temp_data['name'] = data[1]
|
1065
|
+
if self.records[data[0]]
|
1066
|
+
self.records[data[0]].push temp_data
|
1067
|
+
else
|
1068
|
+
self.records[data[0]] = [temp_data]
|
1069
|
+
end
|
1070
|
+
end
|
1071
|
+
line = line + 1
|
1072
|
+
end
|
1073
|
+
end
|
1074
|
+
end
|
1075
|
+
|
1076
|
+
def get_region_code(country_code, region_name)
|
1077
|
+
if self.records.empty?
|
1078
|
+
abort('No record available.')
|
1079
|
+
end
|
1080
|
+
|
1081
|
+
if (self.records[country_code]).nil?
|
1082
|
+
return
|
1083
|
+
end
|
1084
|
+
|
1085
|
+
for i in 0..(self.records[country_code].length()-1)
|
1086
|
+
if region_name.upcase == self.records[country_code][i]["name"].upcase
|
1087
|
+
return self.records[country_code][i]["code"]
|
1088
|
+
end
|
1089
|
+
end
|
1090
|
+
end
|
967
1091
|
end
|
@@ -0,0 +1,250 @@
|
|
1
|
+
"country_code","capital","total_area"
|
2
|
+
"AD","Andorra la Vella","468"
|
3
|
+
"AE","Abu Dhabi","83600"
|
4
|
+
"AF","Kabul","652230"
|
5
|
+
"AG","Saint John's","442"
|
6
|
+
"AI","The Valley","91"
|
7
|
+
"AL","Tirana","28748"
|
8
|
+
"AM","Yerevan","29743"
|
9
|
+
"AO","Luanda","1246700"
|
10
|
+
"AQ","-","14000000"
|
11
|
+
"AR","Buenos Aires","2780400"
|
12
|
+
"AS","Pago Pago","199"
|
13
|
+
"AT","Vienna","83871"
|
14
|
+
"AU","Canberra","7741220"
|
15
|
+
"AW","Oranjestad","180"
|
16
|
+
"AX","Mariehamn","1552"
|
17
|
+
"AZ","Baku","86600"
|
18
|
+
"BA","Sarajevo","51197"
|
19
|
+
"BB","Bridgetown","430"
|
20
|
+
"BD","Dhaka","143998"
|
21
|
+
"BE","Brussels","30528"
|
22
|
+
"BF","Ouagadougou","274200"
|
23
|
+
"BG","Sofia","110879"
|
24
|
+
"BH","Manama","760"
|
25
|
+
"BI","Bujumbura","27830"
|
26
|
+
"BJ","Porto-Novo","112622"
|
27
|
+
"BL","Gustavia","21"
|
28
|
+
"BM","Hamilton","54"
|
29
|
+
"BN","Bandar Seri Begawan","5765"
|
30
|
+
"BO","Sucre","1098581"
|
31
|
+
"BQ","Kralendijk","328"
|
32
|
+
"BR","Brasilia","8514877"
|
33
|
+
"BS","Nassau","13880"
|
34
|
+
"BT","Thimphu","38394"
|
35
|
+
"BV","-","49"
|
36
|
+
"BW","Gaborone","581730"
|
37
|
+
"BY","Minsk","207600"
|
38
|
+
"BZ","Belmopan","22966"
|
39
|
+
"CA","Ottawa","9984670"
|
40
|
+
"CC","West Island","14"
|
41
|
+
"CD","Kinshasa","2344858"
|
42
|
+
"CF","Bangui","622984"
|
43
|
+
"CG","Brazzaville","342000"
|
44
|
+
"CH","Bern","41277"
|
45
|
+
"CI","Yamoussoukro","322463"
|
46
|
+
"CK","Avarua","236"
|
47
|
+
"CL","Santiago","756102"
|
48
|
+
"CM","Yaounde","475440"
|
49
|
+
"CN","Beijing","9596961"
|
50
|
+
"CO","Bogota","1138910"
|
51
|
+
"CR","San Jose","51100"
|
52
|
+
"CU","Havana","110860"
|
53
|
+
"CV","Praia","4033"
|
54
|
+
"CW","Willemstad","444"
|
55
|
+
"CX","Flying Fish Cove","135"
|
56
|
+
"CY","Nicosia","9251"
|
57
|
+
"CZ","Prague","78867"
|
58
|
+
"DE","Berlin","357022"
|
59
|
+
"DJ","Djibouti","23200"
|
60
|
+
"DK","Copenhagen","43094"
|
61
|
+
"DM","Roseau","751"
|
62
|
+
"DO","Santo Domingo","48670"
|
63
|
+
"DZ","Algiers","2381741"
|
64
|
+
"EC","Quito","283561"
|
65
|
+
"EE","Tallinn","45228"
|
66
|
+
"EG","Cairo","1001450"
|
67
|
+
"EH","Laayoune / El Aaiun","266000"
|
68
|
+
"ER","Asmara","117600"
|
69
|
+
"ES","Madrid","505370"
|
70
|
+
"ET","Addis Ababa","1104300"
|
71
|
+
"FI","Helsinki","338145"
|
72
|
+
"FJ","Suva","18274"
|
73
|
+
"FK","Stanley","12173"
|
74
|
+
"FM","Palikir","702"
|
75
|
+
"FO","Torshavn","1393"
|
76
|
+
"FR","Paris","643801"
|
77
|
+
"GA","Libreville","267667"
|
78
|
+
"GB","London","243610"
|
79
|
+
"GD","Saint George's","344"
|
80
|
+
"GE","Tbilisi","69700"
|
81
|
+
"GF","Cayenne","86504"
|
82
|
+
"GG","Saint Peter Port","78"
|
83
|
+
"GH","Accra","238533"
|
84
|
+
"GI","Gibraltar","6"
|
85
|
+
"GL","Nuuk","2166086"
|
86
|
+
"GM","Banjul","11295"
|
87
|
+
"GN","Conakry","245857"
|
88
|
+
"GP","Basse-terre","1630"
|
89
|
+
"GQ","Malabo","28051"
|
90
|
+
"GR","Athens","131957"
|
91
|
+
"GS","Grytviken","3903"
|
92
|
+
"GT","Guatemala City","108889"
|
93
|
+
"GU","Hagatna","544"
|
94
|
+
"GW","Bissau","36125"
|
95
|
+
"GY","Georgetown","214969"
|
96
|
+
"HK","-","1104"
|
97
|
+
"HM","-","412"
|
98
|
+
"HN","Tegucigalpa","112090"
|
99
|
+
"HR","Zagreb","56594"
|
100
|
+
"HT","Port-au-prince","27750"
|
101
|
+
"HU","Budapest","93028"
|
102
|
+
"ID","Jakarta","1904569"
|
103
|
+
"IE","Dublin","70273"
|
104
|
+
"IL","Jerusalem","20770"
|
105
|
+
"IM","Douglas","572"
|
106
|
+
"IN","New Delhi","3287263"
|
107
|
+
"IO","Diego Garcia","54400"
|
108
|
+
"IQ","Baghdad","438317"
|
109
|
+
"IR","Tehran","1648195"
|
110
|
+
"IS","Reykjavik","103000"
|
111
|
+
"IT","Roma","301340"
|
112
|
+
"JE","Saint Helier","116"
|
113
|
+
"JM","Kingston","10991"
|
114
|
+
"JO","Amman","89342"
|
115
|
+
"JP","Tokyo","377915"
|
116
|
+
"KE","Nairobi","580367"
|
117
|
+
"KG","Bishkek","199951"
|
118
|
+
"KH","Phnom Penh","181035"
|
119
|
+
"KI","Tarawa","811"
|
120
|
+
"KM","Moroni","2235"
|
121
|
+
"KN","Basseterre","261"
|
122
|
+
"KP","Pyongyang","120538"
|
123
|
+
"KR","Seoul","99720"
|
124
|
+
"KW","Kuwait","17818"
|
125
|
+
"KY","George Town","264"
|
126
|
+
"KZ","Astana","2724900"
|
127
|
+
"LA","Vientiane","236800"
|
128
|
+
"LB","Beirut","10400"
|
129
|
+
"LC","Castries","616"
|
130
|
+
"LI","Vaduz","160"
|
131
|
+
"LK","Sri Jayewardenepura Kotte","65610"
|
132
|
+
"LR","Monrovia","111369"
|
133
|
+
"LS","Maseru","30355"
|
134
|
+
"LT","Vilnius","65300"
|
135
|
+
"LU","Luxembourg","2586"
|
136
|
+
"LV","Riga","64589"
|
137
|
+
"LY","Tripoli","1759540"
|
138
|
+
"MA","Rabat","446550"
|
139
|
+
"MC","Monaco","2"
|
140
|
+
"MD","Chisinau","33851"
|
141
|
+
"ME","Podgorica","13812"
|
142
|
+
"MF","Marigot","54"
|
143
|
+
"MG","Antananarivo","587041"
|
144
|
+
"MH","Majuro","181"
|
145
|
+
"MK","Skopje","25713"
|
146
|
+
"ML","Bamako","1240192"
|
147
|
+
"MM","Pyinmana","676578"
|
148
|
+
"MN","Ulaanbaatar","1564116"
|
149
|
+
"MO","-","31.3"
|
150
|
+
"MP","Saipan","464"
|
151
|
+
"MQ","Fort-de-france","1128"
|
152
|
+
"MR","Nouakchott","1030700"
|
153
|
+
"MS","Plymouth","102"
|
154
|
+
"MT","Valletta","316"
|
155
|
+
"MU","Port Louis","2040"
|
156
|
+
"MV","Male","298"
|
157
|
+
"MW","Lilongwe","118484"
|
158
|
+
"MX","Mexico City","1964375"
|
159
|
+
"MY","Kuala Lumpur","329847"
|
160
|
+
"MZ","Maputo","799380"
|
161
|
+
"NA","Windhoek","824292"
|
162
|
+
"NC","Noumea","18575"
|
163
|
+
"NE","Niamey","1186408"
|
164
|
+
"NF","Kingston","36"
|
165
|
+
"NG","Abuja","923768"
|
166
|
+
"NI","Managua","130370"
|
167
|
+
"NL","Amsterdam","41543"
|
168
|
+
"NO","Oslo","323802"
|
169
|
+
"NP","Kathmandu","147181"
|
170
|
+
"NR","Yaren","21"
|
171
|
+
"NU","Alofi","260"
|
172
|
+
"NZ","Wellington","267710"
|
173
|
+
"OM","Muscat","309500"
|
174
|
+
"PA","Panama","75420"
|
175
|
+
"PE","Lima","1285216"
|
176
|
+
"PF","Papeete","4167"
|
177
|
+
"PG","Port Moresby","462840"
|
178
|
+
"PH","Manila","300000"
|
179
|
+
"PK","Islamabad","796095"
|
180
|
+
"PL","Warsaw","312685"
|
181
|
+
"PM","Saint-pierre","242"
|
182
|
+
"PN","Adamstown","47"
|
183
|
+
"PR","San Juan","13790"
|
184
|
+
"PS","-","5860"
|
185
|
+
"PT","Lisbon","92090"
|
186
|
+
"PW","Melekeok - Palau State Capital","459"
|
187
|
+
"PY","Asuncion","406752"
|
188
|
+
"QA","Doha","11586"
|
189
|
+
"RE","Saint-denis","2512"
|
190
|
+
"RO","Bucharest","238391"
|
191
|
+
"RS","Belgrade","77474"
|
192
|
+
"RU","Moscow","17098242"
|
193
|
+
"RW","Kigali","26338"
|
194
|
+
"SA","Riyadh","2149690"
|
195
|
+
"SB","Honiara","28896"
|
196
|
+
"SC","Victoria","455"
|
197
|
+
"SD","Khartoum","1861484"
|
198
|
+
"SE","Stockholm","450295"
|
199
|
+
"SG","Singapore","697"
|
200
|
+
"SH","Jamestown","122"
|
201
|
+
"SI","Ljubljana","20273"
|
202
|
+
"SJ","Longyearbyen","62045"
|
203
|
+
"SK","Bratislava","49035"
|
204
|
+
"SL","Freetown","71740"
|
205
|
+
"SM","San Marino","61"
|
206
|
+
"SN","Dakar","196722"
|
207
|
+
"SO","Mogadishu","637657"
|
208
|
+
"SR","Paramaribo","163820"
|
209
|
+
"SS","Juba","644329"
|
210
|
+
"ST","Sao Tome","964"
|
211
|
+
"SV","San Salvador","21041"
|
212
|
+
"SX","Philipsburg","34"
|
213
|
+
"SY","Damascus","185180"
|
214
|
+
"SZ","Mbabane","17364"
|
215
|
+
"TC","Cockburn Town","948"
|
216
|
+
"TD","N'djamena","1284000"
|
217
|
+
"TF","Port-aux-francais","439781"
|
218
|
+
"TG","Lome","56785"
|
219
|
+
"TH","Bangkok","513120"
|
220
|
+
"TJ","Dushanbe","143100"
|
221
|
+
"TK","-","12"
|
222
|
+
"TL","Dili","14874"
|
223
|
+
"TM","Ashgabat","488100"
|
224
|
+
"TN","Tunis","163610"
|
225
|
+
"TO","Nuku'alofa","747"
|
226
|
+
"TR","Ankara","783562"
|
227
|
+
"TT","Port of Spain","5128"
|
228
|
+
"TV","Funafuti","26"
|
229
|
+
"TW","Taipei","35980"
|
230
|
+
"TZ","Dodoma","947300"
|
231
|
+
"UA","Kiev","603550"
|
232
|
+
"UG","Kampala","241038"
|
233
|
+
"UM","-","34.2"
|
234
|
+
"US","Washington, D.C.","9826675"
|
235
|
+
"UY","Montevideo","176215"
|
236
|
+
"UZ","Tashkent","447400"
|
237
|
+
"VA","Vatican City","0.44"
|
238
|
+
"VC","Kingstown","389"
|
239
|
+
"VE","Caracas","912050"
|
240
|
+
"VG","Road Town","151"
|
241
|
+
"VI","Charlotte Amalie","1910"
|
242
|
+
"VN","Ha Noi","331210"
|
243
|
+
"VU","Port-vila","12189"
|
244
|
+
"WF","Mata'utu","142"
|
245
|
+
"WS","Apia","2831"
|
246
|
+
"YE","Sanaa","527968"
|
247
|
+
"YT","Mamoudzou","374"
|
248
|
+
"ZA","Cape Town","1219090"
|
249
|
+
"ZM","Lusaka","752618"
|
250
|
+
"ZW","Harare","390757"
|