multistockphoto 0.3.0 → 0.5.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 +13 -2
- data/bin/multistockphoto +264 -84
- data/config.yaml +4 -0
- data/lib/multistockphoto/generic_site.rb +38 -2
- data/lib/multistockphoto/photo.rb +65 -30
- data/lib/multistockphoto/site_fotolia.rb +42 -7
- data/lib/multistockphoto/site_photocase.rb +39 -7
- data/lib/multistockphoto/site_zoonar.rb +33 -4
- data/lib/multistockphoto/version.rb +1 -1
- data/test/test_multistockphoto.rb +105 -8
- data/website/index.html +115 -34
- data/website/index.txt +94 -24
- metadata +2 -2
@@ -4,7 +4,9 @@ include Grep
|
|
4
4
|
|
5
5
|
class Fotolia < GenericSite
|
6
6
|
|
7
|
-
|
7
|
+
@@errors = 0
|
8
|
+
|
9
|
+
attr_accessor :ftp_user, :ftp_password, :max_errors
|
8
10
|
|
9
11
|
FTP_HOST = 'submit.fotolia.com'
|
10
12
|
|
@@ -13,18 +15,16 @@ class Fotolia < GenericSite
|
|
13
15
|
super
|
14
16
|
if ENV['MSP_CONFIG']
|
15
17
|
@config = YAML.load_file(ENV['MSP_CONFIG'])
|
16
|
-
#p "meine config: #{ENV['MSP_CONFIG']}"
|
17
18
|
else
|
18
|
-
#p "standard config"
|
19
19
|
@config = YAML.load_file("config.yaml")
|
20
20
|
end
|
21
21
|
@user = @config[:fotolia][:user]
|
22
22
|
@password = @config[:fotolia][:password]
|
23
23
|
@ftp_user = @config[:fotolia][:ftp_user]
|
24
24
|
@ftp_password = @config[:fotolia][:ftp_password]
|
25
|
-
|
25
|
+
@total_per_day = @config[:fotolia][:total_per_day]
|
26
26
|
end
|
27
|
-
|
27
|
+
# TODO: Bild gedreht senden, falls Hochformat
|
28
28
|
def transfer(photo)
|
29
29
|
# falls nicht in config Datei eingetragen dann nicht senden
|
30
30
|
if @user == nil or @password == nil
|
@@ -42,11 +42,14 @@ class Fotolia < GenericSite
|
|
42
42
|
print "fotolia:#{photo.filename} ... "
|
43
43
|
$stdout.flush
|
44
44
|
#g = `grep "fotolia\t#{photo.filename}" sendeliste.dat` #TODO: will not work for windows
|
45
|
-
g = grep(
|
45
|
+
g = grep(SENDELISTE, /fotolia\t#{photo.filename}/)
|
46
46
|
if g.size > 0
|
47
47
|
puts "already sent"
|
48
48
|
return :duplicate
|
49
49
|
end
|
50
|
+
if photo.portrait
|
51
|
+
photo.drehen
|
52
|
+
end
|
50
53
|
ftp = Net::FTP.new(FTP_HOST)
|
51
54
|
ftp.login(@ftp_user,@ftp_password)
|
52
55
|
files=ftp.list('*')
|
@@ -54,11 +57,43 @@ class Fotolia < GenericSite
|
|
54
57
|
files=ftp.list('*')
|
55
58
|
#p files
|
56
59
|
ftp.close
|
60
|
+
#Test auf Fehler?
|
61
|
+
# if rand(100) == 42
|
62
|
+
# @@errors += 1
|
63
|
+
# if @@errors > max_errors
|
64
|
+
# raise "too many errors"
|
65
|
+
# end
|
66
|
+
# end
|
67
|
+
@@errors = 0
|
57
68
|
puts 'OK'
|
58
69
|
# `echo "fotolia\t#{photo.filename}\t#{Time.now}" >>sendeliste.dat` #TODO:
|
59
|
-
File.open(
|
70
|
+
File.open(SENDELISTE,'a') {|f|
|
60
71
|
f.puts "fotolia\t#{photo.filename}\t#{Time.now}"
|
61
72
|
}
|
62
73
|
true
|
63
74
|
end
|
75
|
+
|
76
|
+
def total_per_day
|
77
|
+
@total_per_day
|
78
|
+
end
|
79
|
+
|
80
|
+
def sent_today
|
81
|
+
site = 'fotolia'
|
82
|
+
return sent_today_site(site)
|
83
|
+
end
|
84
|
+
|
85
|
+
def already_sent?(photo)
|
86
|
+
unless photo.class == Photo
|
87
|
+
raise 'not a Photo object'
|
88
|
+
end
|
89
|
+
unless File.exist?(photo.filename)
|
90
|
+
raise "file #{photo.filename} does not exist"
|
91
|
+
end
|
92
|
+
g = grep(SENDELISTE, /fotolia\t#{photo.filename}/)
|
93
|
+
if g.size > 0
|
94
|
+
return true
|
95
|
+
else
|
96
|
+
return false
|
97
|
+
end
|
98
|
+
end
|
64
99
|
end
|
@@ -4,8 +4,8 @@ require 'grep'
|
|
4
4
|
include Grep
|
5
5
|
|
6
6
|
class Photocase < GenericSite
|
7
|
-
|
8
|
-
attr_accessor :user, :password
|
7
|
+
@@errors = 0
|
8
|
+
attr_accessor :user, :password, :max_errors
|
9
9
|
|
10
10
|
def initialize(name)
|
11
11
|
super
|
@@ -16,6 +16,7 @@ class Photocase < GenericSite
|
|
16
16
|
end
|
17
17
|
@user = @config[:photocase][:user]
|
18
18
|
@password = @config[:photocase][:password]
|
19
|
+
@total_per_day = @config[:photocase][:total_per_day]
|
19
20
|
end
|
20
21
|
|
21
22
|
def transfer(photo)
|
@@ -33,12 +34,12 @@ class Photocase < GenericSite
|
|
33
34
|
end
|
34
35
|
print "photocase:#{photo.filename} ... "
|
35
36
|
$stdout.flush
|
36
|
-
g = grep(
|
37
|
+
g = grep(SENDELISTE, /photocase\t#{photo.filename}/)
|
37
38
|
if g.size > 0
|
38
39
|
puts 'already sent'
|
39
40
|
return :duplicate
|
40
41
|
end
|
41
|
-
if photo.
|
42
|
+
if photo.portrait
|
42
43
|
photo.drehen
|
43
44
|
end
|
44
45
|
agent = WWW::Mechanize.new
|
@@ -59,11 +60,11 @@ class Photocase < GenericSite
|
|
59
60
|
page = agent.click page.links.text('Upload')
|
60
61
|
raise "no Upload a photo" if ! page.body.include?('Upload a photo')
|
61
62
|
form = page.form('Form')
|
62
|
-
if photo.
|
63
|
+
if photo.portrait
|
63
64
|
|
64
65
|
b = File.basename(photo.filename)
|
65
66
|
newfilename = photo.filename.sub(b,'')+'rot_'+b
|
66
|
-
# form.file_uploads.first.file_name = 'r' + photo.filename
|
67
|
+
# form.file_uploads.first.file_name = 'r' + photo.filename
|
67
68
|
form.file_uploads.first.file_name = newfilename
|
68
69
|
else
|
69
70
|
form.file_uploads.first.file_name = photo.filename
|
@@ -79,16 +80,47 @@ class Photocase < GenericSite
|
|
79
80
|
raise "not successfully uploaded"
|
80
81
|
end
|
81
82
|
if page.body.include?('Your photo was uploaded successfully.')
|
83
|
+
@@errors = 0
|
82
84
|
puts "OK"
|
85
|
+
else
|
86
|
+
#Fehler aufgetreten
|
87
|
+
@@errors += 1
|
88
|
+
if @@errors > 3
|
89
|
+
raise "too many errors"
|
90
|
+
end
|
83
91
|
end
|
84
92
|
#'Your photo was uploaded successfully.'
|
85
93
|
if sav_photo_filename != photo.filename
|
86
94
|
raise "photo.filenames has been changed!"
|
87
95
|
end
|
88
96
|
|
89
|
-
File.open(
|
97
|
+
File.open(SENDELISTE,'a') {|f|
|
90
98
|
f.puts "photocase\t#{photo.filename}\t#{Time.now}"
|
91
99
|
}
|
92
100
|
true
|
93
101
|
end
|
102
|
+
|
103
|
+
def total_per_day
|
104
|
+
@total_per_day
|
105
|
+
end
|
106
|
+
|
107
|
+
def sent_today
|
108
|
+
site = 'photocase'
|
109
|
+
return sent_today_site(site)
|
110
|
+
end
|
111
|
+
|
112
|
+
def already_sent?(photo)
|
113
|
+
unless photo.class == Photo
|
114
|
+
raise 'not a Photo object'
|
115
|
+
end
|
116
|
+
unless File.exist?(photo.filename)
|
117
|
+
raise "file #{photo.filename} does not exist"
|
118
|
+
end
|
119
|
+
g = grep(SENDELISTE, /photocase\t#{photo.filename}/)
|
120
|
+
if g.size > 0
|
121
|
+
return true
|
122
|
+
else
|
123
|
+
return false
|
124
|
+
end
|
125
|
+
end
|
94
126
|
end
|
@@ -7,7 +7,7 @@ class Zoonar < GenericSite
|
|
7
7
|
|
8
8
|
@@errors = 0
|
9
9
|
|
10
|
-
attr_accessor :user, :password
|
10
|
+
attr_accessor :user, :password, :max_errors
|
11
11
|
|
12
12
|
def initialize(name)
|
13
13
|
super
|
@@ -18,8 +18,10 @@ class Zoonar < GenericSite
|
|
18
18
|
end
|
19
19
|
@user = @config[:zoonar][:user]
|
20
20
|
@password = @config[:zoonar][:password]
|
21
|
+
@total_per_day = @config[:zoonar][:total_per_day]
|
21
22
|
end
|
22
23
|
|
24
|
+
# TODO: Bild gedreht senden, falls Hochformat
|
23
25
|
def transfer(photo)
|
24
26
|
# falls nicht in config Datei eingetragen dann nicht senden
|
25
27
|
if @user == nil or @password == nil
|
@@ -35,11 +37,14 @@ class Zoonar < GenericSite
|
|
35
37
|
print "zoonar:#{photo.filename} ... "
|
36
38
|
$stdout.flush
|
37
39
|
# g = `grep "zoonar\t#{photo.filename}" sendeliste.dat` #TODO: will not work for windows
|
38
|
-
g = grep(
|
40
|
+
g = grep(SENDELISTE, /zoonar\t#{photo.filename}/)
|
39
41
|
if g.size > 0
|
40
42
|
puts 'already sent'
|
41
43
|
return :duplicate
|
42
44
|
end
|
45
|
+
if photo.portrait
|
46
|
+
photo.drehen
|
47
|
+
end
|
43
48
|
agent = WWW::Mechanize.new
|
44
49
|
agent.user_agent_alias = 'Linux Mozilla'
|
45
50
|
page = agent.get 'http://www.zoonar.de'
|
@@ -61,7 +66,7 @@ class Zoonar < GenericSite
|
|
61
66
|
raise "Bild zu klein. Muss mind. 6 MP sein"
|
62
67
|
else
|
63
68
|
@@errors += 1
|
64
|
-
if @@errors >
|
69
|
+
if @@errors > max_errors
|
65
70
|
raise "too many errors"
|
66
71
|
end
|
67
72
|
raise "Fehler beim Upload"
|
@@ -92,9 +97,33 @@ Falls wir das Bild ablehnen sollten, werden Sie eine Benachrichtigung per E-Mail
|
|
92
97
|
|
93
98
|
#`echo "zoonar\t#{photo.filename}\t#{Time.now}" >>sendeliste.dat` #TODO:
|
94
99
|
|
95
|
-
File.open(
|
100
|
+
File.open(SENDELISTE,'a') {|f|
|
96
101
|
f.puts "zoonar\t#{photo.filename}\t#{Time.now}"
|
97
102
|
}
|
98
103
|
true
|
99
104
|
end
|
105
|
+
|
106
|
+
def total_per_day
|
107
|
+
@total_per_day
|
108
|
+
end
|
109
|
+
|
110
|
+
def sent_today
|
111
|
+
site = 'zoonar'
|
112
|
+
return sent_today_site(site)
|
113
|
+
end
|
114
|
+
|
115
|
+
def already_sent?(photo)
|
116
|
+
unless photo.class == Photo
|
117
|
+
raise 'not a Photo object'
|
118
|
+
end
|
119
|
+
unless File.exist?(photo.filename)
|
120
|
+
raise "file #{photo.filename} does not exist"
|
121
|
+
end
|
122
|
+
g = grep(SENDELISTE, /zoonar\t#{photo.filename}/)
|
123
|
+
if g.size > 0
|
124
|
+
return true
|
125
|
+
else
|
126
|
+
return false
|
127
|
+
end
|
128
|
+
end
|
100
129
|
end
|
@@ -2,6 +2,8 @@ require File.dirname(__FILE__) + '/test_helper.rb'
|
|
2
2
|
|
3
3
|
require 'grep'
|
4
4
|
include Grep
|
5
|
+
#require 'RMagick'
|
6
|
+
#include Magick
|
5
7
|
|
6
8
|
class TestMultistockphoto < Test::Unit::TestCase
|
7
9
|
|
@@ -23,7 +25,7 @@ class TestMultistockphoto < Test::Unit::TestCase
|
|
23
25
|
end
|
24
26
|
|
25
27
|
def test_bin_help
|
26
|
-
expected = "Usage: multistockphoto [-
|
28
|
+
expected = "Usage: multistockphoto [-vayntsorx]
|
27
29
|
|
28
30
|
Specific options:
|
29
31
|
|
@@ -31,10 +33,13 @@ Common options:
|
|
31
33
|
--help Show this message
|
32
34
|
-v, --version Show version
|
33
35
|
-a, --send-all Send all files
|
36
|
+
-y, --verbose Verbose output
|
37
|
+
-n, --not-sent Count not sent files per site
|
34
38
|
-t, --total-transfers dont't send more than N photos in total
|
35
39
|
-s, --total-per-site send no more than N photos per site
|
36
40
|
-o, --check-orientation displays the orientiation of photo files
|
37
|
-
-r, --rotate rotate a photo file 90 degrees to the left
|
41
|
+
-r, --rotate rotate a photo file 90 degrees to the left
|
42
|
+
-x, --stats Displays statistics\n"
|
38
43
|
result = `#{BIN}multistockphoto -h`
|
39
44
|
assert_equal expected, result
|
40
45
|
result = `#{BIN}multistockphoto --help`
|
@@ -42,7 +47,7 @@ Common options:
|
|
42
47
|
end
|
43
48
|
|
44
49
|
def test_bin_version
|
45
|
-
expected = "multistockphoto 0.
|
50
|
+
expected = "multistockphoto 0.4.0\n"
|
46
51
|
result = `#{BIN}multistockphoto -v`
|
47
52
|
assert_equal expected, result
|
48
53
|
result = `#{BIN}multistockphoto --version`
|
@@ -68,9 +73,7 @@ sending foto1.jpg ... OK
|
|
68
73
|
sending foto2.jpg ... OK
|
69
74
|
sending foto3.jpg ... OK
|
70
75
|
"
|
71
|
-
|
72
76
|
output = `system bin/multistockphoto --transfer-all`
|
73
|
-
|
74
77
|
assert_equal expected, output
|
75
78
|
end
|
76
79
|
end
|
@@ -191,7 +194,7 @@ sending foto3.jpg ... OK
|
|
191
194
|
end
|
192
195
|
|
193
196
|
def test_aldi
|
194
|
-
after Date.new(2008,5,
|
197
|
+
after Date.new(2008,5,30) do
|
195
198
|
site = Aldi.new("ALDI")
|
196
199
|
|
197
200
|
assert_kind_of Aldi, site
|
@@ -209,7 +212,7 @@ sending foto3.jpg ... OK
|
|
209
212
|
end
|
210
213
|
|
211
214
|
def test_aldi_transfer
|
212
|
-
after Date.new(2008,5,
|
215
|
+
after Date.new(2008,5,30) do
|
213
216
|
site = Aldi.new("ALDI")
|
214
217
|
photo = Photo.new("/media/LACIE/private/CF-Card/DCIM/119CANON/IMG_3267_zugeschnitten_blank_names.jpg")
|
215
218
|
site.transfer(photo)
|
@@ -254,7 +257,7 @@ sending foto3.jpg ... OK
|
|
254
257
|
end
|
255
258
|
|
256
259
|
def test_config_params_pixelio
|
257
|
-
after Date.new(2008,5,
|
260
|
+
after Date.new(2008,5,30) do
|
258
261
|
pixelio = Pixelio.new("Pixelio Site")
|
259
262
|
assert pixelio.user
|
260
263
|
assert pixelio.password
|
@@ -266,7 +269,101 @@ sending foto3.jpg ... OK
|
|
266
269
|
end
|
267
270
|
|
268
271
|
|
272
|
+
def DONT_test_iptc_data
|
273
|
+
|
274
|
+
pic = ImageList.new("test/IMG_3602.JPG")
|
275
|
+
puts pic.orientation
|
276
|
+
|
277
|
+
|
278
|
+
pic.each_iptc_dataset { |dataset, data_field|
|
279
|
+
p dataset
|
280
|
+
p data_field
|
281
|
+
}
|
282
|
+
|
283
|
+
p pic.get_iptc_dataset(Magick::IPTC::Application::Keywords)
|
284
|
+
# assert ['aaa'], rmagicphoto.iptc
|
285
|
+
assert true
|
286
|
+
end
|
269
287
|
|
270
288
|
#Shutterstock, iStockphoto , StockXpert , Dreamstime , Bigstockphoto , 123rf und Panthermedia finden Sie auf unserer Partnerseite Fotos kaufen.de
|
289
|
+
|
290
|
+
def test_max_errors
|
291
|
+
site = Fotolia.new('fotolia')
|
292
|
+
assert_equal 3, site.max_errors
|
293
|
+
site = Zoonar.new('zoonar')
|
294
|
+
assert_equal 3, site.max_errors
|
295
|
+
site = Photocase.new('photocase')
|
296
|
+
assert_equal 3, site.max_errors
|
297
|
+
end
|
298
|
+
|
299
|
+
def test_set_max_errors
|
300
|
+
site = Fotolia.new('fotolia')
|
301
|
+
site.max_errors = 4
|
302
|
+
assert_equal 4, site.max_errors
|
303
|
+
|
304
|
+
site = Zoonar.new('zoonar')
|
305
|
+
site.max_errors = 5
|
306
|
+
assert_equal 5, site.max_errors
|
307
|
+
|
308
|
+
site = Photocase.new('photocase')
|
309
|
+
site.max_errors = 6
|
310
|
+
assert_equal 6, site.max_errors
|
311
|
+
end
|
271
312
|
|
313
|
+
def test_iptc_keywords
|
314
|
+
expected = ['Berlin','gwb','Blume','Biene']
|
315
|
+
photo = Photo.new(File.join('test','IMG_3602.JPG'))
|
316
|
+
photo.set_keywords
|
317
|
+
assert_equal expected, photo.keywords
|
318
|
+
end
|
319
|
+
|
320
|
+
def test_iptc_file_keywords
|
321
|
+
expected = 'Berlin gwb Blume Biene'
|
322
|
+
photo = Photo.new(File.join('test','IMG_3602.JPG'))
|
323
|
+
|
324
|
+
photo.set_keywords
|
325
|
+
assert_equal expected, photo.file_keywords
|
326
|
+
end
|
327
|
+
|
328
|
+
def test_string_to_keyword_array
|
329
|
+
s = "Berlin"
|
330
|
+
assert_equal ['Berlin'], Photo.to_tags(s)
|
331
|
+
s = "Berlin,Graffiti"
|
332
|
+
assert_equal ['Berlin','Graffiti'], Photo.to_tags(s)
|
333
|
+
s = "Berlin Graffiti"
|
334
|
+
assert_equal ['Berlin','Graffiti'], Photo.to_tags(s)
|
335
|
+
s = "Berlin Graffiti,Test"
|
336
|
+
assert_equal ['Berlin','Graffiti','Test'], Photo.to_tags(s)
|
337
|
+
s = "Berlin Graffiti, Test"
|
338
|
+
assert_equal ['Berlin','Graffiti','Test'], Photo.to_tags(s)
|
339
|
+
s = "Berlin Graffiti, Test\n zweite, dritte"
|
340
|
+
assert_equal ['Berlin','Graffiti','Test','zweite','dritte'], Photo.to_tags(s)
|
341
|
+
s = "Berlin Graffiti, Test\n zweite\tdritte"
|
342
|
+
assert_equal ['Berlin','Graffiti','Test','zweite','dritte'], Photo.to_tags(s)
|
343
|
+
s = "Berlin Graffiti, Test\n zweite|dritte"
|
344
|
+
assert_equal ['Berlin','Graffiti','Test','zweite','dritte'], Photo.to_tags(s)
|
345
|
+
end
|
346
|
+
|
347
|
+
def test_iptc_file_keywords_non_existing_tag_file
|
348
|
+
expected = 'Berlin gwb Blume Biene'
|
349
|
+
photo = Photo.new(File.join('test','IMG_9999.JPG'))
|
350
|
+
|
351
|
+
photo.set_keywords
|
352
|
+
assert_equal expected, photo.file_keywords
|
353
|
+
end
|
354
|
+
|
355
|
+
def test_total_per_day_from_config_file
|
356
|
+
zoonar = Zoonar.new('zoonar')
|
357
|
+
assert_equal 10, zoonar.total_per_day
|
358
|
+
fotolia = Fotolia.new('fotolia')
|
359
|
+
assert_equal 11, fotolia.total_per_day
|
360
|
+
photocase = Photocase.new('photocase')
|
361
|
+
assert_equal 12, photocase.total_per_day
|
362
|
+
|
363
|
+
assert_equal 0, zoonar.sent_today
|
364
|
+
assert_equal 0, fotolia.sent_today
|
365
|
+
assert_equal 0, photocase.sent_today
|
366
|
+
|
367
|
+
|
368
|
+
end
|
272
369
|
end
|
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.5.0</a>
|
37
37
|
</div>
|
38
38
|
<h1>→ ‘multistockphoto’</h1>
|
39
39
|
|
@@ -161,38 +161,6 @@ können.</p>
|
|
161
161
|
schon vor des Hochladen überprüft werden. Dies ist jedoch noch nicht implementiert.</p>
|
162
162
|
|
163
163
|
|
164
|
-
<h3>fotolia.de</h3>
|
165
|
-
|
166
|
-
|
167
|
-
<p>Beispiel: Bei fotolia.de mußt du deine Photos hochladen, dann noch Stichworte
|
168
|
-
und verschiedene Vertragsbedingungen festlegen. Dann erst werden deine Bilder
|
169
|
-
geprüft und entweder angenommen oder abgelehnt.</p>
|
170
|
-
|
171
|
-
|
172
|
-
<h3>zoonar.de</h3>
|
173
|
-
|
174
|
-
|
175
|
-
<p>Bei zoonar.de wiederum läuft es so, daß du erst nur die Bilder hochlädst, dann
|
176
|
-
werden sie begutachtet; angenommen oder abgelehnt und erst wenn sie
|
177
|
-
angenommen wurden, kannst du Schlagworte vergeben. Dies hat natürlich den
|
178
|
-
Vorteil, daß man für abgelehnte Photos erst gar keine Schlagworte vergeben muß
|
179
|
-
(kann).</p>
|
180
|
-
|
181
|
-
|
182
|
-
<h3>photocase.de</h3>
|
183
|
-
|
184
|
-
|
185
|
-
<p>Bei photocase.de lädst du ebenfalls zuerst deinen Photos hoch, diese werden
|
186
|
-
dann entweder angenommen oder abgelehnt. Bei angenommenen Bilder bearbeitest
|
187
|
-
du diese auf deren Seite weiter (eigentlich wie bei zoonar.de). Als nettes
|
188
|
-
Gimmick bei photocase kannst du bei deinen Photos sehen, an welchem Platz
|
189
|
-
sie sich aktuell in der Warteschlage der zu begutachtenden Photos befinden.</p>
|
190
|
-
|
191
|
-
|
192
|
-
<p><i>Click on the Browse button to search your computer for the photo you’d like to upload. We accept <span class="caps">JPG</span> and <span class="caps">TIFF</span> files. Please pay close attention to the minimum resolution requirement of 1600×1200 pixels, the image quality (e.g. not overly compressed) and the content of the image itself (e.g. it does not contain any material that you don’t hold the copyright to).
|
193
|
-
</i></p>
|
194
|
-
|
195
|
-
|
196
164
|
<h2>Demonstration of usage</h2>
|
197
165
|
|
198
166
|
|
@@ -237,6 +205,72 @@ Starte dann einfach das Programm am nächsten Tag noch einmal, um den Rest der
|
|
237
205
|
Photos hochzuladen!</p>
|
238
206
|
|
239
207
|
|
208
|
+
<p>Statistik über gesendete Photos</p>
|
209
|
+
|
210
|
+
|
211
|
+
<p>Der Schalter—stats zeigt ein Statistik über die Anzahl der gesendeten Photos
|
212
|
+
innerhalb der letzten 10 Tage, aufgeteilt nach Site.
|
213
|
+
Außerdem eine Summenzeile über alle bisher gesendeten Photos. Achtung: Diese
|
214
|
+
Summen beziehen sich nicht auf die letzen zuvor aufgelisteten Tage sondern auf
|
215
|
+
sämtliche bisher gesendeten Photos.</p>
|
216
|
+
|
217
|
+
|
218
|
+
<pre>
|
219
|
+
$ multistockphoto --stats
|
220
|
+
Statistics
|
221
|
+
| fotolia | zoonar | photocase | total
|
222
|
+
2008-05-23 | 0 | 0 | 0 | 0
|
223
|
+
2008-05-22 | 7 | 7 | 7 | 21
|
224
|
+
2008-05-21 | 4 | 4 | 3 | 11
|
225
|
+
2008-05-20 | 7 | 6 | 6 | 19
|
226
|
+
2008-05-19 | 5 | 9 | 5 | 19
|
227
|
+
2008-05-18 | 6 | 6 | 6 | 18
|
228
|
+
2008-05-17 | 7 | 7 | 7 | 21
|
229
|
+
2008-05-16 | 7 | 7 | 6 | 20
|
230
|
+
2008-05-15 | 6 | 6 | 6 | 18
|
231
|
+
2008-05-14 | 0 | 1 | 1 | 2
|
232
|
+
|
233
|
+
total | 251 | 174 | 250 | 675
|
234
|
+
</pre>
|
235
|
+
|
236
|
+
<p>Auflisten aller komplett gesendeten Photos</p>
|
237
|
+
|
238
|
+
|
239
|
+
<p>Um Photos aufzulisten, die bereits an alle Photo-Sites gesendet wurden, gibt
|
240
|
+
es den Schalter—list-done</p>
|
241
|
+
|
242
|
+
|
243
|
+
<p>Verschieben aller komplett gesendeten Photos ins done-Directory</p>
|
244
|
+
|
245
|
+
|
246
|
+
<p>Falls du Photos aus dem Arbeitsdirectory löschen möchtest (aus Platzgründen oder
|
247
|
+
weil du alte Dateien dort nicht mehr haben willst), die bereits an alle
|
248
|
+
definierten Sites gesendet wurden, rufe</p>
|
249
|
+
|
250
|
+
|
251
|
+
<pre>
|
252
|
+
multistockphoto --purge-done
|
253
|
+
</pre>
|
254
|
+
|
255
|
+
<p>auf!</p>
|
256
|
+
|
257
|
+
|
258
|
+
<p>Daraufhin werden alle komplett gesendeten Photos ins Directory ‘done’ verschoben.
|
259
|
+
Das done-Directory wird automatisch angelegt, falls es noch nicht existiert.</p>
|
260
|
+
|
261
|
+
|
262
|
+
<p>Die Dateien im done-Directory kannst du nun entweder löschen oder, je nach
|
263
|
+
Bedarf irgendwie archivieren.</p>
|
264
|
+
|
265
|
+
|
266
|
+
<p>Bitte beachte aber, daß, falls du später eine weitere Photo-Site definierst,
|
267
|
+
diese alten Bilder nicht mehr an die neue Photo-Site geschickt werden. Falls
|
268
|
+
du sie jedoch im Arbeitsverzeichnis beläßt, werden auch diese alten Bilder
|
269
|
+
an eventuelle neue Photo-Sites versendet.
|
270
|
+
Du kannst aber jederzeit die verschobenen oder archivierten Bilder wieder ins
|
271
|
+
Arbeitsverzeichnis kopieren. Bereits erfolgte Uploads werden davon nicht beeinflußt.</p>
|
272
|
+
|
273
|
+
|
240
274
|
<h3>Hoch- und Querformat</h3>
|
241
275
|
|
242
276
|
|
@@ -278,6 +312,53 @@ wurde, dann drehe das Bild vor dem Hochladen mit dem Schalter ‘—rota
|
|
278
312
|
einen anderen Programm, welches Bilde drehen kann!</p>
|
279
313
|
|
280
314
|
|
315
|
+
<h2>Bisher realisierte Sites</h2>
|
316
|
+
|
317
|
+
|
318
|
+
<p>Diese Programm arbeitet zum gegenwärtigen Zeitpunkt mit den im folgenden
|
319
|
+
beschriebenen Photo-Sites zusammen. Weitere sind geplant. Wenn du weitere Sites
|
320
|
+
realisiert haben möchtest, schreib mir!</p>
|
321
|
+
|
322
|
+
|
323
|
+
<p>Ebenso bin ich auch bereit (exklusive) kommerzielle Entwicklung für weitere Sites
|
324
|
+
anzubieten.</p>
|
325
|
+
|
326
|
+
|
327
|
+
<h3>fotolia.de</h3>
|
328
|
+
|
329
|
+
|
330
|
+
<p>Bei fotolia.de lädst du deine Fotos hoch. Anschließend mußt du noch Stichworte
|
331
|
+
vergeben und zu jedem Bild angeben, mit welcher Lizenz dieses angeboten werden
|
332
|
+
soll. Erst dann werden deine Bilder begutachtet und entweder angenommen oder
|
333
|
+
abgelehnt.</p>
|
334
|
+
|
335
|
+
|
336
|
+
<h3>zoonar.de</h3>
|
337
|
+
|
338
|
+
|
339
|
+
<p>Bei zoonar.de wiederum läuft es so, daß du zuerst nur die Bilder hochlädst, dann
|
340
|
+
werden sie begutachtet; angenommen oder abgelehnt und erst wenn sie
|
341
|
+
angenommen wurden, kannst du Schlagworte vergeben. Dies hat natürlich den
|
342
|
+
Vorteil, daß man für abgelehnte Photos erst gar keine Schlagworte vergeben muß
|
343
|
+
(kann).
|
344
|
+
Mein Shop bei Zoonar ist übrigens unter http://www.zoonar.de/shop/thopre zu
|
345
|
+
zu erreichen. Kauft fleißig bei mir ein! ;-)</p>
|
346
|
+
|
347
|
+
|
348
|
+
<h3>photocase.de</h3>
|
349
|
+
|
350
|
+
|
351
|
+
<p>Bei photocase.de lädst du ebenfalls zuerst deine Photos hoch, diese werden
|
352
|
+
dann entweder angenommen oder abgelehnt. Bei angenommenen Bilder bearbeitest
|
353
|
+
du diese auf deren Seite weiter (eigentlich wie bei zoonar.de). Als nettes
|
354
|
+
Gimmick bei photocase kannst du bei deinen Photos sehen, an welchem Platz
|
355
|
+
sie sich aktuell in der Warteschlage der zu begutachtenden Photos befinden.</p>
|
356
|
+
|
357
|
+
|
358
|
+
<p><i>Click on the Browse button to search your computer for the photo you’d like to upload. We accept <span class="caps">JPG</span> and <span class="caps">TIFF</span> files. Please pay close attention to the minimum resolution requirement of 1600×1200 pixels, the image quality (e.g. not overly compressed) and the content of the image itself (e.g. it does not contain any material that you don’t hold the copyright to).
|
359
|
+
</i></p>
|
360
|
+
|
361
|
+
|
281
362
|
<h2>Forum</h2>
|
282
363
|
|
283
364
|
|
@@ -345,7 +426,7 @@ rake install_gem</pre>
|
|
345
426
|
<p>Comments are welcome. Send an email to <a href="mailto:thopre@gmail.com">Thomas Preymesser</a> email
|
346
427
|
or via the <a href="http://groups.google.com/group/multistockphoto">forum</a></p>
|
347
428
|
<p class="coda">
|
348
|
-
<a href="FIXME email">FIXME full name</a>,
|
429
|
+
<a href="FIXME email">FIXME full name</a>, 26th May 2008<br>
|
349
430
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
350
431
|
</p>
|
351
432
|
</div>
|