OSDN Git Service

fix: any
[pettanr/pettanr.git] / bin / panel_import.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 src_host src_email src_token dest_host dest_email dest_token"\r
11   puts "upload on child dirs"\r
12   exit\r
13 end\r
14 \r
15 src_host = ARGV[0]\r
16 src_email= ARGV[1]\r
17 src_token = ARGV[2]\r
18 dest_host = ARGV[3]\r
19 dest_email = ARGV[4]\r
20 dest_token = ARGV[5]\r
21 \r
22 class Importer\r
23   def initialize src_host, src_email, src_token, dest_host, dest_email, dest_token\r
24     @src_host = src_host\r
25     @src_email = src_email\r
26     @src_token = src_token\r
27     @dest_host = dest_host\r
28     @dest_email = dest_email\r
29     @dest_token = dest_token\r
30     @src_licenses = {}\r
31     self.licenses(@src_host).each do |l|\r
32       @src_licenses[l['id'].to_i] = l\r
33     end\r
34     @dest_licenses = {}\r
35     self.licenses(@dest_host).each do |l|\r
36       @dest_licenses[l['name']] = l\r
37     end\r
38     @src_speech_balloon_templates = {}\r
39     self.speech_balloon_templates(@src_host, @src_email, @src_token).each do |sb|\r
40       @src_speech_balloon_templates[sb['id'].to_i] = sb\r
41     end\r
42     @dest_speech_balloon_templates = {}\r
43     self.speech_balloon_templates(@dest_host, @src_email, @src_token).each do |sb|\r
44       @dest_speech_balloon_templates[sb['name']] = sb\r
45     end\r
46     @src_writing_formats = {}\r
47     self.writing_formats(@dest_host, @src_email, @src_token).each do |wf|\r
48   #  self.writing_formats(@src_host, @src_auth).each do |wf|\r
49       @src_writing_formats[wf['id'].to_i] = wf\r
50     end\r
51     @dest_writing_formats = {}\r
52     self.writing_formats(@dest_host, @dest_email, @dest_token).each do |wf|\r
53       @dest_writing_formats[wf['name']] = wf\r
54     end\r
55     @src_system_pictures = {}\r
56     self.system_pictures(@src_host, @dest_email, @dest_token).each do |sp|\r
57       @src_system_pictures[sp['id'].to_i] = sp\r
58     end\r
59     @dest_system_pictures = {}\r
60     self.system_pictures(@dest_host, @dest_email, @dest_token).each do |sp|\r
61       @dest_system_pictures[sp['md5']] = sp\r
62     end\r
63   end\r
64   \r
65   def licenses host\r
66     res = {}\r
67     u = host + 'licenses.json'\r
68     r = RestClient.get(u, :params => {:page_size  => 100})\r
69     JSON.parse r\r
70   end\r
71   \r
72   def license_groups host\r
73     res = {}\r
74     u = host + 'license_groups.json'\r
75     r = RestClient.get(u, :params => {:page_size  => 100})\r
76     ary = JSON.parse r\r
77     ary.each do |l|\r
78       res[l['id'].to_i] = l\r
79     end\r
80     res\r
81   end\r
82   \r
83   def speech_balloon_templates host, email, token\r
84     res = {}\r
85     u = host + 'speech_balloon_templates.json'\r
86     r = RestClient.get(u, {:params => {:page_size  => 100}}, {:email => email, :token => token})\r
87     JSON.parse r\r
88   end\r
89   \r
90   def writing_formats host, email, token\r
91     res = {}\r
92     u = host + 'writing_formats.json'\r
93     r = RestClient.get(u, {:params => {:page_size  => 100}}, {:email => email, :token => token})\r
94     JSON.parse r\r
95   end\r
96   \r
97   def system_pictures host, email, token\r
98     res = {}\r
99     u = host + 'system_pictures.json'\r
100     r = RestClient.get(u, {:params => {:page_size  => 100}}, {:email => email, :token => token})\r
101     JSON.parse r\r
102   end\r
103   \r
104   def panels host, email, token\r
105     res = {}\r
106     u = host + 'home/panels.json'\r
107     r = RestClient.get(u, {:params => {:page_size  => 100}}, {:email => email, :token => token})\r
108     resp = JSON.parse r\r
109     status = resp['page_status']\r
110     resp['list'].each do |panel|\r
111       res[panel['id'].to_i] = panel\r
112     end\r
113     res\r
114   end\r
115   \r
116   def picture id, host, email, token\r
117     res = {}\r
118     u = host + 'pictures/'\r
119     r = RestClient.get(u, {:params => {:id => id}}, {:email => email, :token => token})\r
120     JSON.parse r\r
121   end\r
122   \r
123   def search_resource_picture md5, host, email, token\r
124     res = {}\r
125     u = host + 'resource_pictures/search.json'\r
126     r = RestClient.get(u, {:params => {:md5 => md5}}, {:email => email, :token => token})\r
127     JSON.parse r\r
128   end\r
129   \r
130   def prepare_panel_picture panel_picture\r
131     element_name = 'panel_pictures'\r
132     puts 'panel_picture:' + panel_picture['id'].to_s\r
133     # get picture from src\r
134     picture = self.picture panel_picture['picture_id'], @src_host, @src_email, @src_token\r
135     puts 'picture:' + picture['id'].to_s\r
136     # get resource_picture if exists?\r
137     # choose latest resource_picture if find same rp at server\r
138     rps = self.search_resource_picture picture['md5'], @dest_host, @dest_email, @dest_token\r
139     if rps.any?\r
140       rp = rps.first\r
141       puts 'resource picture ok:' + rp['id'].to_s + '(' + rp['md5'].to_s + ')'\r
142     else\r
143       puts 'no picture'\r
144       c = false\r
145       return\r
146     end\r
147     # get lisence's id if exists?\r
148     src_ls_name = @src_licenses[picture['license_id']]['name'].gsub /License\:/, 'Licenses:'\r
149     puts 'license:' + picture['license_id'].to_s + '(' + src_ls_name + ')'\r
150     if dl = @dest_licenses[src_ls_name]\r
151       puts 'license ok(' + dl['id'].to_s + ')'\r
152     else\r
153       puts 'no license'\r
154       c = false\r
155       return\r
156     end\r
157     panel_picture['picture_id'] = rp['picture_id']\r
158   end\r
159   \r
160   def prepare_speech_balloon speech_balloon\r
161     element_name = 'speech_balloons'\r
162     puts 'sb:' + e['id'].to_s\r
163     src_sb_name = @src_speech_balloon_templates[e['speech_balloon_template_id']]['name']\r
164     puts 'speech_balloon_template:' + e['speech_balloon_template_id'].to_s + '(' + src_sb_name + ')'\r
165     if dsb = @dest_speech_balloon_templates[src_sb_name]\r
166       puts 'speech_balloon_template ok(' + dsb['id'].to_s + ')'\r
167     else\r
168       puts 'no speech_balloon_template'\r
169       c = false\r
170       return\r
171     end\r
172     src_sp_md5 = @src_system_pictures[e['balloon']['system_picture_id']]['md5']\r
173     puts 'balloon picture:' + e['balloon']['system_picture_id'].to_s + '(' + src_sp_md5 + ')'\r
174     if dsp = @dest_system_pictures[src_sp_md5]\r
175       puts 'balloon picture ok(' + dsp['id'].to_s + ')'\r
176     else\r
177       puts 'no balloon picture'\r
178       c = false\r
179       return\r
180     end\r
181     src_wf_name = @src_writing_formats[e['speech']['writing_format_id']]['name']\r
182     puts 'speech writing_format:' + e['speech']['writing_format_id'].to_s + '(' + src_wf_name + ')'\r
183     if dwf = @dest_writing_formats[src_wf_name]\r
184       puts 'speech writing_format ok(' + dwf['id'].to_s + ')'\r
185     else\r
186       puts 'no speech writing_format'\r
187       c = false\r
188       return\r
189     end\r
190     e['speech_balloon_template_id'] = dsb['id']\r
191     e["speech_balloon_template_settings"] = e["settings"]\r
192     e.delete 'settings'\r
193     e["speech_balloon_template_classname"] = dsb["classname"]\r
194     e.delete 'classname'\r
195     #e.delete 'speech_balloon_template'\r
196     balloon = e['balloon']\r
197     e.delete 'balloon'\r
198     balloon.delete 'id'\r
199     balloon.delete 'speech_balloon_id'\r
200     balloon["speech_balloon_template_settings"] = e["settings"]\r
201     balloon.delete 'settings'\r
202     balloon['system_picture_id'] = dsp['id']\r
203     balloon['speech_balloon_template_id'] = dsb['id']\r
204     balloon["speech_balloon_template_classname"] = dsb["classname"]\r
205     \r
206     speech = e['speech']\r
207     e.delete 'speech'\r
208     speech.delete 'id'\r
209     speech.delete 'speech_balloon_id'\r
210     speech["speech_balloon_template_settings"] = e["settings"]\r
211     speech.delete 'settings'\r
212     speech['speech_balloon_template_id'] = dsb['id']\r
213     speech["speech_balloon_template_classname"] = dsb["classname"]\r
214     speech['writing_format_id'] = dwf['id']\r
215 #      speech["writing_format_classname"] = 'Pettanr' + dwf["classname"]\r
216     speech["writing_format_classname"] = dwf["classname"]\r
217     \r
218     e['balloon_attributes'] = balloon\r
219     e['speech_attributes'] = speech\r
220   end\r
221   \r
222   def prepare_ground_color ground_color\r
223     element_name = 'ground_colors'\r
224     puts 'ground_color:' + ground_color['id'].to_s\r
225   end\r
226   \r
227   def prepare_ground_picture ground_picture\r
228     element_name = 'ground_pictures'\r
229     puts 'ground_picture:' + ground_picture['id'].to_s\r
230     rps = self.resource_picture ground_picture['picture']['md5'], @dest_host, @dest_auth\r
231     if rps.any?\r
232       rp = rps.first\r
233       puts 'picture ok(' + rp['id'].to_s + ')'\r
234     else\r
235       puts 'no picture'\r
236       c = false\r
237       return\r
238     end\r
239     #e['license_id'] = dl['id']\r
240     ground_picture['picture_id'] = rp['id']\r
241     #e.delete 'license'\r
242   end\r
243   \r
244   def add_attribute panel_json, attribute\r
245     eid = e['id']\r
246     e.delete 'id'\r
247     e.delete 'panel_id'\r
248     panel_json[element_name + '_attributes'] ||= {}\r
249     panel_json[element_name + '_attributes']['new' + eid.to_s] = e\r
250   end\r
251   \r
252   def each_panel\r
253     self.panels(@src_host, @src_email, @src_token).each do |key, panel_json|\r
254       puts 'source panel:' + key.to_s\r
255       c = true\r
256       panel_json['panel_pictures'].each do |panel_picture|\r
257         self.prepare_panel_picture panel_picture\r
258         self.add_attribute panel_json, panel_picture\r
259       end\r
260       panel_json['speech_balloons'].each do |speech_balloon|\r
261         self.prepare_speech_balloon speech_balloon\r
262       end\r
263       panel_json['ground_colors'].each do |ground_color|\r
264         self.prepare_ground_color ground_color\r
265       end\r
266       panel_json['ground_pictures'].each do |ground_picture|\r
267         self.prepare_ground_picture ground_picture\r
268       end\r
269       next unless c\r
270       puts '============ importable'\r
271       panel_json.delete 'id'\r
272       panel_json.delete 'author'\r
273       panel_json.delete 'author_id'\r
274       panel_json.delete "created_at"\r
275       panel_json.delete 'updated_at'\r
276       yield panel_json\r
277     end\r
278   end\r
279   \r
280 end\r
281 \r
282 u = Importer.new src_host, src_email, src_token, dest_host, dest_email, dest_token\r
283 \r
284 u.each_panel do |panel_json|\r
285   u = dest_host + 'panels'\r
286   # write log\r
287   File.open('/Sites/panel_create.json', 'w') do |f|\r
288    f.write JSON.pretty_generate(panel_json)\r
289   end\r
290   begin\r
291     r = RestClient.post(u, \r
292       {:json => panel_json}.to_json, \r
293       :content_type => :json, :accept => :json, :email => dest_email, :token => dest_token\r
294     )\r
295     res = JSON.parse r\r
296   rescue\r
297     puts ' failed: ' + r.to_s\r
298   end\r
299 end\r
300 \r
301 \r