OSDN Git Service

aa56f49f08fe54f34ba3976404d643a8a9bad3ff
[pettanr/pettanr.git] / bin / uploader.rb
1 #サポートツール\r
2 require 'rubygems'\r
3 require 'active_support/all'\r
4 require 'rest_client'\r
5 require 'yaml'\r
6 require 'json'\r
7 require 'base64'\r
8 \r
9 if ARGV.size < 1\r
10   puts "uploader.rb host dirname attr.json lsname auth"\r
11   puts "upload on child dirs"\r
12   exit\r
13 end\r
14 \r
15 host = ARGV[0]\r
16 dirname = ARGV[1]\r
17 attr_fn = ARGV[2]\r
18 lsname = ARGV[3]\r
19 auth = ARGV[4]\r
20 \r
21 class Uploader\r
22   def initialize host, dirname, attr_fn, lsname, auth\r
23     @host = host\r
24     @dirname = dirname\r
25     @attr_fn = attr_fn\r
26     @lsname = lsname\r
27     @auth = auth\r
28     @licenses = self.licenses\r
29     @license_groups = self.license_groups\r
30   end\r
31   \r
32   def licenses\r
33     res = {}\r
34     u = @host + 'licenses.json'\r
35     r = RestClient.get(u)\r
36     ary = JSON.parse r\r
37     ary['list'].each do |l|\r
38       res[l['name']] = l\r
39     end\r
40     res\r
41   end\r
42 \r
43   def license_groups\r
44     res = {}\r
45     u = @host + 'license_groups.json'\r
46     r = RestClient.get(u)\r
47     ary = JSON.parse r\r
48     ary['list'].each do |l|\r
49       res[l['id'].to_i] = l\r
50     end\r
51     res\r
52   end\r
53   \r
54   def each_subdir\r
55     Dir.glob File.expand_path(@dirname) + '/*' do |filename|\r
56       if File.directory?(filename)\r
57         yield filename\r
58       end\r
59     end\r
60   end\r
61   \r
62   def each_op\r
63     Dir.glob File.expand_path(@dirname) + '/*' do |fn|\r
64       ext = File.extname(fn).downcase\r
65       case ext\r
66       when '.png', '.gif', '.jpeg'\r
67         yield fn\r
68       end\r
69     end\r
70   end\r
71   \r
72   def upload fn\r
73     oid = nil\r
74     b = Base64.encode64(File.open(fn, 'rb').read)\r
75     u = @host + 'original_pictures'\r
76     begin\r
77       r = RestClient.post(u, \r
78         {:original_picture => {:file  => b}, :auth_token => @auth}.to_json, \r
79         :content_type => :json, :accept => :json\r
80       )\r
81       o = JSON.parse r\r
82       oid = o['id']\r
83     rescue\r
84       puts ' failed: ' + r.to_s\r
85     end\r
86     oid\r
87   end\r
88   \r
89   def original_picture_license oid, lgid, lsid, en, attr\r
90     rp = nil\r
91     u = @host + '/original_picture_licenses'\r
92     param = {\r
93       :original_picture_id => oid, \r
94       :license_group_id => lgid, \r
95       :license_id => lsid, \r
96       :license_group_module_name => en, \r
97       :license_settings => attr, \r
98       :auth_token => @auth \r
99     }\r
100     begin\r
101       r = RestClient.post(u, \r
102         param.to_json,\r
103         :content_type => :json, :accept => :json\r
104       )\r
105       rp = JSON.parse r\r
106     rescue\r
107       puts ' failed: ' + u.to_s\r
108       puts param\r
109       puts r.to_s\r
110     end\r
111     rp\r
112   end\r
113   \r
114   #confirm\r
115   def resource_picture oid, lgid, lsid, en, formname, attr\r
116     rp = nil\r
117     u = @host + en.tableize + '/attributes'\r
118     attr['license_id'] = lsid\r
119     param = {\r
120       :original_picture_id => oid, \r
121       :original_picture_license_group => {\r
122         :original_picture_id => oid, :license_group_id => lgid\r
123       }, \r
124       :auth_token => @auth \r
125     }\r
126     param[:attributes] = attr\r
127     begin\r
128       r = RestClient.post(u, \r
129         param.to_json,\r
130         :content_type => :json, :accept => :json\r
131       )\r
132       rp = JSON.parse r\r
133     rescue\r
134       puts ' failed: ' + u.to_s\r
135       puts param\r
136       puts r.to_s\r
137     end\r
138     rp\r
139   end\r
140   \r
141   def publish oid, lgid, rp\r
142     res = nil\r
143     u = @host + 'resource_pictures'\r
144     attr = {\r
145       :original_picture_id => oid, \r
146       :original_picture_license_group => {\r
147         :original_picture_id => oid, :license_group_id => lgid\r
148       }, \r
149       :resource_picture => rp, \r
150       :auth_token => @auth \r
151     }\r
152     begin\r
153       r = RestClient.post(u, \r
154         attr.to_json,\r
155         :content_type => :json, :accept => :json\r
156       )\r
157       res = JSON.parse r\r
158     rescue\r
159       puts ' failed: ' + r.to_s\r
160     end\r
161     res\r
162   end\r
163   \r
164   def publish_all\r
165     attr = JSON.parse(File.open(@attr_fn).read)\r
166     each_op do |imgfile|\r
167       puts 'uploading: ' + imgfile\r
168       oid = self.upload imgfile\r
169       next unless oid\r
170       puts 'success: ' + oid.to_s\r
171       ls = @licenses[@lsname]\r
172       unless ls\r
173         puts 'not detect licenses: ' + @lsname.to_s\r
174         next\r
175       end\r
176       lsid = ls['id']\r
177       lgid = ls['license_group_id'].to_i\r
178       lg = @license_groups[lgid]\r
179       en = lg['module_name']\r
180       confirm = self.original_picture_license oid, lgid, lsid, en, attr\r
181       puts 'publishing: ' + @lsname.to_s\r
182       r = self.publish oid, lgid, confirm\r
183       puts 'success: ' + r['id'].to_s\r
184     end\r
185   end\r
186   \r
187 end\r
188 \r
189 u = Uploader.new host, dirname, attr_fn, lsname, auth\r
190 \r
191 u.publish_all\r
192 \r