class Furirubi::Translators::JishoWebTranslator

Constants

URL

Public Instance Methods

translate(search_term, flag = 'flag') click to toggle source

@tricky: the flag is using to force-change the word to sentence

# File lib/furirubi/translators/jisho_web_translator.rb, line 12
def translate(search_term, flag = 'flag')
  words = {}
  uri = URI.join(URL, ERB::Util.url_encode(search_term + flag))

  elements = Nokogiri::HTML.parse(open(uri)).css('.japanese_word')
  elements.each do |element|
    result = parse_element(element, flag)
    words.merge!(result) unless result.nil?
  end

  words
end

Private Instance Methods

parse_element(element, flag) click to toggle source
# File lib/furirubi/translators/jisho_web_translator.rb, line 27
def parse_element(element, flag)
  # parse furigana
  if element.search('.japanese_word__furigana').size.positive?
    furigana_elements = element.search('.japanese_word__furigana')
    return parse_furigana_elements(furigana_elements)
  end

  # parse kana or symbol
  parse_general_text(element, flag)
end
parse_furigana_elements(elements) click to toggle source
# File lib/furirubi/translators/jisho_web_translator.rb, line 38
def parse_furigana_elements(elements)
  words = {}

  elements.each do |el|
    if el.attr('data-text').empty?
      words[el.text] = ''
      next
    end

    words[el.attr('data-text')] = el.text
  end

  words
end
parse_general_text(element, flag) click to toggle source
# File lib/furirubi/translators/jisho_web_translator.rb, line 53
def parse_general_text(element, flag)
  # parse kana
  text = element.search('.japanese_word__text_wrapper a').text

  # parse symbol
  text = element.search('.japanese_word__text_wrapper').text if text.empty?

  { text => '' } if text != flag
end