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