ip2kml 1.0.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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/ip2kml +9 -0
  3. data/lib/ip2kml.rb +72 -0
  4. metadata +47 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 270f1a7810e05e40b194421769fc51d6583c87e7
4
+ data.tar.gz: 6d3f700c91813db9c565786881a3de250b824d06
5
+ SHA512:
6
+ metadata.gz: e97e474e680767f40704d8e06280766b42f078b4f5cddac35fbf2318925cb5ab82959cc131cc70c44a8614b27758dcf75c35ddc4cafe762401e3863cb023e524
7
+ data.tar.gz: 6cf63e8035f2b631df4235c5341d66c96a895600d6ebe877053f60f0828f7378c1d69ac33290644c03f0b26f50731cae1a0e5b812b24a4540f0f3970ca1a2a44
data/bin/ip2kml ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ip2kml'
4
+
5
+ i2 = Ip2kml.new($stdin.readlines)
6
+ i2.generate_kml_file
7
+ kml_file = i2.get_kml_file
8
+ puts kml_file
9
+
data/lib/ip2kml.rb ADDED
@@ -0,0 +1,72 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'json'
4
+
5
+ class Ip2kml
6
+
7
+ def initialize(ip_list)
8
+ @geoip_service_base_url = 'http://www.freegeoip.net/json/'
9
+ @ip_list = ip_list
10
+ @kml_file_data = String.new # This will get populated with the XML text
11
+ end
12
+
13
+ def get_ip_info(ip_address)
14
+ # Look up IP information from web service
15
+ uri = URI.parse(@geoip_service_base_url + ip_address)
16
+ response = Net::HTTP.get_response(uri)
17
+ JSON.parse(response.body)
18
+ end
19
+
20
+ def generate_pin_from_ip(ip_address)
21
+ ip_data = get_ip_info(ip_address)
22
+ @kml_file_data << <<EOT
23
+ <Placemark>
24
+ <name>#{ip_data['ip']}</name>
25
+ <description>
26
+ Country code: #{ip_data['country_code']}
27
+ Country name: #{ip_data['country_name']}
28
+ Region code: #{ip_data['region_code']}
29
+ Region name: #{ip_data['region_name']}
30
+ City: #{ip_data['city']}
31
+ Zip code: #{ip_data['zip_code']}
32
+ Time zone: #{ip_data['time_zone']}
33
+ Latitude: #{ip_data['latitude']}
34
+ Longitude: #{ip_data['longitude']}
35
+ Metro code: #{ip_data['metro_code']}
36
+ </description>
37
+ <Point>
38
+ <coordinates>#{ip_data['longitude']},#{ip_data['latitude']},0</coordinates>
39
+ </Point>
40
+ </Placemark>
41
+ EOT
42
+ end
43
+
44
+ def start_kml_file
45
+ # Header boilerplate of KML file
46
+ @kml_file_data = <<EOT
47
+ <?xml version="1.0" encoding="UTF-8"?>
48
+ <kml xmlns="http://www.opengis.net/kml/2.2">'
49
+ EOT
50
+ end
51
+
52
+ def finish_kml_file
53
+ # Footer boilerplate for KML file
54
+ @kml_file_data << <<EOT
55
+ </kml> <!-- Auto generated by ip2kml -->
56
+ EOT
57
+ end
58
+
59
+ def generate_kml_file
60
+ start_kml_file
61
+ @ip_list.each do |ip_address|
62
+ generate_pin_from_ip(ip_address.strip!)
63
+ end
64
+ finish_kml_file
65
+ return
66
+ end
67
+
68
+ def get_kml_file
69
+ return @kml_file_data
70
+ end
71
+
72
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ip2kml
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - NanoDano
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-22 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Generate Google Earth KML files from a list of IP addresses
14
+ email: nanodano@devdungeon.com
15
+ executables:
16
+ - ip2kml
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/ip2kml
21
+ - lib/ip2kml.rb
22
+ homepage: http://rubygems.org/gems/ip2kml
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.4.5
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: IP 2 KML
46
+ test_files: []
47
+ has_rdoc: