OSDN Git Service

create auto publisher
authoryasushiito <yas@pen-chan.jp>
Sun, 24 Mar 2013 01:35:08 +0000 (10:35 +0900)
committeryasushiito <yas@pen-chan.jp>
Sun, 24 Mar 2013 01:35:08 +0000 (10:35 +0900)
script/uploader.rb

index 9af12a2..99f0a3e 100644 (file)
 #サポートツール\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