class FaceAi

Constants

APIS

Public Class Methods

new(access_token, options={}) click to toggle source
# File lib/baiduAiFace/client.rb, line 110
def initialize(access_token, options={})
  decode = options.fetch :decode, true
  make_hash = lambda { Hash.new {|h,k| h[k] = make_hash.call make_hash } }

  APIS.each do |api|
    m = self
    breadcrumbs = api.split('/')[1..-1]
    breadcrumbs[0..-2].each do |breadcrumb|
      unless m.instance_variable_defined? "@#{breadcrumb}"
        m.instance_variable_set "@#{breadcrumb}", Object.new
        m.singleton_class.class_eval do
          attr_reader breadcrumb
        end
      end
      m = m.instance_variable_get "@#{breadcrumb}"
    end

    m.define_singleton_method breadcrumbs[-1] do |*args|
      form = MultiPart.new
      fields = {'access_token' => access_token}
      (args[0] || {}).each do |k,v|
        if k.to_s == 'img'  # via POST
          form.add_file k, v
        else
          fields[k] = v.is_a?(Enumerable) ? v.to_a.join(',') : v
        end
      end

      if form.has_file?
          req.set_content_type form.content_type
          req.body = form.inspect
          req['Content-Length'] = req.body.size
        end

        url = "https://aip.baidubce.com/rest/2.0/face/v3#{api}"
        p url
        p fields
        uri = URI.parse(url)
        res = Net::HTTP.post_form uri, fields
        res.body.gsub! 'null', "0"
        eval res.body
    end
  end
end