class Ruboty::Handlers::Pux

Public Instance Methods

judge(message) click to toggle source
# File lib/ruboty/handlers/pux.rb, line 15
def judge(message)
  ruboty_sorry = 'わかんない…'

  p "POST #{request_url}"

  response = agent.post(request_url, params(message))
  face_recognition = JSON.parse(response.body)['results']['faceRecognition']

  if face_recognition['errorInfo'].nil?
    message.reply(ruboty_sorry)
  else
    face_info = face_recognition['detectionFaceInfo'][0]
    gender_info = face_info['genderJudge']['genderResult']

    age     = face_info['ageJudge']['ageResult']       || ruboty_sorry
    animal  = face_info['enjoyJudge']['similarAnimal'] || ruboty_sorry
    smile   = face_info['smileJudge']['smileLevel']    || ruboty_sorry
    doya    = face_info['enjoyJudge']['doyaLevel']     || ruboty_sorry
    trouble = face_info['enjoyJudge']['troubleLevel']  || ruboty_sorry

    if gender_info.nil?
      gender = ruboty_sorry
    else
      gender = gender_info == 0 ? "おとこのこ" : "おんなのこ"
    end

    result_message = ''
    result_message << "ねんれい: #{age}さい"
    result_message << "\nせいべつ: #{gender}"
    result_message << "\nどうぶつ: #{animal}"
    result_message << "\nえがお: #{smile}%"
    result_message << "\nどやがお: #{doya}%"
    result_message << "\nこまった: #{trouble}%"
  end

  message.reply(result_message)
rescue Exception => e
  Ruboty.logger.error(%<Error: #{e.class}: #{e.message}\n#{e.backtrace.join("\n")}>)
  message.reply(ruboty_sorry)
end

Private Instance Methods

agent() click to toggle source
# File lib/ruboty/handlers/pux.rb, line 64
def agent
  @agent ||= Mechanize.new
end
params(message) click to toggle source
# File lib/ruboty/handlers/pux.rb, line 68
def params(message)
  {
    apiKey: ENV['PUX_API_KEY'],
    imageURL: message[:query],
    enjoyJudge: 1,
    response: 'json'
  }
end
request_url() click to toggle source
# File lib/ruboty/handlers/pux.rb, line 58
def request_url
  if ENV['PUX_REQUEST_DOMAIN']
    'http://' + ENV['PUX_REQUEST_DOMAIN'] + ':8080/webapi/face.do'
  end
end