multistockphoto 0.6.2 → 0.7.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.
- data/History.txt +8 -0
- data/Manifest.txt +1 -1
- data/bin/multistockphoto +47 -14
- data/config.yaml +7 -0
- data/lib/multistockphoto/generic_site.rb +11 -2
- data/lib/multistockphoto/photo.rb +3 -1
- data/lib/multistockphoto/sender.rb +16 -0
- data/lib/multistockphoto/site_dreamstime.rb +105 -0
- data/lib/multistockphoto/site_fotolia.rb +8 -15
- data/lib/multistockphoto/site_photocase.rb +6 -5
- data/lib/multistockphoto/site_zoonar.rb +6 -8
- data/lib/multistockphoto/version.rb +2 -2
- data/lib/multistockphoto.rb +1 -0
- data/test/test_multistockphoto.rb +104 -39
- data/website/index.html +20 -6
- data/website/index.txt +14 -2
- metadata +3 -3
- data/lib/multistockphoto/site_aldi.rb +0 -82
data/History.txt
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
== 0.7.0 2008-06-16
|
|
2
|
+
* 1 major enhancement
|
|
3
|
+
* neue Site Dreamstime erstellt
|
|
4
|
+
* 3 minor enhancements
|
|
5
|
+
* --stats listet zusaetzlich Anzahl Photos mit/ohne tags file auf + Anteil
|
|
6
|
+
* neue Methode Sender#sent_to?(fn,site)
|
|
7
|
+
* site_* Klassen etwas allgemeiner gehalten, so daß man leichter neue kopieren kann
|
|
8
|
+
|
|
1
9
|
== 0.6.2 2008-06-14
|
|
2
10
|
* 3 minor enhancements
|
|
3
11
|
* new method Sitename.can_handle_orientation?
|
data/Manifest.txt
CHANGED
|
@@ -20,7 +20,7 @@ lib/multistockphoto/site_fotolia.rb
|
|
|
20
20
|
lib/multistockphoto/site_zoonar.rb
|
|
21
21
|
lib/multistockphoto/mock_zoonar.rb
|
|
22
22
|
lib/multistockphoto/site_photocase.rb
|
|
23
|
-
lib/multistockphoto/
|
|
23
|
+
lib/multistockphoto/site_dreamstime.rb
|
|
24
24
|
lib/multistockphoto/photo.rb
|
|
25
25
|
lib/multistockphoto/upload_exception.rb
|
|
26
26
|
script/console
|
data/bin/multistockphoto
CHANGED
|
@@ -227,16 +227,24 @@ def send_all
|
|
|
227
227
|
# :photocase => true,
|
|
228
228
|
# }
|
|
229
229
|
|
|
230
|
-
done = {
|
|
231
|
-
:fotolia => false,
|
|
232
|
-
:zoonar => false,
|
|
233
|
-
:photocase => false,
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
:
|
|
238
|
-
:
|
|
239
|
-
|
|
230
|
+
# done = {
|
|
231
|
+
# :fotolia => false,
|
|
232
|
+
# :zoonar => false,
|
|
233
|
+
# :photocase => false,
|
|
234
|
+
# :dreamstime => false,
|
|
235
|
+
# }
|
|
236
|
+
# remaining = {
|
|
237
|
+
# :fotolia => 999_999_999,
|
|
238
|
+
# :zoonar => 999_999_999,
|
|
239
|
+
# :photocase => 999_999_999,
|
|
240
|
+
# :dreamstime => 999_999_999,
|
|
241
|
+
# }
|
|
242
|
+
remaining = Hash.new
|
|
243
|
+
done = Hash.new
|
|
244
|
+
$active_sites.each {|site|
|
|
245
|
+
done[site] = false
|
|
246
|
+
remaining[site] = 999_999_999
|
|
247
|
+
}
|
|
240
248
|
$active_sites.each {|site|
|
|
241
249
|
# dynamisches Site.new("site")
|
|
242
250
|
s = eval("#{site.to_s.capitalize}"+".new(#{site.to_s.capitalize})")
|
|
@@ -263,9 +271,9 @@ def send_all
|
|
|
263
271
|
done[site_name] = true if remaining[site_name] <= 0
|
|
264
272
|
next if done[site_name]
|
|
265
273
|
if $tags_only and ! tagsfile?(photo.filename)
|
|
266
|
-
if $verbose
|
|
267
|
-
puts "#{photo.filename}: no tags file. skipped."
|
|
268
|
-
end
|
|
274
|
+
# if $verbose
|
|
275
|
+
# puts "#{photo.filename}: no tags file. skipped."
|
|
276
|
+
# end
|
|
269
277
|
next
|
|
270
278
|
end
|
|
271
279
|
if $send_all or
|
|
@@ -431,6 +439,25 @@ def stats
|
|
|
431
439
|
fmt = "%#{"total".length}d"
|
|
432
440
|
printf(fmt, all)
|
|
433
441
|
puts
|
|
442
|
+
|
|
443
|
+
#Photos mit/ohne tags-file
|
|
444
|
+
count = Hash.new
|
|
445
|
+
count[:tags] = 0
|
|
446
|
+
count[:notags] = 0
|
|
447
|
+
Dir.glob(File.join($upload_dir,'*')).each {|filename|
|
|
448
|
+
next if File.basename(filename)[0,4] == 'rot_'
|
|
449
|
+
if filename.upcase =~ PICTURE_FILES
|
|
450
|
+
if tagsfile?(filename)
|
|
451
|
+
count[:tags] += 1
|
|
452
|
+
else
|
|
453
|
+
count[:notags] += 1
|
|
454
|
+
end
|
|
455
|
+
end
|
|
456
|
+
}
|
|
457
|
+
puts "#{count[:tags]+count[:notags]} files"
|
|
458
|
+
puts "#{count[:tags]} files with tags file"
|
|
459
|
+
puts "#{count[:notags]} files without tags file"
|
|
460
|
+
puts "#{count[:tags].to_f/(count[:tags]+count[:notags]).to_f*(100.0)} %"
|
|
434
461
|
end
|
|
435
462
|
|
|
436
463
|
# listet Bilddateien auf, die an alle Sites gesendet wurden
|
|
@@ -506,6 +533,7 @@ end
|
|
|
506
533
|
|
|
507
534
|
# Listet alle Photo-Dateien auf, zu denen es keine .tags-Datei gibt
|
|
508
535
|
def no_tags
|
|
536
|
+
sender = Sender.new("Thomas")
|
|
509
537
|
allfiles = Dir.glob(File.join($upload_dir,'*'))
|
|
510
538
|
if $ordered
|
|
511
539
|
allfiles.sort!
|
|
@@ -513,7 +541,12 @@ def no_tags
|
|
|
513
541
|
allfiles.each {|fn|
|
|
514
542
|
next if File.basename(fn)[0,4] == 'rot_'
|
|
515
543
|
if fn.upcase =~ PICTURE_FILES
|
|
516
|
-
|
|
544
|
+
if ! tagsfile?(fn)
|
|
545
|
+
if ! sender.sent_to?(fn,:fotolia) #TODO: provisorisch
|
|
546
|
+
puts fn
|
|
547
|
+
end
|
|
548
|
+
|
|
549
|
+
end
|
|
517
550
|
end
|
|
518
551
|
}
|
|
519
552
|
end
|
data/config.yaml
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
- :fotolia
|
|
4
4
|
- :zoonar
|
|
5
5
|
- :photocase
|
|
6
|
+
- :dreamstime
|
|
6
7
|
:zoonar:
|
|
7
8
|
:user: 'hugo'
|
|
8
9
|
:password: 'lalala'
|
|
@@ -17,3 +18,9 @@
|
|
|
17
18
|
:user: 'hugo'
|
|
18
19
|
:password: 'lalala'
|
|
19
20
|
:total_per_day: 12
|
|
21
|
+
:dreamstime:
|
|
22
|
+
:user: 'martha'
|
|
23
|
+
:password: 'mageheim'
|
|
24
|
+
:ftp_user: 'martha12345'
|
|
25
|
+
:ftp_password: 'ftpgeheimmartha'
|
|
26
|
+
:total_per_day: 1
|
|
@@ -11,7 +11,7 @@ class GenericSite
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def photos_fuer_heute_uebrig?
|
|
14
|
-
|
|
14
|
+
# puts "noch #{total_per_day - sent_today} zu senden"
|
|
15
15
|
return total_per_day - sent_today > 0
|
|
16
16
|
end
|
|
17
17
|
|
|
@@ -55,4 +55,13 @@ class GenericSite
|
|
|
55
55
|
return (count[key] || 0)
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
def load_config
|
|
59
|
+
if ENV['MSP_CONFIG']
|
|
60
|
+
config = YAML.load_file(ENV['MSP_CONFIG'])
|
|
61
|
+
else
|
|
62
|
+
config = YAML.load_file("config.yaml")
|
|
63
|
+
end
|
|
64
|
+
config
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end # class
|
|
@@ -68,8 +68,10 @@ class Photo
|
|
|
68
68
|
puts "tags file #{fn} found"
|
|
69
69
|
tags = Photo.to_tags(lines)
|
|
70
70
|
self.tags = tags
|
|
71
|
-
|
|
71
|
+
print "writing tags to file ... "
|
|
72
|
+
$stdout.flush
|
|
72
73
|
write_keywords
|
|
74
|
+
puts "done"
|
|
73
75
|
rescue Errno::ENOENT
|
|
74
76
|
warn "WARNING: no tags file #{fn}"
|
|
75
77
|
end
|
|
@@ -27,4 +27,20 @@ class Sender
|
|
|
27
27
|
'done'
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
+
# wurde dieses File schon an diese Site gesendet?
|
|
31
|
+
def sent_to?(p_filename,p_site)
|
|
32
|
+
sendeliste = 'sendeliste.dat' #TODO:
|
|
33
|
+
result = false
|
|
34
|
+
File.open(sendeliste) {|f|
|
|
35
|
+
f.each_line {|line|
|
|
36
|
+
site,photo_file,time = line.chomp.split("\t")
|
|
37
|
+
if site == p_site.to_s and photo_file == p_filename
|
|
38
|
+
result = true
|
|
39
|
+
break
|
|
40
|
+
end
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
result
|
|
44
|
+
end
|
|
45
|
+
|
|
30
46
|
end # Sender
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
require 'net/ftp'
|
|
2
|
+
require 'grep'
|
|
3
|
+
include Grep
|
|
4
|
+
|
|
5
|
+
class Dreamstime < GenericSite
|
|
6
|
+
|
|
7
|
+
@@errors = 0
|
|
8
|
+
|
|
9
|
+
attr_reader :total_per_day
|
|
10
|
+
attr_accessor :ftp_user, :ftp_password, :max_errors
|
|
11
|
+
|
|
12
|
+
FTP_HOST = 'upload.dreamstime.com'
|
|
13
|
+
SITENAME = 'dreamstime'
|
|
14
|
+
# Ftp Adresse: upload.dreamstime.com
|
|
15
|
+
#Benutzername (Benutzer ID): 772816
|
|
16
|
+
#Kennwort: das selbe wie Ihr Dreamstime Kontokennwort
|
|
17
|
+
|
|
18
|
+
def initialize(name)
|
|
19
|
+
super
|
|
20
|
+
@config = load_config
|
|
21
|
+
@user = @config[:dreamstime][:user]
|
|
22
|
+
@password = @config[:dreamstime][:password]
|
|
23
|
+
@ftp_user = @config[:dreamstime][:ftp_user]
|
|
24
|
+
@ftp_password = @config[:dreamstime][:ftp_password]
|
|
25
|
+
@total_per_day = @config[:dreamstime][:total_per_day]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def transfer(photo, dont_send=nil, dont_log=nil)
|
|
29
|
+
# falls nicht in config Datei eingetragen dann nicht senden
|
|
30
|
+
if @user == nil or @password == nil
|
|
31
|
+
return
|
|
32
|
+
end
|
|
33
|
+
unless photo.class == Photo
|
|
34
|
+
raise 'not a Photo object'
|
|
35
|
+
end
|
|
36
|
+
unless File.exist?(photo.filename)
|
|
37
|
+
raise "file #{photo.filename} does not exist"
|
|
38
|
+
end
|
|
39
|
+
if @ftp_user == nil or @ftp_password == nil
|
|
40
|
+
raise "ftp_user/ftp_password not set"
|
|
41
|
+
end
|
|
42
|
+
print "#{SITENAME}:#{photo.filename} ... "
|
|
43
|
+
$stdout.flush
|
|
44
|
+
g = grep(SENDLIST, /#{SITENAME}\t#{photo.filename}/)
|
|
45
|
+
if g.size > 0
|
|
46
|
+
puts "already sent"
|
|
47
|
+
return :duplicate
|
|
48
|
+
end
|
|
49
|
+
if photo.portrait? and ! Dreamstime.can_handle_orientation?
|
|
50
|
+
photo.drehen
|
|
51
|
+
end
|
|
52
|
+
if site_can_handle_keywords?
|
|
53
|
+
photo.set_keywords
|
|
54
|
+
end
|
|
55
|
+
if ! dont_send
|
|
56
|
+
begin
|
|
57
|
+
ftp = Net::FTP.new(FTP_HOST)
|
|
58
|
+
ftp.login(@ftp_user,@ftp_password)
|
|
59
|
+
files=ftp.list('*')
|
|
60
|
+
if photo.portrait?
|
|
61
|
+
p photo.rotated_filename
|
|
62
|
+
res = ftp.putbinaryfile(photo.rotated_filename)
|
|
63
|
+
else
|
|
64
|
+
res = ftp.putbinaryfile(photo.filename)
|
|
65
|
+
end
|
|
66
|
+
files =ftp.list('*')
|
|
67
|
+
p files
|
|
68
|
+
ftp.close
|
|
69
|
+
rescue Errno::EPIPE
|
|
70
|
+
raise UploadException
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
@@errors = 0
|
|
74
|
+
puts 'OK'
|
|
75
|
+
if ! dont_log
|
|
76
|
+
File.open(SENDLIST,'a') {|f|
|
|
77
|
+
f.puts "#{SITENAME}\t#{photo.filename}\t#{Time.now}"
|
|
78
|
+
}
|
|
79
|
+
end
|
|
80
|
+
true
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Anzahl heute schon gesendeter Photos
|
|
84
|
+
def sent_today
|
|
85
|
+
site = SITENAME
|
|
86
|
+
return sent_today_site(site)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# wurde dieses Photo schon gesendet?
|
|
90
|
+
def already_sent?(photo)
|
|
91
|
+
already_sent_site?(photo,SITENAME)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# can site handle orientation?
|
|
95
|
+
def self.can_handle_orientation?
|
|
96
|
+
false
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
private
|
|
100
|
+
|
|
101
|
+
def site_can_handle_keywords?
|
|
102
|
+
true
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end # class
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
require 'net/ftp'
|
|
2
2
|
require 'grep'
|
|
3
|
-
#require 'upload_exception'
|
|
4
3
|
include Grep
|
|
5
4
|
|
|
6
5
|
class Fotolia < GenericSite
|
|
@@ -11,15 +10,11 @@ class Fotolia < GenericSite
|
|
|
11
10
|
attr_accessor :ftp_user, :ftp_password, :max_errors
|
|
12
11
|
|
|
13
12
|
FTP_HOST = 'submit.fotolia.com'
|
|
14
|
-
|
|
13
|
+
SITENAME = 'fotolia'
|
|
14
|
+
|
|
15
15
|
def initialize(name)
|
|
16
|
-
#p "creating a Fotolia object"
|
|
17
16
|
super
|
|
18
|
-
|
|
19
|
-
@config = YAML.load_file(ENV['MSP_CONFIG'])
|
|
20
|
-
else
|
|
21
|
-
@config = YAML.load_file("config.yaml")
|
|
22
|
-
end
|
|
17
|
+
@config = load_config
|
|
23
18
|
@user = @config[:fotolia][:user]
|
|
24
19
|
@password = @config[:fotolia][:password]
|
|
25
20
|
@ftp_user = @config[:fotolia][:ftp_user]
|
|
@@ -41,10 +36,9 @@ class Fotolia < GenericSite
|
|
|
41
36
|
if @ftp_user == nil or @ftp_password == nil
|
|
42
37
|
raise "ftp_user/ftp_password not set"
|
|
43
38
|
end
|
|
44
|
-
print "
|
|
39
|
+
print "#{SITENAME}:#{photo.filename} ... "
|
|
45
40
|
$stdout.flush
|
|
46
|
-
|
|
47
|
-
g = grep(SENDLIST, /fotolia\t#{photo.filename}/)
|
|
41
|
+
g = grep(SENDLIST, /#{SITENAME}\t#{photo.filename}/)
|
|
48
42
|
if g.size > 0
|
|
49
43
|
puts "already sent"
|
|
50
44
|
return :duplicate
|
|
@@ -75,10 +69,9 @@ class Fotolia < GenericSite
|
|
|
75
69
|
end
|
|
76
70
|
@@errors = 0
|
|
77
71
|
puts 'OK'
|
|
78
|
-
# `echo "fotolia\t#{photo.filename}\t#{Time.now}" >>sendeliste.dat` #TODO:
|
|
79
72
|
if ! dont_log
|
|
80
73
|
File.open(SENDLIST,'a') {|f|
|
|
81
|
-
f.puts "
|
|
74
|
+
f.puts "#{SITENAME}\t#{photo.filename}\t#{Time.now}"
|
|
82
75
|
}
|
|
83
76
|
end
|
|
84
77
|
true
|
|
@@ -86,13 +79,13 @@ class Fotolia < GenericSite
|
|
|
86
79
|
|
|
87
80
|
# Anzahl heute schon gesendeter Photos
|
|
88
81
|
def sent_today
|
|
89
|
-
site =
|
|
82
|
+
site = SITENAME
|
|
90
83
|
return sent_today_site(site)
|
|
91
84
|
end
|
|
92
85
|
|
|
93
86
|
# wurde dieses Photo schon gesendet?
|
|
94
87
|
def already_sent?(photo)
|
|
95
|
-
already_sent_site?(photo,
|
|
88
|
+
already_sent_site?(photo,SITENAME)
|
|
96
89
|
end
|
|
97
90
|
|
|
98
91
|
# can site handle orientation?
|
|
@@ -4,6 +4,7 @@ require 'grep'
|
|
|
4
4
|
include Grep
|
|
5
5
|
|
|
6
6
|
class Photocase < GenericSite
|
|
7
|
+
SITENAME = 'photocase'
|
|
7
8
|
@@errors = 0
|
|
8
9
|
|
|
9
10
|
attr_reader :total_per_day
|
|
@@ -34,9 +35,9 @@ class Photocase < GenericSite
|
|
|
34
35
|
unless File.exist?(photo.filename)
|
|
35
36
|
raise "file #{photo.filename} does not exist"
|
|
36
37
|
end
|
|
37
|
-
print "
|
|
38
|
+
print "#{SITENAME}:#{photo.filename} ... "
|
|
38
39
|
$stdout.flush
|
|
39
|
-
g = grep(SENDLIST,
|
|
40
|
+
g = grep(SENDLIST, /#{SITENAME}\t#{photo.filename}/)
|
|
40
41
|
if g.size > 0
|
|
41
42
|
puts 'already sent'
|
|
42
43
|
return :duplicate
|
|
@@ -106,7 +107,7 @@ class Photocase < GenericSite
|
|
|
106
107
|
|
|
107
108
|
unless dont_log
|
|
108
109
|
File.open(SENDLIST,'a') {|f|
|
|
109
|
-
f.puts "
|
|
110
|
+
f.puts "#{SITENAME}\t#{photo.filename}\t#{Time.now}"
|
|
110
111
|
}
|
|
111
112
|
end
|
|
112
113
|
true
|
|
@@ -114,13 +115,13 @@ class Photocase < GenericSite
|
|
|
114
115
|
|
|
115
116
|
# Anzahl heute schon gesendeter Photos
|
|
116
117
|
def sent_today
|
|
117
|
-
site =
|
|
118
|
+
site = SITENAME
|
|
118
119
|
return sent_today_site(site)
|
|
119
120
|
end
|
|
120
121
|
|
|
121
122
|
# wurde dieses Photo schon gesendet?
|
|
122
123
|
def already_sent?(photo)
|
|
123
|
-
already_sent_site?(photo,
|
|
124
|
+
already_sent_site?(photo,SITENAME)
|
|
124
125
|
#
|
|
125
126
|
# unless photo.class == Photo
|
|
126
127
|
# raise 'not a Photo object'
|
|
@@ -4,7 +4,7 @@ require 'grep'
|
|
|
4
4
|
include Grep
|
|
5
5
|
|
|
6
6
|
class Zoonar < GenericSite
|
|
7
|
-
|
|
7
|
+
SITENAME = 'zoonar'
|
|
8
8
|
@@errors = 0
|
|
9
9
|
|
|
10
10
|
attr_reader :total_per_day
|
|
@@ -35,9 +35,9 @@ class Zoonar < GenericSite
|
|
|
35
35
|
unless File.exist?(photo.filename)
|
|
36
36
|
raise "file #{photo.filename} does not exist"
|
|
37
37
|
end
|
|
38
|
-
print "
|
|
38
|
+
print "#{SITENAME}:#{photo.filename} ... "
|
|
39
39
|
$stdout.flush
|
|
40
|
-
g = grep(SENDLIST,
|
|
40
|
+
g = grep(SENDLIST, /#{SITENAME}\t#{photo.filename}/)
|
|
41
41
|
if g.size > 0
|
|
42
42
|
puts 'already sent'
|
|
43
43
|
return :duplicate
|
|
@@ -110,11 +110,9 @@ Falls wir das Bild ablehnen sollten, werden Sie eine Benachrichtigung per E-Mail
|
|
|
110
110
|
else
|
|
111
111
|
puts "OK"
|
|
112
112
|
end # dont_send
|
|
113
|
-
#`echo "zoonar\t#{photo.filename}\t#{Time.now}" >>sendeliste.dat` #TODO:
|
|
114
|
-
|
|
115
113
|
unless dont_log
|
|
116
114
|
File.open(SENDLIST,'a') {|f|
|
|
117
|
-
f.puts "
|
|
115
|
+
f.puts "#{SITENAME}\t#{photo.filename}\t#{Time.now}"
|
|
118
116
|
}
|
|
119
117
|
end
|
|
120
118
|
true
|
|
@@ -122,13 +120,13 @@ Falls wir das Bild ablehnen sollten, werden Sie eine Benachrichtigung per E-Mail
|
|
|
122
120
|
|
|
123
121
|
# Anzahl heute schon gesendeter Photos
|
|
124
122
|
def sent_today
|
|
125
|
-
site =
|
|
123
|
+
site = SITENAME
|
|
126
124
|
return sent_today_site(site)
|
|
127
125
|
end
|
|
128
126
|
|
|
129
127
|
# wurde dieses Photo schon gesendet?
|
|
130
128
|
def already_sent?(photo)
|
|
131
|
-
already_sent_site?(photo,
|
|
129
|
+
already_sent_site?(photo,SITENAME)
|
|
132
130
|
end
|
|
133
131
|
|
|
134
132
|
# can site handle orientation?
|
data/lib/multistockphoto.rb
CHANGED
|
@@ -24,6 +24,10 @@ class TestMultistockphoto < Test::Unit::TestCase
|
|
|
24
24
|
ENV['FOTOLIA_FTP_PASSWORD'] = 'hugolalala'
|
|
25
25
|
ENV['PHOTOCASE_USER'] = 'hugo'
|
|
26
26
|
ENV['PHOTOCASE_PASSWORD'] = 'lalala'
|
|
27
|
+
ENV['DREAMSTIME_USER'] = 'martha'
|
|
28
|
+
ENV['DREAMSTIME_PASSWORD'] = 'mageheim'
|
|
29
|
+
ENV['DREAMSTIME_FTP_USER'] = 'martha12345'
|
|
30
|
+
ENV['DREAMSTIME_FTP_PASSWORD'] = 'ftpgeheimmartha'
|
|
27
31
|
@fotolia_user = ENV['FOTOLIA_USER']
|
|
28
32
|
@fotolia_password = ENV['FOTOLIA_PASSWORD']
|
|
29
33
|
@fotolia_ftp_user = ENV['FOTOLIA_FTP_USER']
|
|
@@ -34,6 +38,10 @@ class TestMultistockphoto < Test::Unit::TestCase
|
|
|
34
38
|
@aldi_password = ENV['ALDI_PASSWORD']
|
|
35
39
|
@photocase_user = ENV['PHOTOCASE_USER']
|
|
36
40
|
@photocase_password = ENV['PHOTOCASE_PASSWORD']
|
|
41
|
+
@dreamstime_user = ENV['DREAMSTIME_USER']
|
|
42
|
+
@dreamstime_password = ENV['DREAMSTIME_PASSWORD']
|
|
43
|
+
@dreamstime_ftp_user = ENV['DREAMSTIME_FTP_USER']
|
|
44
|
+
@dreamstime_ftp_password = ENV['DREAMSTIME_FTP_PASSWORD']
|
|
37
45
|
ENV['MSP_CONFIG'] = nil
|
|
38
46
|
end
|
|
39
47
|
|
|
@@ -78,7 +86,7 @@ Options:
|
|
|
78
86
|
end
|
|
79
87
|
|
|
80
88
|
def test_bin_version
|
|
81
|
-
expected = "multistockphoto 0.6.
|
|
89
|
+
expected = "multistockphoto 0.6.2\n"
|
|
82
90
|
result = `#{BIN}multistockphoto -v`
|
|
83
91
|
assert_equal expected, result
|
|
84
92
|
result = `#{BIN}multistockphoto --version`
|
|
@@ -176,6 +184,18 @@ Options:
|
|
|
176
184
|
#kein ftp assert_equal @photocase_ftp_password, photocase.ftp_password
|
|
177
185
|
end
|
|
178
186
|
|
|
187
|
+
def test_config_params_dreamstime
|
|
188
|
+
dreamstime = Dreamstime.new("Dreamstime Site")
|
|
189
|
+
assert dreamstime.user
|
|
190
|
+
assert dreamstime.password
|
|
191
|
+
assert dreamstime.ftp_user
|
|
192
|
+
assert dreamstime.ftp_password
|
|
193
|
+
assert_equal @dreamstime_user, dreamstime.user
|
|
194
|
+
assert_equal @dreamstime_password, dreamstime.password
|
|
195
|
+
assert_equal @dreamstime_ftp_user, dreamstime.ftp_user
|
|
196
|
+
assert_equal @dreamstime_ftp_password, dreamstime.ftp_password
|
|
197
|
+
end
|
|
198
|
+
|
|
179
199
|
def test_grep
|
|
180
200
|
file = "test/testgrep.dat"
|
|
181
201
|
content = "zoonar\tIMG1.jpg\n"+
|
|
@@ -214,7 +234,7 @@ Options:
|
|
|
214
234
|
end
|
|
215
235
|
|
|
216
236
|
def test_config_params_pixelio
|
|
217
|
-
after Date.new(2008,6,
|
|
237
|
+
after Date.new(2008,6,20) do
|
|
218
238
|
pixelio = Pixelio.new("Pixelio Site")
|
|
219
239
|
assert pixelio.user
|
|
220
240
|
assert pixelio.password
|
|
@@ -225,6 +245,44 @@ Options:
|
|
|
225
245
|
end # after
|
|
226
246
|
end
|
|
227
247
|
|
|
248
|
+
def test_dreamstime_object
|
|
249
|
+
# angemeldet.
|
|
250
|
+
# Ftp Adresse: upload.dreamstime.com
|
|
251
|
+
#Benutzername (Benutzer ID): 772816
|
|
252
|
+
#Kennwort: das selbe wie Ihr Dreamstime Kontokennwort
|
|
253
|
+
dreamstime = Dreamstime.new("Dreamstime Site")
|
|
254
|
+
assert_kind_of Dreamstime, dreamstime
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
after Date.new(2008,6,20) do
|
|
258
|
+
def test_shutterstock_object
|
|
259
|
+
shutterstock = Shutterstock.new("Shutterstock Site")
|
|
260
|
+
assert_kind_of Shutterstock, shutterstock
|
|
261
|
+
end
|
|
262
|
+
def test_istockphoto_object
|
|
263
|
+
# angemeldet, aber man muß noch vorstellungsbilder hochladen
|
|
264
|
+
istockphoto = Istockphoto.new("Istockphoto Site")
|
|
265
|
+
assert_kind_of Istockphoto, istockphoto
|
|
266
|
+
end
|
|
267
|
+
def test_stockxpert_object
|
|
268
|
+
# angemeldet, aber man muss noch vorstellungsbilder hochladen
|
|
269
|
+
stockxpert = Stockxpert.new("Stockxpert Site")
|
|
270
|
+
assert_kind_of Stockxpert, stockxpert
|
|
271
|
+
end
|
|
272
|
+
def test_bigstockphoto_object
|
|
273
|
+
bigstockphoto = Bigstockphoto.new("Bigstockphoto Site")
|
|
274
|
+
assert_kind_of Bigstockphoto, bigstockphoto
|
|
275
|
+
end
|
|
276
|
+
def test_Einszweidreirf_object
|
|
277
|
+
einszweidreirf = Einszweidreirf.new("123rf Site")
|
|
278
|
+
assert_kind_of Einszweidreirf, einszweidreirf
|
|
279
|
+
end
|
|
280
|
+
def test_Panthermedia_object
|
|
281
|
+
panthermedia = Panthermedia.new("Panthermedia Site")
|
|
282
|
+
assert_kind_of Panthermedia, panthermedia
|
|
283
|
+
end
|
|
284
|
+
#Shutterstock, iStockphoto , StockXpert , Dreamstime , Bigstockphoto , 123rf und Panthermedia finden Sie auf unserer Partnerseite Fotos kaufen.de
|
|
285
|
+
end
|
|
228
286
|
|
|
229
287
|
def DONT_test_iptc_data
|
|
230
288
|
|
|
@@ -275,7 +333,7 @@ Options:
|
|
|
275
333
|
end
|
|
276
334
|
|
|
277
335
|
def test_iptc_file_keywords
|
|
278
|
-
expected = 'Berlin
|
|
336
|
+
expected = 'Berlin,gwb,Blume,Biene'
|
|
279
337
|
photo = Photo.new(File.join('test','IMG_3602.JPG'))
|
|
280
338
|
photo.set_keywords
|
|
281
339
|
assert_equal expected, photo.file_keywords
|
|
@@ -383,7 +441,9 @@ Options:
|
|
|
383
441
|
# end
|
|
384
442
|
|
|
385
443
|
def test_heute_schon_gesendet
|
|
386
|
-
|
|
444
|
+
after Date.new(2008,6,30) do
|
|
445
|
+
raise NotImplementedError, 'Need to write test_heute_schon_gesendet'
|
|
446
|
+
end
|
|
387
447
|
end
|
|
388
448
|
|
|
389
449
|
end
|
|
@@ -393,14 +453,21 @@ Options:
|
|
|
393
453
|
site = Fotolia.new('fotolia')
|
|
394
454
|
site.password = password
|
|
395
455
|
assert_equal password, site.password
|
|
456
|
+
|
|
396
457
|
password = rand(1_000_000).to_s
|
|
397
458
|
site = Zoonar.new('zoonar')
|
|
398
459
|
site.password = password
|
|
399
460
|
assert_equal password, site.password
|
|
461
|
+
|
|
400
462
|
password = rand(1_000_000).to_s
|
|
401
463
|
site = Photocase.new('photocase')
|
|
402
464
|
site.password = password
|
|
403
465
|
assert_equal password, site.password
|
|
466
|
+
|
|
467
|
+
password = rand(1_000_000).to_s
|
|
468
|
+
site = Dreamstime.new('dreamstime')
|
|
469
|
+
site.password = password
|
|
470
|
+
assert_equal password, site.password
|
|
404
471
|
end
|
|
405
472
|
|
|
406
473
|
def test_password_equals
|
|
@@ -408,37 +475,29 @@ Options:
|
|
|
408
475
|
site = Fotolia.new('fotolia')
|
|
409
476
|
site.password = password
|
|
410
477
|
assert_equal password, site.password
|
|
478
|
+
|
|
411
479
|
password = rand(1_000_000).to_s
|
|
412
480
|
site = Zoonar.new('zoonar')
|
|
413
481
|
site.password = password
|
|
414
482
|
assert_equal password, site.password
|
|
483
|
+
|
|
415
484
|
password = rand(1_000_000).to_s
|
|
416
485
|
site = Photocase.new('photocase')
|
|
417
486
|
site.password = password
|
|
418
487
|
assert_equal password, site.password
|
|
488
|
+
|
|
489
|
+
password = rand(1_000_000).to_s
|
|
490
|
+
site = Dreamstime.new('dreamstime')
|
|
491
|
+
site.password = password
|
|
492
|
+
assert_equal password, site.password
|
|
419
493
|
end
|
|
420
494
|
|
|
421
|
-
after Date.new(2008,
|
|
495
|
+
after Date.new(2008,7,15) do
|
|
422
496
|
def test_photos_fuer_heute_uebrig_eh
|
|
423
497
|
raise NotImplementedError, 'Need to write test_photos_fuer_heute_uebrig_eh'
|
|
424
498
|
end
|
|
425
499
|
end
|
|
426
500
|
|
|
427
|
-
def test_password
|
|
428
|
-
password = rand(1_000_000).to_s
|
|
429
|
-
site = Fotolia.new('fotolia')
|
|
430
|
-
site.password = password
|
|
431
|
-
assert_equal password, site.password
|
|
432
|
-
password = rand(1_000_000).to_s
|
|
433
|
-
site = Zoonar.new('zoonar')
|
|
434
|
-
site.password = password
|
|
435
|
-
assert_equal password, site.password
|
|
436
|
-
password = rand(1_000_000).to_s
|
|
437
|
-
site = Photocase.new('photocase')
|
|
438
|
-
site.password = password
|
|
439
|
-
assert_equal password, site.password
|
|
440
|
-
end
|
|
441
|
-
|
|
442
501
|
def test_zoonar_nur_noch_5_uploads_moeglich
|
|
443
502
|
site = Mock_Zoonar.new('zoonar',:remaining => 5)
|
|
444
503
|
photo = Photo.new("test/1234.jpg")
|
|
@@ -457,18 +516,19 @@ Options:
|
|
|
457
516
|
|
|
458
517
|
|
|
459
518
|
def test_bin_simple
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
519
|
+
after Date.new(2008,6,30) do
|
|
520
|
+
begin
|
|
521
|
+
Dir.mkdir 'upload'
|
|
522
|
+
rescue Errno::EEXIST
|
|
523
|
+
#ignore
|
|
524
|
+
end
|
|
525
|
+
###leere sendeliste erzeugen
|
|
526
|
+
File.unlink SENDLIST
|
|
527
|
+
File.open(SENDLIST, "w") {}
|
|
528
|
+
FileUtils.cp("IMG_0000.JPG", "upload/1.gif")
|
|
529
|
+
FileUtils.cp("IMG_0000.JPG", "upload/2.gif")
|
|
530
|
+
FileUtils.cp("IMG_0000.JPG", "upload/3.gif")
|
|
531
|
+
expected="sending all unsent photos
|
|
472
532
|
fotolia:upload/1.gif ... OK
|
|
473
533
|
zoonar:upload/1.gif ... OK
|
|
474
534
|
photocase:upload/1.gif ... OK
|
|
@@ -479,12 +539,13 @@ fotolia:upload/3.gif ... OK
|
|
|
479
539
|
zoonar:upload/3.gif ... OK
|
|
480
540
|
photocase:upload/3.gif ... OK
|
|
481
541
|
9 photos sent.\n"
|
|
482
|
-
|
|
483
|
-
|
|
542
|
+
result = `#{BIN}multistockphoto --send-all --dont-send --dont-log`
|
|
543
|
+
assert_equal expected, result
|
|
544
|
+
end
|
|
484
545
|
end
|
|
485
546
|
|
|
486
547
|
def test_bin_simple_verbose
|
|
487
|
-
after Date.new(2008,6,
|
|
548
|
+
after Date.new(2008,6,30) do
|
|
488
549
|
begin
|
|
489
550
|
Dir.mkdir 'upload'
|
|
490
551
|
rescue Errno::EEXIST
|
|
@@ -548,7 +609,7 @@ photocase:upload/3.gif ... OK
|
|
|
548
609
|
|
|
549
610
|
def test_active_sites
|
|
550
611
|
sender = Sender.new("Thomas")
|
|
551
|
-
assert_equal [:fotolia, :zoonar, :photocase], sender.active_sites
|
|
612
|
+
assert_equal [:fotolia, :zoonar, :photocase, :dreamstime], sender.active_sites
|
|
552
613
|
end
|
|
553
614
|
|
|
554
615
|
def test_upload_dir
|
|
@@ -563,10 +624,10 @@ photocase:upload/3.gif ... OK
|
|
|
563
624
|
|
|
564
625
|
def test_bin_nothing_raised_send_all
|
|
565
626
|
assert_nothing_raised() {
|
|
566
|
-
puts `#{BIN}multistockphoto --send-all`
|
|
627
|
+
puts `#{BIN}multistockphoto --send-all --dont-send --dont-log`
|
|
567
628
|
}
|
|
568
629
|
assert_nothing_raised() {
|
|
569
|
-
puts `#{BIN}multistockphoto --send-all --verbose`
|
|
630
|
+
puts `#{BIN}multistockphoto --send-all --verbose --dont-send --dont-log`
|
|
570
631
|
}
|
|
571
632
|
end
|
|
572
633
|
|
|
@@ -600,7 +661,11 @@ photocase:upload/3.gif ... OK
|
|
|
600
661
|
assert ! Photocase.can_handle_orientation?
|
|
601
662
|
end
|
|
602
663
|
|
|
603
|
-
|
|
664
|
+
def test_specific_file_sent_to_site
|
|
665
|
+
sender = Sender.new('icke')
|
|
666
|
+
assert sender.sent_to?("upload/IMG_3333.JPG", :fotolia)
|
|
667
|
+
assert ! sender.sent_to?("upload/IMG_9999.JPG", :fotolia)
|
|
668
|
+
end
|
|
604
669
|
|
|
605
670
|
end
|
|
606
671
|
|
data/website/index.html
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
<h1>multistockphoto</h1>
|
|
34
34
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/multistockphoto"; return false'>
|
|
35
35
|
<p>Get Version</p>
|
|
36
|
-
<a href="http://rubyforge.org/projects/multistockphoto" class="numbers">0.
|
|
36
|
+
<a href="http://rubyforge.org/projects/multistockphoto" class="numbers">0.7.0</a>
|
|
37
37
|
</div>
|
|
38
38
|
<h1>→ ‘multistockphoto’</h1>
|
|
39
39
|
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
<h2>What</h2>
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
<p>This program is intended to work with the german versions of the photo sites fotolia.de and
|
|
44
|
+
<p>This program is intended to work with the german versions of the photo sites fotolia.de, zoonar.de and dreamstime.de.
|
|
45
45
|
Photographers can upload their photos to this sites.
|
|
46
46
|
Currently it works only with the german version. If you’re interested to adapt
|
|
47
47
|
it to other languages please email me.</p>
|
|
@@ -93,15 +93,22 @@ Innerhalb dieses Ordners lege bitte einen weiteren Ordner namens ‘upload&#
|
|
|
93
93
|
<p>Trage dort deine Zugangsdaten ein! Achtung: Die Einrückung links ist wichtig.
|
|
94
94
|
Der Abschnitt ’:active_sites:’ bezeichnet die Sites, mit denen du arbeiten
|
|
95
95
|
willst. Falls du nicht alle verwenden willst, lösche einfach die entsprechende
|
|
96
|
-
Zeile
|
|
97
|
-
|
|
96
|
+
Zeile.</p>
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
<p>Ebenso kannst du, falls du eine Site vorübergehend nicht verwenden willst, auch
|
|
100
|
+
einfach die entsprechende Zeile löschen (die eigentlichen Login-Daten weiter
|
|
101
|
+
unter können aber unverändert bleiben).</p>
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
<p>Im Gem-Directory ist eine Vorlage, die du kopieren kannst.
|
|
98
105
|
Wenn du nicht bei allen aufgelisteten Sites Mitglied bist oder die Bilder dort
|
|
99
106
|
hochladen möchtest, dann lösche einfach
|
|
100
107
|
die entsprechenden Abschnitte – du ersparst dir und den jeweiligen Servern
|
|
101
108
|
unnötige Last, die bei fehlerhaften Einloggversuchen vergeudet wird.</p>
|
|
102
109
|
|
|
103
110
|
|
|
104
|
-
<p>Wenn du
|
|
111
|
+
<p>Wenn du eines oder mehrere neue Bilder hochladen willst, kopiere die Bilddateien
|
|
105
112
|
in den upload-Ordner!
|
|
106
113
|
Dann rufe (innerhalb des multistockphoto-Ordners) das Kommando</p>
|
|
107
114
|
|
|
@@ -725,6 +732,13 @@ sie sich aktuell in der Warteschlage der zu begutachtenden Photos befinden.</p>
|
|
|
725
732
|
Site unterstützt Hoch-/Querformat: Nein</p>
|
|
726
733
|
|
|
727
734
|
|
|
735
|
+
<h3>dreamstime.de</h3>
|
|
736
|
+
|
|
737
|
+
|
|
738
|
+
<p>Site unterstützt Keywords in <span class="caps">IPTC</span>-Header: Ja
|
|
739
|
+
Site unterstützt Hoch-/Querformat: ??? <span class="caps">TODO</span>:</p>
|
|
740
|
+
|
|
741
|
+
|
|
728
742
|
<h2>Forum</h2>
|
|
729
743
|
|
|
730
744
|
|
|
@@ -800,7 +814,7 @@ rake install_gem</pre>
|
|
|
800
814
|
<p>Comments are welcome. Send an email to <a href="mailto:thopre@gmail.com">Thomas Preymesser</a> email
|
|
801
815
|
or via the <a href="http://groups.google.com/group/multistockphoto">forum</a></p>
|
|
802
816
|
<p class="coda">
|
|
803
|
-
<a href="mailto:thopre@gmail.com">Thomas Preymesser</a>,
|
|
817
|
+
<a href="mailto:thopre@gmail.com">Thomas Preymesser</a>, 16th June 2008<br>
|
|
804
818
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
|
805
819
|
</p>
|
|
806
820
|
</div>
|
data/website/index.txt
CHANGED
|
@@ -5,7 +5,7 @@ h1. → 'multistockphoto'
|
|
|
5
5
|
|
|
6
6
|
h2. What
|
|
7
7
|
|
|
8
|
-
This program is intended to work with the german versions of the photo sites fotolia.de and
|
|
8
|
+
This program is intended to work with the german versions of the photo sites fotolia.de, zoonar.de and dreamstime.de.
|
|
9
9
|
Photographers can upload their photos to this sites.
|
|
10
10
|
Currently it works only with the german version. If you're interested to adapt
|
|
11
11
|
it to other languages please email me.
|
|
@@ -51,13 +51,18 @@ Trage dort deine Zugangsdaten ein! Achtung: Die Einrückung links ist wichtig.
|
|
|
51
51
|
Der Abschnitt ':active_sites:' bezeichnet die Sites, mit denen du arbeiten
|
|
52
52
|
willst. Falls du nicht alle verwenden willst, lösche einfach die entsprechende
|
|
53
53
|
Zeile.
|
|
54
|
+
|
|
55
|
+
Ebenso kannst du, falls du eine Site vorübergehend nicht verwenden willst, auch
|
|
56
|
+
einfach die entsprechende Zeile löschen (die eigentlichen Login-Daten weiter
|
|
57
|
+
unter können aber unverändert bleiben).
|
|
58
|
+
|
|
54
59
|
Im Gem-Directory ist eine Vorlage, die du kopieren kannst.
|
|
55
60
|
Wenn du nicht bei allen aufgelisteten Sites Mitglied bist oder die Bilder dort
|
|
56
61
|
hochladen möchtest, dann lösche einfach
|
|
57
62
|
die entsprechenden Abschnitte - du ersparst dir und den jeweiligen Servern
|
|
58
63
|
unnötige Last, die bei fehlerhaften Einloggversuchen vergeudet wird.
|
|
59
64
|
|
|
60
|
-
Wenn du
|
|
65
|
+
Wenn du eines oder mehrere neue Bilder hochladen willst, kopiere die Bilddateien
|
|
61
66
|
in den upload-Ordner!
|
|
62
67
|
Dann rufe (innerhalb des multistockphoto-Ordners) das Kommando
|
|
63
68
|
|
|
@@ -576,6 +581,13 @@ sie sich aktuell in der Warteschlage der zu begutachtenden Photos befinden.
|
|
|
576
581
|
Site unterstützt Keywords in IPTC-Header: ? noch mal nachschauen! TODO:
|
|
577
582
|
Site unterstützt Hoch-/Querformat: Nein
|
|
578
583
|
|
|
584
|
+
h3. dreamstime.de
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
Site unterstützt Keywords in IPTC-Header: Ja
|
|
588
|
+
Site unterstützt Hoch-/Querformat: ??? TODO:
|
|
589
|
+
|
|
590
|
+
|
|
579
591
|
h2. Forum
|
|
580
592
|
|
|
581
593
|
"http://groups.google.com/group/multistockphoto":http://groups.google.com/group/multistockphoto
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: multistockphoto
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Thomas Preymesser
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
|
|
12
|
-
date: 2008-06-
|
|
12
|
+
date: 2008-06-16 00:00:00 +02:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies: []
|
|
15
15
|
|
|
@@ -53,7 +53,7 @@ files:
|
|
|
53
53
|
- lib/multistockphoto/site_zoonar.rb
|
|
54
54
|
- lib/multistockphoto/mock_zoonar.rb
|
|
55
55
|
- lib/multistockphoto/site_photocase.rb
|
|
56
|
-
- lib/multistockphoto/
|
|
56
|
+
- lib/multistockphoto/site_dreamstime.rb
|
|
57
57
|
- lib/multistockphoto/photo.rb
|
|
58
58
|
- lib/multistockphoto/upload_exception.rb
|
|
59
59
|
- script/console
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
class Aldi < GenericSite
|
|
2
|
-
|
|
3
|
-
def initialize(name)
|
|
4
|
-
p "creating an ALDI object"
|
|
5
|
-
super
|
|
6
|
-
if ENV['MSP_CONFIG']
|
|
7
|
-
@config = YAML.load_file(ENV['MSP_CONFIG'])
|
|
8
|
-
p "meine config: #{ENV['MSP_CONFIG']}"
|
|
9
|
-
else
|
|
10
|
-
p "standard config"
|
|
11
|
-
@config = YAML.load_file("config.yaml")
|
|
12
|
-
end
|
|
13
|
-
@user = @config[:aldi][:user]
|
|
14
|
-
@password = @config[:aldi][:password]
|
|
15
|
-
# kann vom Client ueberschrieben werden
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def transfer(photo)
|
|
19
|
-
# falls nicht in config Datei eingetragen dann nicht senden
|
|
20
|
-
if @user == nil or @password == nil
|
|
21
|
-
return
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
unless photo.class == Photo
|
|
25
|
-
raise 'not a Photo object'
|
|
26
|
-
end
|
|
27
|
-
unless File.exist?(photo.filename)
|
|
28
|
-
raise "file #{photo.filename} does not exist"
|
|
29
|
-
end
|
|
30
|
-
puts "zoonar:#{photo.filename}"
|
|
31
|
-
g = `grep "zoonar\t#{photo.filename}" sendeliste.dat`
|
|
32
|
-
if g.size > 0
|
|
33
|
-
#puts "INFO: already sent to zoonar"
|
|
34
|
-
return :duplicate
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
agent = WWW::Mechanize.new
|
|
38
|
-
agent.user_agent_alias = 'Linux Mozilla'
|
|
39
|
-
page = agent.get 'https://shop.aldi-fotoservice-druck.de/shop/viewLoginForm.do'
|
|
40
|
-
|
|
41
|
-
if page.body.include?('Login/Neuanmeldung')
|
|
42
|
-
p 'bin auf Login-Seite'
|
|
43
|
-
end
|
|
44
|
-
form = page.forms.first #TODO: besser nach Name
|
|
45
|
-
form.username = @config[:aldi][:user]
|
|
46
|
-
form.password = @config[:aldi][:password]
|
|
47
|
-
p form.username
|
|
48
|
-
p form.password
|
|
49
|
-
page = agent.submit form
|
|
50
|
-
if page.body.include?('Ihre Benutzerdaten')
|
|
51
|
-
p 'bin auf Benutzerdaten-Seite'
|
|
52
|
-
else
|
|
53
|
-
html_out(page.body,'out.html')
|
|
54
|
-
end
|
|
55
|
-
page = agent.click page.links.text('zum Direkt-Upload')
|
|
56
|
-
# if page.body.include?('Ihr Warenkorb ist leer.')
|
|
57
|
-
# p 'bin beim leeren Warenkorb'
|
|
58
|
-
# end
|
|
59
|
-
# # page = agent.get('https://shop.aldi-fotoservice-druck.de/shop/viewUploadForm.do')
|
|
60
|
-
# page = agent.click page.links.text(/viewUploadForm/)
|
|
61
|
-
if page.body.include?('Bilddateien und Zip-Archive einzeln hochladen')
|
|
62
|
-
p 'bin auf Upload-Seite'
|
|
63
|
-
end
|
|
64
|
-
form = page.forms.first #TODO: besser nach Name
|
|
65
|
-
pp form
|
|
66
|
-
#form.file_1 = photo.filename
|
|
67
|
-
pp form.file_uploads.name('file_1').first
|
|
68
|
-
form.file_uploads.name('file_1').first.file_name = photo.filename
|
|
69
|
-
pp form.file_uploads.name('file_1').first
|
|
70
|
-
#pp form
|
|
71
|
-
##TODO: derzeit sind in diesem Formular bis zu 5 Photos gleichzeitig moeglich
|
|
72
|
-
page = agent.submit form
|
|
73
|
-
if page.body.include?('Ihr Auftrag')
|
|
74
|
-
p "bin auf Auftrag-Anzeigeseite"
|
|
75
|
-
html_out(page.body,'out.html')
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def html_out(body,html_file)
|
|
80
|
-
File.open(html_file,"w") {|f| f.print body}
|
|
81
|
-
end
|
|
82
|
-
end
|