OSDN Git Service

fix:pp link
[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 license_name email token"\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 lsname = ARGV[2]\r
18 email = ARGV[3]\r
19 auth = ARGV[4]\r
20 \r
21 class Uploader\r
22   def initialize host, dirname, lsname, email, auth\r
23     @host = host\r
24     @dirname = dirname\r
25     @lsname = lsname\r
26     @email = email\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, {email: @email, token: @auth})\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, {email: @email, token: @auth})\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_op\r
55     Dir.glob File.expand_path(@dirname) + '/*' do |fn|\r
56       ext = File.extname(fn).downcase\r
57       bn = File.basename(fn, ".*")\r
58       case ext\r
59       when '.png', '.gif', '.jpeg'\r
60         custom_attr_file = File.dirname(fn) + '/' + bn + '.json'\r
61         attr = JSON.parse(File.open(custom_attr_file).read)\r
62         yield fn, attr\r
63       end\r
64     end\r
65   end\r
66   \r
67   def upload fn\r
68     oid = nil\r
69     b = Base64.encode64(File.open(fn, 'rb').read)\r
70     u = @host + 'original_pictures'\r
71     begin\r
72       r = RestClient.post(u, \r
73         {:original_picture => {:file  => b}}.to_json, \r
74         :content_type => :json, :accept => :json, :email => @email, :token => @auth\r
75       )\r
76       o = JSON.parse r\r
77       oid = o['id']\r
78     rescue\r
79       puts ' failed: ' + r.to_s\r
80     end\r
81     oid\r
82   end\r
83   \r
84   def original_picture_license oid, lgid, lsid, en, attr\r
85     rp = nil\r
86     u = @host + '/original_picture_licenses'\r
87     param = {\r
88       :original_picture_id => oid, \r
89       :license_group_id => lgid, \r
90       :license_id => lsid, \r
91       :license_group_module_name => en, \r
92       :license_settings => attr, \r
93     }\r
94     begin\r
95       r = RestClient.post(u, \r
96         param.to_json,\r
97         :content_type => :json, :accept => :json, :email => @email, :token => @auth\r
98       )\r
99       resp = JSON.parse r\r
100       rp = resp['item']\r
101     rescue\r
102       puts ' failed: ' + u.to_s\r
103       puts param\r
104       puts r.to_s\r
105     end\r
106     rp\r
107   end\r
108   \r
109   def publish oid, lgid, rp\r
110     res = nil\r
111     u = @host + 'resource_pictures'\r
112     attr = {\r
113       :original_picture_id => oid, \r
114       :original_picture_license_group => {\r
115         :original_picture_id => oid, :license_group_id => lgid\r
116       }, \r
117       :resource_picture => rp, \r
118     }\r
119     begin\r
120       r = RestClient.post(u, \r
121         attr.to_json,\r
122         :content_type => :json, :accept => :json, :email => @email, :token => @auth\r
123       )\r
124       res = JSON.parse r\r
125     rescue\r
126       puts ' failed: ' + r.to_s\r
127     end\r
128     res\r
129   end\r
130   \r
131   def publish_all\r
132     each_op do |imgfile, attr|\r
133       puts 'uploading: ' + imgfile\r
134       oid = self.upload imgfile\r
135       next unless oid\r
136       puts 'success: ' + oid.to_s\r
137       ls = @licenses[@lsname]\r
138       unless ls\r
139         puts 'not detect licenses: ' + @lsname.to_s\r
140         next\r
141       end\r
142       lsid = ls['id']\r
143       lgid = ls['license_group_id'].to_i\r
144       lg = @license_groups[lgid]\r
145       en = lg['module_name']\r
146       confirm = self.original_picture_license oid, lgid, lsid, en, attr\r
147       puts 'publishing: ' + @lsname.to_s\r
148       r = self.publish oid, lgid, confirm\r
149       puts 'success: ' + r['id'].to_s\r
150     end\r
151   end\r
152   \r
153 end\r
154 \r
155 u = Uploader.new host, dirname, lsname, email, auth\r
156 u.publish_all\r
157 \r