picasa-downloader 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
+ *.gem
1
2
  Gemfile.lock
data/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # Picasa album downloader
2
+
3
+ [![Build Status](https://secure.travis-ci.org/laurilehmijoki/picasa-downloader.png)]
4
+ (http://travis-ci.org/laurilehmijoki/picasa-downloader)
5
+
6
+ With this tool you can download your Picasa albums.
7
+
8
+ ## Installation
9
+
10
+ (Here we assume that you have Ruby and Ruby Gems installed.)
11
+
12
+ `gem install picasa-downloader`
13
+
14
+ Set your Google credentials as environmental values:
15
+
16
+ `export PICASA_USERNAME="your.gmail.account"`
17
+
18
+ `export PICASA_PASSWORD="yourpass"`
19
+
20
+ ## Usage
21
+
22
+ Download all Picasa albums:
23
+
24
+ `picasa-downloader all`
25
+
26
+ ## Development
27
+
28
+ Run tests:
29
+
30
+ `rake test`
31
+
32
+ ## License
33
+
34
+ MIT
data/TODO.md CHANGED
@@ -1,6 +1,4 @@
1
1
  # TODO
2
2
 
3
- * README.md
4
- * Publish Gem
5
3
  * Persist albums into year directiories
6
4
  * Video download
@@ -4,24 +4,40 @@ module PicasaDownloader
4
4
  @client = client
5
5
  @album = album
6
6
  @download_directory_root = download_directory_root
7
- FileUtils.mkdir_p(get_album_dir)
8
7
  end
9
8
 
10
9
  def download
10
+ FileUtils.mkdir_p(get_temp_album_dir)
11
11
  @client.list_photos(@album.id).each { |photo|
12
12
  photo_data = @client.download_photo(photo)
13
13
  if photo_data
14
- File.open(get_album_dir + photo.name, 'wb') { |file|
14
+ File.open(get_temp_album_dir + photo.name, 'wb') { |file|
15
15
  file.write(photo_data)
16
+ FileUtils.touch(file.path, :mtime => photo.created_date)
16
17
  }
17
18
  end
18
19
  }
20
+ move_to_final_dir
19
21
  end
20
22
 
21
23
  private
22
24
 
23
- def get_album_dir
24
- @download_directory_root + "/#{@album.title}/"
25
+ def move_to_final_dir
26
+ file_modified_years = Dir.entries(get_temp_album_dir).map { |file|
27
+ File.new(get_temp_album_dir + file).mtime.year
28
+ }.reject { |year| year == nil }
29
+ album_min_year = file_modified_years.min
30
+ final_dir = get_final_album_dir_root(album_min_year)
31
+ FileUtils.mkdir_p(final_dir)
32
+ FileUtils.mv(get_temp_album_dir, final_dir)
33
+ end
34
+
35
+ def get_final_album_dir_root(year)
36
+ @download_directory_root + "/#{year}"
37
+ end
38
+
39
+ def get_temp_album_dir
40
+ @download_directory_root + "/.temp/#{@album.title}/"
25
41
  end
26
42
  end
27
43
  end
@@ -22,9 +22,9 @@ module PicasaDownloader
22
22
  Photo.new(
23
23
  e.xpath("group/content/@url").to_s,
24
24
  # Google includes the milliseconds in the timestamp:
25
- e.css("tags time").inner_text.to_i / 1000,
25
+ e.css("timestamp").inner_text.to_i / 1000,
26
26
  e.css("size").inner_text.to_i,
27
- e.css("title").inner_text)
27
+ e.css("title").first.inner_text)
28
28
  }
29
29
  end
30
30
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'picasa-downloader'
3
- s.version = '0.0.1'
3
+ s.version = '0.0.2'
4
4
  s.license = 'MIT'
5
5
  s.summary = 'Download your Google Picasa photo albums'
6
6
  s.description =
@@ -8,6 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.authors = ['Lauri Lehmijoki']
9
9
  s.email = 'lauri.lehmijoki@iki.fi'
10
10
  s.files = `git ls-files`.split("\n")
11
+ s.test_files = `git ls-files -- {spec,fixtures}/*`.split("\n")
11
12
  s.require_paths = ['lib']
12
13
  s.executables << 'picasa-downloader'
13
14
  s.homepage = 'https://github.com/laurilehmijoki/picasa-downloader'
@@ -21,7 +21,7 @@ module PicasaDownloader
21
21
  with_cassettes {
22
22
  @albums = @client.list_albums
23
23
  AlbumPersister.new(@client, @albums.first, @dir).download
24
- File.exists?(@dir + "/#{@albums.first.title}")
24
+ File.exists?(@dir + "/2012/#{@albums.first.title}").should be true
25
25
  }
26
26
  end
27
27
 
@@ -29,7 +29,7 @@ module PicasaDownloader
29
29
  with_cassettes {
30
30
  @albums = @client.list_albums
31
31
  AlbumPersister.new(@client, @albums.first, @dir).download
32
- Dir.entries(@dir + "/#{@albums.first.title}/").any? { |file|
32
+ Dir.entries(@dir + "/2012/#{@albums.first.title}/").any? { |file|
33
33
  file.downcase.match(/jp(e)?g/)
34
34
  }.should be true
35
35
  }
metadata CHANGED
@@ -1,160 +1,172 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: picasa-downloader
3
- version: !ruby/object:Gem::Version
4
- hash: 29
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 1
10
- version: 0.0.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Lauri Lehmijoki
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-07-18 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-07-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: require_all
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: gdata
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: gdata_19
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
46
38
  type: :runtime
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: require_relative
50
39
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: require_relative
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
60
54
  type: :runtime
61
- version_requirements: *id003
62
- - !ruby/object:Gem::Dependency
63
- name: nokogiri
64
55
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
66
- none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
- version: "0"
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: nokogiri
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
74
70
  type: :runtime
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
77
- name: gli
78
71
  prerelease: false
79
- requirement: &id005 !ruby/object:Gem::Requirement
80
- none: false
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- hash: 3
85
- segments:
86
- - 0
87
- version: "0"
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: gli
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
88
86
  type: :runtime
89
- version_requirements: *id005
90
- - !ruby/object:Gem::Dependency
91
- name: rake
92
87
  prerelease: false
93
- requirement: &id006 !ruby/object:Gem::Requirement
94
- none: false
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- hash: 3
99
- segments:
100
- - 0
101
- version: "0"
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rake
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
102
  type: :runtime
103
- version_requirements: *id006
104
- - !ruby/object:Gem::Dependency
105
- name: rspec
106
103
  prerelease: false
107
- requirement: &id007 !ruby/object:Gem::Requirement
108
- none: false
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- hash: 3
113
- segments:
114
- - 0
115
- version: "0"
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rspec
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
116
118
  type: :development
117
- version_requirements: *id007
118
- - !ruby/object:Gem::Dependency
119
- name: vcr
120
119
  prerelease: false
121
- requirement: &id008 !ruby/object:Gem::Requirement
122
- none: false
123
- requirements:
124
- - - ">="
125
- - !ruby/object:Gem::Version
126
- hash: 3
127
- segments:
128
- - 0
129
- version: "0"
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: vcr
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
130
134
  type: :development
131
- version_requirements: *id008
132
- - !ruby/object:Gem::Dependency
133
- name: webmock
134
135
  prerelease: false
135
- requirement: &id009 !ruby/object:Gem::Requirement
136
- none: false
137
- requirements:
138
- - - ">="
139
- - !ruby/object:Gem::Version
140
- hash: 3
141
- segments:
142
- - 0
143
- version: "0"
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: webmock
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
144
150
  type: :development
145
- version_requirements: *id009
146
- description: This Gem makes it convenient to download Picasa albums via command-line interface
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ description: This Gem makes it convenient to download Picasa albums via command-line
159
+ interface
147
160
  email: lauri.lehmijoki@iki.fi
148
- executables:
161
+ executables:
149
162
  - picasa-downloader
150
163
  extensions: []
151
-
152
164
  extra_rdoc_files: []
153
-
154
- files:
165
+ files:
155
166
  - .gitignore
156
167
  - .travis.yml
157
168
  - Gemfile
169
+ - README.md
158
170
  - Rakefile
159
171
  - TODO.md
160
172
  - bin/picasa-downloader
@@ -175,37 +187,36 @@ files:
175
187
  - spec/env_credentials_spec.rb
176
188
  - spec/test_helper.rb
177
189
  homepage: https://github.com/laurilehmijoki/picasa-downloader
178
- licenses:
190
+ licenses:
179
191
  - MIT
180
192
  post_install_message:
181
193
  rdoc_options: []
182
-
183
- require_paths:
194
+ require_paths:
184
195
  - lib
185
- required_ruby_version: !ruby/object:Gem::Requirement
196
+ required_ruby_version: !ruby/object:Gem::Requirement
186
197
  none: false
187
- requirements:
188
- - - ">="
189
- - !ruby/object:Gem::Version
190
- hash: 3
191
- segments:
192
- - 0
193
- version: "0"
194
- required_rubygems_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ! '>='
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
203
  none: false
196
- requirements:
197
- - - ">="
198
- - !ruby/object:Gem::Version
199
- hash: 3
200
- segments:
201
- - 0
202
- version: "0"
204
+ requirements:
205
+ - - ! '>='
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
203
208
  requirements: []
204
-
205
209
  rubyforge_project:
206
- rubygems_version: 1.8.13
210
+ rubygems_version: 1.8.24
207
211
  signing_key:
208
212
  specification_version: 3
209
213
  summary: Download your Google Picasa photo albums
210
- test_files: []
211
-
214
+ test_files:
215
+ - fixtures/cassettes/google-login.yml
216
+ - fixtures/cassettes/picasa-album.yml
217
+ - fixtures/cassettes/picasa-albums.yml
218
+ - fixtures/cassettes/picasa-photo.yml
219
+ - spec/album_persister_spec.rb
220
+ - spec/client_spec.rb
221
+ - spec/env_credentials_spec.rb
222
+ - spec/test_helper.rb