#サポートツール\r
+require 'rubygems'\r
+require 'active_support/all'\r
require 'rest_client'\r
require 'yaml'\r
require 'json'\r
require 'base64'\r
\r
if ARGV.size < 1\r
- puts "uploader.rb dir"\r
+ puts "uploader.rb host dirname auth"\r
puts "upload on child dirs"\r
exit\r
end\r
\r
-lsname = ARGV[0]\r
-u = 'http://localhost:3000/licenses/search.json?name=' + lsname\r
-r = RestClient.get(u)\r
-p r\r
-o = JSON.parse r\r
-oid = o['id']\r
-oid\r
+host = ARGV[0]\r
+dirname = ARGV[1]\r
+auth = ARGV[2]\r
+\r
+class Uploader\r
+ def initialize host, dirname, auth\r
+ @host = host\r
+ @dirname = dirname\r
+ @auth = auth\r
+ @licenses = self.licenses\r
+ @license_groups = self.license_groups\r
+ end\r
+ \r
+ def licenses\r
+ res = {}\r
+ u = @host + 'licenses.json'\r
+ r = RestClient.get(u)\r
+ ary = JSON.parse r\r
+ ary.each do |l|\r
+ res[l['name']] = l\r
+ end\r
+ res\r
+ end\r
+\r
+ def license_groups\r
+ res = {}\r
+ u = @host + 'license_groups.json'\r
+ r = RestClient.get(u)\r
+ ary = JSON.parse r\r
+ ary.each do |l|\r
+ res[l['id'].to_i] = l\r
+ end\r
+ res\r
+ end\r
+ \r
+ def each_subdir\r
+ Dir.glob File.expand_path(@dirname) + '/*' do |filename|\r
+ if File.directory?(filename)\r
+ yield filename\r
+ end\r
+ end\r
+ end\r
+ \r
+ def each_opset \r
+ self.each_subdir do |filename|\r
+ imgfile = nil\r
+ lsname = nil\r
+ formname = nil\r
+ attr = nil\r
+ Dir.glob(filename + '/*') do |fn|\r
+ ext = File.extname(fn).downcase\r
+ case ext\r
+ when '.json'\r
+ json = JSON.parse(File.open(fn).read)\r
+ lsname = json["license_name"]\r
+ formname = json["formname"]\r
+ attr = json["attributes"]\r
+ when '.png', '.gif', '.jpeg'\r
+ imgfile = fn\r
+ end\r
+ end\r
+ if imgfile and lsname and formname and attr\r
+ yield imgfile, lsname, formname, attr\r
+ end\r
+ end\r
+ end\r
+ \r
+ def upload fn\r
+ oid = nil\r
+ b = Base64.encode64(File.open(fn, 'rb').read)\r
+ u = @host + 'original_pictures'\r
+ begin\r
+ r = RestClient.post(u, \r
+ {:original_picture => {:file => b}, :auth_token => @auth}.to_json, \r
+ :content_type => :json, :accept => :json\r
+ )\r
+ o = JSON.parse r\r
+ oid = o['id']\r
+ rescue\r
+ puts ' failed: ' + r.to_s\r
+ end\r
+ oid\r
+ end\r
+ \r
+ def resource_picture oid, lgid, lsid, en, formname, attr\r
+ rp = nil\r
+ u = @host + en.tableize + '/attributes'\r
+ attr['license_id'] = lsid\r
+ param = {\r
+ :original_picture_id => oid, \r
+ :original_picture_license_group => {\r
+ :original_picture_id => oid, :license_group_id => lgid\r
+ }, \r
+ :auth_token => @auth \r
+ }\r
+ param[formname] = attr\r
+ begin\r
+ r = RestClient.post(u, \r
+ param.to_json,\r
+ :content_type => :json, :accept => :json\r
+ )\r
+ rp = JSON.parse r\r
+ rescue\r
+ puts ' failed: ' + r.to_s\r
+ end\r
+ rp\r
+ end\r
+ \r
+ def publish oid, lgid, rp\r
+ res = nil\r
+ u = @host + 'resource_pictures'\r
+ attr = {\r
+ :original_picture_id => oid, \r
+ :original_picture_license_group => {\r
+ :original_picture_id => oid, :license_group_id => lgid\r
+ }, \r
+ :resource_picture => {\r
+ :original_picture_id => oid, \r
+ :license_id => rp['license_id'], \r
+ :artist_name => rp['artist_name'], \r
+ :classname => rp['classname'], \r
+ :credit => rp['credit'], \r
+ :settings => rp['settings']\r
+ }, \r
+ :auth_token => @auth \r
+ }\r
+ begin\r
+ r = RestClient.post(u, \r
+ attr.to_json,\r
+ :content_type => :json, :accept => :json\r
+ )\r
+ res = JSON.parse r\r
+ rescue\r
+ puts ' failed: ' + r.to_s\r
+ end\r
+ res\r
+ end\r
+ \r
+ def publish_all\r
+ each_opset do |imgfile, lsname, formname, attr|\r
+ puts 'uploading: ' + imgfile\r
+ oid = self.upload imgfile\r
+ next unless oid\r
+ puts 'success: ' + oid.to_s\r
+ ls = @licenses[lsname]\r
+ lsid = ls['id']\r
+ lgid = ls['license_group_id'].to_i\r
+ lg = @license_groups[lgid]\r
+ en = lg['classname']\r
+ puts 'building: ' + formname\r
+ rp = self.resource_picture oid, lgid, lsid, en, formname, attr\r
+ next unless rp\r
+ puts 'publishing: ' + lsname\r
+ r = self.publish oid, lgid, rp\r
+ puts 'success: ' + r['id'].to_s\r
+ end\r
+ end\r
+ \r
+end\r
+\r
+u = Uploader.new host, dirname, auth\r
+\r
+u.publish_all\r
+\r