pqdl 0.1.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 (2) hide show
  1. data/bin/pqdl +157 -0
  2. metadata +77 -0
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "geocaching"
4
+ require "tempfile"
5
+ require "yaml"
6
+ require "zip/zip"
7
+
8
+ CONFIG_PATH = File.expand_path("~/.pqdl.yml")
9
+
10
+ def usage
11
+ $stderr.puts "Usage: pqdl list"
12
+ $stderr.puts " pqdl download [guid]"
13
+ $stderr.puts " pqdl configure <username> <password>"
14
+ exit 1
15
+ end
16
+
17
+ def fatal(message)
18
+ $stderr.puts message
19
+ exit 1
20
+ end
21
+
22
+ def configure
23
+ unless ARGV[1] and ARGV[2]
24
+ fatal "Usage: pqdl configure <username> <password>"
25
+ end
26
+
27
+ File.open(CONFIG_PATH, "w") do |f|
28
+ f.write({ "username" => ARGV[1], "password" => ARGV[2] }.to_yaml)
29
+ end
30
+
31
+ File.new(CONFIG_PATH).chmod(0700)
32
+ end
33
+
34
+ def read_config
35
+ unless File.exists?(CONFIG_PATH)
36
+ fatal "Missing config file #{CONFIG_PATH}"
37
+ end
38
+
39
+ config = YAML.load(File.read(CONFIG_PATH))
40
+
41
+ if config["username"] and config["password"]
42
+ $username = config["username"]
43
+ $password = config["password"]
44
+ else
45
+ fatal "Missing username or password in config file"
46
+ end
47
+ end
48
+
49
+ def open_session
50
+ begin
51
+ $session = Geocaching::Session.open($username, $password)
52
+ rescue Geocaching::Error
53
+ fatal "Could not connect to geocaching.com"
54
+ end
55
+ end
56
+
57
+ def list
58
+ pocket_queries = begin
59
+ $session.get_pocket_queries
60
+ rescue Geocaching::Error
61
+ fatal "Could not get Pocket Query list from geocaching.com"
62
+ end
63
+
64
+ if pocket_queries and pocket_queries.size > 0
65
+ pocket_queries.each do |pocket_query|
66
+ puts " Name: #{pocket_query.name}"
67
+ puts " GUID: #{pocket_query.guid}"
68
+ puts " Last generated at: #{pocket_query.generated_at.strftime("%c")}"
69
+ puts " Results: #{pocket_query.results_count}" if pocket_query.results_count
70
+ puts
71
+ end
72
+
73
+ puts "Total: #{pocket_queries.size} Pocket Queries"
74
+ else
75
+ puts "No Pocket Queries"
76
+ end
77
+ end
78
+
79
+ def pocket_query_select
80
+ id = nil
81
+
82
+ pocket_queries = begin
83
+ $session.get_pocket_queries.select do |pocket_query|
84
+ pocket_query.download_available?
85
+ end
86
+ rescue Geocaching::Error
87
+ fatal "Could not get Pocket Query list from geocaching.com"
88
+ end
89
+
90
+ if pocket_queries.size == 0
91
+ puts "There are not Pocket Queries available for download"
92
+ exit
93
+ end
94
+
95
+ puts "Select the Pocket Query you want to download:"
96
+
97
+ loop do
98
+ pocket_queries.each_with_index do |pocket_query, i|
99
+ puts " (#{i + 1}) #{pocket_query.name}"
100
+ end
101
+
102
+ printf "Pocket Query to download: "
103
+ id = $stdin.gets.to_i
104
+ break if id > 0 and id <= pocket_queries.size
105
+ end
106
+
107
+ pocket_queries[id - 1].guid if id
108
+ end
109
+
110
+ def download
111
+ guid = ARGV[1] || pocket_query_select
112
+ fatal "Oops" unless guid
113
+
114
+ puts "Downloading Pocket Query..."
115
+
116
+ pq = begin
117
+ $session.download_pocket_query_by_guid(guid)
118
+ rescue Geocaching::Error => e
119
+ fatal "Could not download Pocket Query from geocaching.com"
120
+ end
121
+
122
+ filename = nil
123
+
124
+ tempfile = Tempfile.new(guid)
125
+ tempfile.write(pq)
126
+
127
+ Zip::ZipFile.foreach(tempfile) do |entry|
128
+ if entry.name =~ /(\d+)\.gpx$/
129
+ filename = "#{$1}.gpx"
130
+ File.open(filename, "w") do |f|
131
+ f.write(entry.get_input_stream.read)
132
+ end
133
+ break
134
+ end
135
+ end
136
+
137
+ tempfile.close
138
+ tempfile.unlink
139
+
140
+ fatal "Oops" unless filename
141
+ puts "Pocket Query written to #{filename}"
142
+ end
143
+
144
+ usage unless ARGV.size > 0 or %w(list download configure).include?(ARGV.first)
145
+
146
+ unless ARGV.first == "configure"
147
+ read_config
148
+ open_session
149
+ end
150
+
151
+ send(ARGV.first)
152
+
153
+ begin
154
+ $session.close if $session
155
+ rescue Geocaching::Error
156
+ #
157
+ end
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pqdl
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Thomas Cyron
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-04-30 00:00:00 +02:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: geocaching
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.8.0
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubyzip
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ description: Download Pocket Queries from your command line
39
+ email: thomas@thcyron.de
40
+ executables:
41
+ - pqdl
42
+ extensions: []
43
+
44
+ extra_rdoc_files: []
45
+
46
+ files:
47
+ - bin/pqdl
48
+ has_rdoc: true
49
+ homepage: http://nano.github.com/pqdl
50
+ licenses: []
51
+
52
+ post_install_message:
53
+ rdoc_options: []
54
+
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ requirements: []
70
+
71
+ rubyforge_project:
72
+ rubygems_version: 1.5.0
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: Geocaching.com Pocket Query Downloader
76
+ test_files: []
77
+