linux Emacs利用有道API翻译

来源:互联网 发布:网络投影机 编辑:程序博客网 时间:2024/06/11 10:02

懒得找星际译王的词库, 不过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。
结果就像这样:

原创粉丝点击