class Struggle::Translate

Constants

BAIDU_APPID
BAIDU_KEY
BAIDU_URL
GOOGLE_URL
ICIBA_KEY
ICIBA_URL
YOUDAO_KEY
YOUDAO_KEYFROM
YOUDAO_URL

Public Class Methods

baidu(word) click to toggle source

百度翻译,同样没有音标,只返回翻译结果 参数: word => 单词 返回: string,翻译的中文结果

# File lib/struggle/translate.rb, line 87
def self.baidu(word)
  salt = Random.new.rand(10000..99999)
  #appid+q+salt+密钥
  sign = Digest::MD5.new.hexdigest "#{self::BAIDU_APPID}#{word}#{salt}#{self::BAIDU_KEY}"
  begin
    url = "#{self::BAIDU_URL}?appid=#{self::BAIDU_APPID}&q=#{URI.escape(word)}&from=auto&to=auto&salt=#{salt}&sign=#{sign}"
    content = self.httpget(url)
    contenthash = eval content.gsub(":", "=>")
    return contenthash["trans_result"][0]["dst"]
  rescue
    return nil
  end
end
google(word) click to toggle source

google翻译,eval出错,不能转换成数组,因为有存在俩个逗号中没有值的情况,可以替换双逗号解决,但是没有音标 参数: word => 单词 返回: string,翻译的中文结果

# File lib/struggle/translate.rb, line 70
def self.google(word)
  begin
    url = "#{self::GOOGLE_URL}?client=t&sl=en&tl=zh-CN&hl=zh-CN&sc=2&ie=UTF-8&oe=UTF-8&oc=1&otf=2&ssel=0&tsel=0&q=#{URI.escape(word)}"
    content = self.httpget(url)
    if content
      return eval(content.gsub(',,', ',').gsub(',,', ',').gsub(',,', ','))[0][0][0] #有没有值的,arr[0][0][0]是翻译,但是谷歌不支持音标,只支持翻译后的中文拼音
    else
      return nil
    end
  rescue
    return nil
  end
end
httpget(url) click to toggle source
# File lib/struggle/translate.rb, line 20
def self.httpget(url)
  content = ""
  open(url) do |http|
    content << http.read
  end
  return content
end
iciba(word) click to toggle source

获取爱词霸翻译结果 参数: word => 单词 返回: 成功返回hash, key:单词, ps:音标, pron:英语发音, pron2:美式发音, zn:翻译

# File lib/struggle/translate.rb, line 31
def self.iciba(word)
  begin
    url = "#{self::ICIBA_URL}?w=#{URI.escape(word)}&key=#{self::ICIBA_KEY}"
    content = self.httpget(url)
    xml = REXML::Document.new(content)
    key = xml.get_elements("/dict/key")[0]
    if key && word == key.text #判断返回成功
      psxml = xml.get_elements("/dict/ps")[0] #音标
      ps = psxml.text if psxml
      pronxml = xml.get_elements("/dict/pron")[0]
      pron = pronxml.text if pronxml
      pron2xml = xml.get_elements("/dict/pron")[1]
      pron2 = pron2xml.text if pron2xml
      acceptations = xml.get_elements("/dict/acceptation") #中文翻译
      poses = xml.get_elements("/dict/pos") #动词,形容词。。
      zn = ""
      if poses && acceptations
        1.upto(acceptations.count) do |i|
          zn = zn + poses[i - 1].text + acceptations[i - 1].text + "|"
        end
        if ps && zn
          return {key: key.text, ps: ps, pron: pron, pron2: pron2, zn: zn}
        else
          return nil
        end
      else
        return nil
      end
    else
      return nil
    end
  rescue
    return nil
  end
end
youdao(word) click to toggle source

有道翻译,只支持英文翻译 参数: word => 单词 返回: 成功返回hash, key:单词, ps:音标, zn:翻译;失败返回nil

# File lib/struggle/translate.rb, line 104
def self.youdao(word)
  begin
    url = "#{self::YOUDAO_URL}?keyfrom=#{self::YOUDAO_KEYFROM}&key=#{self::YOUDAO_KEY}&type=data&doctype=json&version=1.1&q=#{URI.escape(word)}"
    content = self.httpget(url)
    contenthash = eval(content.gsub(":", "=>"))
    return {'key' => contenthash["query"],
            'ps' => contenthash["basic"]["phonetic"],
            'zn' => contenthash["basic"]["explains"].join("|")}
  rescue
    return nil
  end
end