3 require 'active_support/all'
\r
4 require 'rest_client'
\r
10 puts "uploader.rb src_host src_auth dest_host dest_auth"
\r
11 puts "upload on child dirs"
\r
21 def initialize src_host, src_auth, dest_host, dest_auth
\r
22 @src_host = src_host
\r
23 @src_auth = src_auth
\r
24 @dest_host = dest_host
\r
25 @dest_auth = dest_auth
\r
27 self.licenses(@src_host).each do |l|
\r
28 @src_licenses[l['id'].to_i] = l
\r
31 self.licenses(@dest_host).each do |l|
\r
32 @dest_licenses[l['name']] = l
\r
34 @src_speech_balloon_templates = {}
\r
35 self.speech_balloon_templates(@src_host, @src_auth).each do |sb|
\r
36 @src_speech_balloon_templates[sb['id'].to_i] = sb
\r
38 @dest_speech_balloon_templates = {}
\r
39 self.speech_balloon_templates(@dest_host, @dest_auth).each do |sb|
\r
40 @dest_speech_balloon_templates[sb['name']] = sb
\r
42 @src_writing_formats = {}
\r
43 self.writing_formats( @dest_host, @dest_auth).each do |wf|
\r
44 # self.writing_formats(@src_host, @src_auth).each do |wf|
\r
45 @src_writing_formats[wf['id'].to_i] = wf
\r
47 @dest_writing_formats = {}
\r
48 self.writing_formats(@dest_host, @dest_auth).each do |wf|
\r
49 @dest_writing_formats[wf['name']] = wf
\r
51 @src_system_pictures = {}
\r
52 self.system_pictures(@src_host, @src_auth).each do |sp|
\r
53 @src_system_pictures[sp['id'].to_i] = sp
\r
55 @dest_system_pictures = {}
\r
56 self.system_pictures(@dest_host, @dest_auth).each do |sp|
\r
57 @dest_system_pictures[sp['md5']] = sp
\r
63 u = host + 'licenses.json'
\r
64 r = RestClient.get(u, :params => {:page_size => 100})
\r
68 def license_groups host
\r
70 u = host + 'license_groups.json'
\r
71 r = RestClient.get(u, :params => {:page_size => 100})
\r
74 res[l['id'].to_i] = l
\r
79 def speech_balloon_templates host, auth
\r
81 u = host + 'speech_balloon_templates.json'
\r
82 r = RestClient.get(u, :params => {:page_size => 100, :auth_token => auth})
\r
86 def writing_formats host, auth
\r
88 u = host + 'writing_formats.json'
\r
89 r = RestClient.get(u, :params => {:page_size => 100, :auth_token => auth})
\r
93 def system_pictures host, auth
\r
95 u = host + 'system_pictures.json'
\r
96 r = RestClient.get(u, :params => {:page_size => 100, :auth_token => auth})
\r
100 def panels host, auth
\r
102 u = host + 'home/panels.json'
\r
103 r = RestClient.get(u, :params => {:page_size => 100, :auth_token => auth})
\r
105 ary.each do |panel|
\r
106 res[panel['id'].to_i] = panel
\r
111 def resource_picture md5, host, auth
\r
113 u = host + 'pictures/search.json'
\r
114 r = RestClient.get(u, :params => {:md5 => md5, :auth_token => auth})
\r
119 self.panels(@src_host, @src_auth).each do |key, panel_json|
\r
120 puts 'source panel:' + key.to_s
\r
121 # 今はAPIの仕様が変わっているので、そのうち書き直す
\r
122 elements = panel_json['elements']
\r
123 panel_json.delete 'elements'
\r
125 elements.each do |e|
\r
127 element_name = 'panel_pictures'
\r
128 puts 'pp:' + e['id'].to_s
\r
129 rps = self.resource_picture e['picture']['md5'], @dest_host, @dest_auth
\r
132 puts 'picture ok(' + rp['id'].to_s + ')'
\r
138 src_ls_name = @src_licenses[e['picture']['license_id']]['name'].gsub /License\:/, 'Licenses:'
\r
139 puts 'license:' + e['picture']['license_id'].to_s + '(' + src_ls_name + ')'
\r
140 if dl = @dest_licenses[src_ls_name]
\r
141 puts 'license ok(' + dl['id'].to_s + ')'
\r
147 e['picture_id'] = rp['id']
\r
150 elsif e['classname']
\r
151 element_name = 'speech_balloons'
\r
152 puts 'sb:' + e['id'].to_s
\r
153 src_sb_name = @src_speech_balloon_templates[e['speech_balloon_template_id']]['name']
\r
154 puts 'speech_balloon_template:' + e['speech_balloon_template_id'].to_s + '(' + src_sb_name + ')'
\r
155 if dsb = @dest_speech_balloon_templates[src_sb_name]
\r
156 puts 'speech_balloon_template ok(' + dsb['id'].to_s + ')'
\r
158 puts 'no speech_balloon_template'
\r
162 src_sp_md5 = @src_system_pictures[e['balloon']['system_picture_id']]['md5']
\r
163 puts 'balloon picture:' + e['balloon']['system_picture_id'].to_s + '(' + src_sp_md5 + ')'
\r
164 if dsp = @dest_system_pictures[src_sp_md5]
\r
165 puts 'balloon picture ok(' + dsp['id'].to_s + ')'
\r
167 puts 'no balloon picture'
\r
171 src_wf_name = @src_writing_formats[e['speech']['writing_format_id']]['name']
\r
172 puts 'speech writing_format:' + e['speech']['writing_format_id'].to_s + '(' + src_wf_name + ')'
\r
173 if dwf = @dest_writing_formats[src_wf_name]
\r
174 puts 'speech writing_format ok(' + dwf['id'].to_s + ')'
\r
176 puts 'no speech writing_format'
\r
180 e['speech_balloon_template_id'] = dsb['id']
\r
181 e["speech_balloon_template_settings"] = e["settings"]
\r
182 e.delete 'settings'
\r
183 e["speech_balloon_template_classname"] = dsb["classname"]
\r
184 e.delete 'classname'
\r
185 #e.delete 'speech_balloon_template'
\r
186 balloon = e['balloon']
\r
188 balloon.delete 'id'
\r
189 balloon.delete 'speech_balloon_id'
\r
190 balloon["speech_balloon_template_settings"] = e["settings"]
\r
191 balloon.delete 'settings'
\r
192 balloon['system_picture_id'] = dsp['id']
\r
193 balloon['speech_balloon_template_id'] = dsb['id']
\r
194 balloon["speech_balloon_template_classname"] = dsb["classname"]
\r
196 speech = e['speech']
\r
199 speech.delete 'speech_balloon_id'
\r
200 speech["speech_balloon_template_settings"] = e["settings"]
\r
201 speech.delete 'settings'
\r
202 speech['speech_balloon_template_id'] = dsb['id']
\r
203 speech["speech_balloon_template_classname"] = dsb["classname"]
\r
204 speech['writing_format_id'] = dwf['id']
\r
205 # speech["writing_format_classname"] = 'Pettanr' + dwf["classname"]
\r
206 speech["writing_format_classname"] = dwf["classname"]
\r
208 e['balloon_attributes'] = balloon
\r
209 e['speech_attributes'] = speech
\r
211 element_name = 'ground_colors'
\r
212 puts 'gc:' + e['id'].to_s
\r
214 element_name = 'ground_pictures'
\r
215 puts 'gp:' + e['id'].to_s
\r
216 rps = self.resource_picture e['picture']['md5'], @dest_host, @dest_auth
\r
219 puts 'picture ok(' + rp['id'].to_s + ')'
\r
225 #e['license_id'] = dl['id']
\r
226 e['picture_id'] = rp['id']
\r
227 #e.delete 'license'
\r
234 e.delete 'panel_id'
\r
235 panel_json[element_name + '_attributes'] ||= {}
\r
236 panel_json[element_name + '_attributes']['new' + eid.to_s] = e
\r
239 puts '============ importable'
\r
240 panel_json.delete 'id'
\r
241 panel_json.delete 'author'
\r
242 panel_json.delete 'author_id'
\r
243 panel_json.delete "created_at"
\r
244 panel_json.delete 'updated_at'
\r
250 self.each_subdir do |filename|
\r
255 Dir.glob(filename + '/*') do |fn|
\r
256 ext = File.extname(fn).downcase
\r
259 json = JSON.parse(File.open(fn).read)
\r
260 lsname = json["license_name"]
\r
261 formname = json["formname"]
\r
262 attr = json["attributes"]
\r
263 when '.png', '.gif', '.jpeg'
\r
267 if imgfile and lsname and formname and attr
\r
268 yield imgfile, lsname, formname, attr
\r
275 b = Base64.encode64(File.open(fn, 'rb').read)
\r
276 u = @host + 'original_pictures'
\r
278 r = RestClient.post(u,
\r
279 {:original_picture => {:file => b}, :auth_token => @auth}.to_json,
\r
280 :content_type => :json, :accept => :json
\r
285 puts ' failed: ' + r.to_s
\r
290 def publish oid, lgid, rp
\r
292 u = @host + 'resource_pictures'
\r
294 :original_picture_id => oid,
\r
295 :original_picture_license_group => {
\r
296 :original_picture_id => oid, :license_group_id => lgid
\r
298 :resource_picture => {
\r
299 :original_picture_id => oid,
\r
300 :license_id => rp['license_id'],
\r
301 :artist_name => rp['artist_name'],
\r
302 :system_picture_id => rp['system_picture_id'],
\r
303 :license_group_classname => rp['license_group_classname'],
\r
304 :license_group_settings => rp['license_group_settings'],
\r
305 :credit_picture_settings => rp['credit_picture_settings'],
\r
306 :license_settings => rp['license_settings']
\r
308 :auth_token => @auth
\r
311 r = RestClient.post(u,
\r
313 :content_type => :json, :accept => :json
\r
317 puts ' failed: ' + r.to_s
\r
323 each_opset do |imgfile, lsname, formname, attr|
\r
324 puts 'uploading: ' + imgfile
\r
325 oid = self.upload imgfile
\r
327 puts 'success: ' + oid.to_s
\r
328 ls = @licenses[lsname]
\r
330 puts 'not detect licenses: ' + lsname.to_s
\r
334 lgid = ls['license_group_id'].to_i
\r
335 lg = @license_groups[lgid]
\r
336 en = lg['classname']
\r
337 puts 'building: ' + formname
\r
338 rp = self.resource_picture oid, lgid, lsid, en, formname, attr
\r
340 puts 'publishing: ' + lsname
\r
341 r = self.publish oid, lgid, rp
\r
342 puts 'success: ' + r['id'].to_s
\r
348 u = Importer.new src_host, src_auth, dest_host, dest_auth
\r
350 u.each_panel do |panel_json|
\r
351 u = dest_host + 'panels'
\r
352 File.open('/Sites/panel_create.json', 'w') do |f|
\r
353 f.write JSON.pretty_generate(panel_json)
\r
356 r = RestClient.post(u,
\r
357 {:json => panel_json, :auth_token => dest_auth}.to_json,
\r
358 :content_type => :json, :accept => :json
\r
362 puts ' failed: ' + r.to_s
\r