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