google_maps_pb_decoder 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.
- checksums.yaml +7 -0
- data/exe/google_maps_pb_decoder +16 -0
- data/lib/google_maps_pb_decoder/version.rb +5 -0
- data/lib/google_maps_pb_decoder.rb +56 -0
- metadata +50 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 57a9c45d0e263a4a8ad65497f9114e55aec4ed55af4b5512de9d88ff62500eee
|
4
|
+
data.tar.gz: 945082f965dc3a43c277f82e62e882ad371885067ff8410ddfd3c790d38e841c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0c647c50912cc5417841ffe678705d66b4cc29a60d2566aac4b16e5e5d6efabf788f56bc203a64f337ffa0865131af048bf61672200f8935e9ef99f9cde1bb20
|
7
|
+
data.tar.gz: 10722c263d09cc431b3b8198dddeac6b4ce57b1f78be543248df4bd9986a6177211f136b7554d1ed2a15e31e018d301fbd1f7c4e7bc6aa2b2b1c06475a1050be
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../lib/google_maps_pb_decoder'
|
4
|
+
|
5
|
+
if (pb_encoded_string = ARGV[-1])
|
6
|
+
begin
|
7
|
+
output = GoogleMapsPbDecoder.decode(pb_encoded_string)
|
8
|
+
puts output.inspect
|
9
|
+
rescue => e
|
10
|
+
STDERR.puts "Error: #{e.message}"
|
11
|
+
exit 1
|
12
|
+
end
|
13
|
+
else
|
14
|
+
puts "google_maps_pb_decoder #{GoogleMapsPbDecoder::VERSION}"
|
15
|
+
puts "Usage: google_maps_pb_decoder <pb_encoded_string>"
|
16
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "google_maps_pb_decoder/version"
|
4
|
+
|
5
|
+
module GoogleMapsPbDecoder
|
6
|
+
# Original script: https://gist.github.com/jeteon/e71fa21c1feb48fe4b5eeec045229a0c
|
7
|
+
def self.decode(str)
|
8
|
+
parts = str.split('!').select { |s| s.size > 0 }
|
9
|
+
root = [] # Root elemet
|
10
|
+
curr = root # Current array element being appended to
|
11
|
+
m_stack = [root] # Stack of "m" elements
|
12
|
+
m_count = [parts.size] # Number of elements to put under each level
|
13
|
+
|
14
|
+
parts.each do |e|
|
15
|
+
match = e.match(/\d+([a-z])(.*)/)
|
16
|
+
if !match || match.size != 3
|
17
|
+
raise ArgumentError, "The argument is not a valid protobuf-encoded string"
|
18
|
+
end
|
19
|
+
|
20
|
+
kind = match[1]
|
21
|
+
value = match[2]
|
22
|
+
|
23
|
+
# Decrement all the m_counts
|
24
|
+
(0...m_count.size).each do |i|
|
25
|
+
m_count[i] -= 1
|
26
|
+
end
|
27
|
+
|
28
|
+
if kind == 'm'
|
29
|
+
new_arr = []
|
30
|
+
m_count << value.to_i
|
31
|
+
curr << new_arr
|
32
|
+
m_stack << new_arr
|
33
|
+
curr = new_arr
|
34
|
+
else
|
35
|
+
if kind == 'b' # Assuming these are boolean
|
36
|
+
curr << (value == '1')
|
37
|
+
elsif kind == 'd' || kind == 'f' # Float or double
|
38
|
+
curr << value.to_f
|
39
|
+
elsif kind == 'i' || kind == 'u' || kind == 'e' # Integer, unsigned or enum as int
|
40
|
+
curr << value.to_i
|
41
|
+
else # Store anything else as a string
|
42
|
+
curr << value
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Pop off all the arrays that have their values already
|
47
|
+
while m_count[m_count.size - 1] == 0
|
48
|
+
m_stack.pop
|
49
|
+
m_count.pop
|
50
|
+
curr = m_stack[m_stack.size - 1]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
root
|
55
|
+
end
|
56
|
+
end
|
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: google_maps_pb_decoder
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Yicheng Zhou
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-10-20 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: This gem decodes the protobuf parameters used in Google Maps into readable
|
14
|
+
JSON for easy inspection and debugging.
|
15
|
+
email:
|
16
|
+
- zyc9012@gmail.com
|
17
|
+
executables:
|
18
|
+
- google_maps_pb_decoder
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- exe/google_maps_pb_decoder
|
23
|
+
- lib/google_maps_pb_decoder.rb
|
24
|
+
- lib/google_maps_pb_decoder/version.rb
|
25
|
+
homepage: https://github.com/serpapi/google-maps-pb-decoder
|
26
|
+
licenses:
|
27
|
+
- MIT
|
28
|
+
metadata:
|
29
|
+
homepage_uri: https://github.com/serpapi/google-maps-pb-decoder
|
30
|
+
source_code_uri: https://github.com/serpapi/google-maps-pb-decoder
|
31
|
+
post_install_message:
|
32
|
+
rdoc_options: []
|
33
|
+
require_paths:
|
34
|
+
- lib
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.9'
|
40
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
requirements: []
|
46
|
+
rubygems_version: 3.0.3.1
|
47
|
+
signing_key:
|
48
|
+
specification_version: 4
|
49
|
+
summary: Google Maps pb (protobuf) parameter decoder.
|
50
|
+
test_files: []
|