linux Emacs利用有道API翻译

懒得找星际译王的词库, 不过Emacs没有翻译功能怎么行呢?利用有道的api实现一个简单的在线的。选中词后按组合键Ctrl-c f。

1. 首先先到有道的api申请页面申请一个key,随便写点,不过邮件要准确,因为会把key和keyfrom发到你的邮箱的。然后利用得到的key和夫keyfrom替换一下:

http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=<doctype>&version=1

注:有三种方式调用api:json,jsonp,xml,这边我用的是xml.

2.到emacs wiki下面找到这个xmlparser加入到你的emacs中,因为要用这个库解析获取到的xml结果.

http://emacswiki.org/emacs/XmlParser

注:我是这样放的:我把xml.el和xml-parse.el文件放在~/.emacs.d/config/目录下面,下面的代码也是新建一个el文件放进去的。在~/.emacs中加入下面的代码:

(add-to-list 'load-path "~/elisp-sites" "~/.emacs.d/config")
(mapc 'load (directory-files "~/.emacs.d/config" t "^[a-zA-Z0-9].*.el$"))

3. 将下面的代码加入到~/.emacs文件中,或者可以和我一样。

;获取要翻译的词典
(defun get-current-word ()
  (interactive)
  (let ((begin (point-min)) (end (point-max)))
    (save-excursion      
      (when (not mark-active)        
        (backward-word)
        (mark-word))
      (setq begin (region-beginning)
            end (region-end)))
    (buffer-substring begin end)))

;;抓取翻译结果
(defun get-translate-result (word)
  (shell-command-to-string (concat (format "curl 'http://fanyi.youdao.com/openapi.do?keyfrom=&key=&type=data&doctype=xml&version=1.1&q=%s' 2>/dev/null" word))))

;;分析翻译结果,并返回显示字符串
(defun analytic-translate-result (translateresult)
  (let* ((root (with-temp-buffer (insert translateresult)
                                 (xml-parse-region (point-min) (point-max))))
         (youdao-fanyi (car root))
         (basic (car (xml-get-children youdao-fanyi 'basic)))
         (explains-ex (xml-get-children (car (xml-get-children basic 'explains)) 'ex))
         (phonetic-texts (car (xml-node-children (car (xml-get-children basic 'phonetic))))) 
         (explains-texts (concat "音标:" phonetic-texts "\n")))
    (loop for ex in explains-ex
          do (setq explains-texts (concat explains-texts  (car (xml-node-children ex)) "\n")))
    explains-texts))

;;主函数
(defun lookup-word ()
  (interactive)
  (let* ((word (get-current-word))
         (translate-result (get-translate-result word))
         (explains-texts (analytic-translate-result translate-result)))
    (tooltip-show explains-texts)))
;;绑定到Ctrl-c f组合键上
(global-set-key (kbd "C-c f") 'lookup-word)


注意:抓取翻译的结果代码中的url要加上你的key和keyfrom,重启一下emacs。
结果就像这样:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值