Mac上的欧路词典单词本迁移到有道词典 #node.js

时间:2023-02-25 08:08:44

摘要

  有道词典提供了柯林斯和朗文辞典,加上最近在背单词且Mac版的屏幕取词也够用了,为了云单词本的同步,决定抛弃Mac上的欧路词典。单词欧路上的单词本也存了一百多个单词。怎样迁移到有道呢?

  关键词:node.js csv http charles

思路

  有道的Mac版和PC版都不支持导入欧路的单词本文件(csv格式,是个好东西)。

  如果是高中时的我,我会猜有道有一个本地的单词本文件。我可以把欧路导出的单词复制粘贴到该文件(假设有道也采用csv格式,那么就复制粘贴)。现是计算机科班出身,我想到的思路有:

  1.OC语言的消息机制或许可以让我有可能调用到有道词典运行时的函数;

  2.网络接口(假如有道没有对该API加密,那么就可以抓包然后仿照)。

  最近又刚好搞了点node.js,初尝脚本语言的轻。不需要集成开发工具,Sublime Text + Terminal就够了。

抓包

  POST ...(路径)  HTTP/1.1
Host dict.youdao.com
Accept */*
Content-Type application/x-www-form-urlencoded
Connection keep-alive
Cookie ...(Cookie)
User-Agent YoudaoDict/139 CFNetwork/760.6.3 Darwin/15.6.0 (x86_64)
Accept-Language en-us
Accept-Encoding gzip, deflate
Content-Length 984
data

<?xml version="1.0" encoding="utf-8"?>

<request>
<type>words</type>
<operation>commit</operation>
<maxLocalTimestamp>1483321810485</maxLocalTimestamp>
<maxRemLocalTimestamp>1483321810507</maxRemLocalTimestamp>
<actionlist>
<action type="add">
<word><![CDATA[yield]]></word>
<wordInfo>
<phonetic><![CDATA[]]></phonetic>
<trans><![CDATA[- vt. 出产;屈服;放弃 - vi. 屈服,投降 - n. 收益;产量 时 态: yielded, yielding, yields 名 词: yielder ]]></trans>
<tags><![CDATA[]]></tags>
<addtime>1483321814</addtime>
<flag>1</flag>
</wordInfo>
</action>
</actionlist>
</request>

version 2

分析抓包到的请求

  这个接口没有加密。分析抓到的Post请求,请求路径和Cookie都是在一段时间内不会变化的。主要是其中的时间戳,单词和释义。

添加一个单词

  下边是终端的命令行和控制台输出。AddAWord.js仿照上边分析的请求,运行后返回的响应是200。下边的乱码是由于返回的响应体是gzip压缩过的,在这里没有进行解压。看到状态码是200,有道里的单词本已经多了“aWord”和“aaaa”。说明这个思路可行。

MBP:csv studio MacbookPro$ node AddAWord.js
Status: 200
headers: {"server":"nginx","date":"Mon, 02 Jan 2017 08:16:52 GMT","content-type":"text/xml;charset=UTF-8","transfer-encoding":"chunked","connection":"keep-alive","vary":"Accept-Encoding","content-language":"en-US","content-encoding":"gzip"}
body分隔线--------------------------------- u���
��x
�}C�[<T|�m/`\���`ʢ^�B��/��>�}0�V\�r��m���w���:���
<��ـ�e;�C�đѭ#2��Y��u�9���<N2P3�я?z���J��K.�J� 6�0ͦcFnH��U��l��TRĺ�~fJ�( body分隔线---------------------------------

Mac上的欧路词典单词本迁移到有道词典 #node.js

提取csv文件中的单词列表,并添加

Mac上的欧路词典单词本迁移到有道词典 #node.js  

  node.js社区没有让我失望,很快我就找到了解析csv的模块及其示例代码。接下来的事情就简单了,创建读取csv文件的流,解析流中获取的字符串,获得单词列表数组,遍历数组发送请求。

  不过,当我用并发的形式发送所有单词到服务器时,结果只是添加了一个或两个单词,我猜想的原因是服务器对待这些请求是排队的,由于对时间戳的限制,几乎所有请求饿死了。这时候需要用到同步请求

  Node.js原生没有同步请求。npm上有很多能够实现同步请求的模块,但是为了保持单词的顺序,回调+递归会比较适合。关键代码如下:

 readerStream.on('end',function(){
//把文本文件转化为字符串
var input = data;
parse(input, {comment: '#'}, function(err, output){
//字符串解析为对象之后,下边发送调用网页的API
//node.js原生不支持发送同步请求,同时为了保持单词的顺序,直接采用回调递归
addToWordBook(output, output.length-1);
});
});

结尾

  所有单词添加完毕。

Mac上的欧路词典单词本迁移到有道词典 #node.js

  后记:这个方法并不能普遍化,因为需要抓包拿到token,cookie等数据,若要普遍化,有一个思路是实现用帐号密码登录,用代码取得token等数据,而不是通过抓包。

Mac上的欧路词典单词本迁移到有道词典 #node.js的更多相关文章

  1. bing词典vs有道词典对比测试报告——功能篇之细节与用户体验

    之所以将细节与用户体验放在一起讨论,是因为两者是那么的密不可分.所谓“细节决定成败”,在细节上让用户感受方便.舒适.不费心而且温馨,多一些人文理念,多一些情怀,做出来的产品自然比其他呆板的产品更受欢迎 ...

  2. 必应词典手机版&lpar;IOS版&rpar;与有道词典&lpar;IOS版&rpar;之软件分析【功能篇】【用户体验篇】

    1.序言: 随着手机功能的不断更新和推广,手机应用市场的竞争变得愈发激烈.这次我们选择必应词典和有道词典的苹果客户端作对比,进一步分析这两款词典的客户端在功能和用户体验方面的利弊.这次测评的主要评测人 ...

  3. 有道词典 Andriod 版本数据格式分析

    其实很简单无聊 基于版本 5.3 分析. 其实也简单分析了有道词典iOS版本,必应词典的各个版本,以及金山词典的各个版本,还有那个一直逍遥法外的林格斯词典. 由于在各个平台上的限制,同一词典的不同版本 ...

  4. ubuntu14&period;04 下安装有道词典

    安装步骤 1.ubuntu14.04.1版本下是不能直接安装有道词典的,首先需要把14.04.版升级为14.04.2版. 在终端窗口中输入以下命令: sudo apt-get update sudo ...

  5. &lpar;转&rpar;在Windows平台上安装Node&period;js及NPM模块管理

    本文转载自:http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html 之前9月份的时候我写了一篇关于如何在Windows平台上手工管理 ...

  6. ASP&period;Net Core项目在Mac上使用Entity Framework Core 2&period;0进行迁移可能会遇到的一个问题&period;

    在ASP.Net Core 2.0的项目里, 我使用Entity Framework Core 2.0 作为ORM. 有人习惯把数据库的连接字符串写在appSettings.json里面, 有的习惯写 ...

  7. mac 10&period;9开启有道词典取词功能

    取词时候,有道词典给出提示,说要去开启辅助功能,但提示的是在mac 10.8上面怎么操作,在10.9的话,就是以下位置去改了. 补充以下: 在mac机器上,实际上大多数的单词都能从自带的词典中查找到. ...

  8. MAC上有哪些优秀的日常软件| 入门级Mac OS 用户必备软件

    本文整理的网友反馈的MAC上有哪些优秀的日常软件+入门级Mac OS 用户必备软件,感兴趣的朋友可以看看,下载下来试用一样便知实不实用.如有更好的推荐,欢迎留言. MAC上有哪些优秀的日常软件 Tim ...

  9. 我在 Mac 上都用什么

    我在 Mac 上都用什么 Homebrew Homebrew 是统一管理 macOS 中应用的最佳方法之一,而且大量优秀的应用都可以在 Homebrew 中找到. 就不做过多介绍了, 有兴趣可以看相关 ...

随机推荐

  1. lua 例子

    //顶 - - - //顶 #include <stdio.h> #include <string.h> extern "C"{ #include < ...

  2. MVC——应用Ajax获取不到数据问题解答

    当我们使用控制器利用Ajax获取表单数据时,调试为null,这时看看你接受表单时定义的参数名字是否为action 其实不能起这个名字的,这个名字和控制器关键字冲突了 随便换个其它名字就好了,比如我起个 ...

  3. java中的日期转换

    在java中有两种Date对象,一种是java.sql.Date,另一种是java.util.Date 一.java.sql.Date对象: 这种Date对象使用了进行数据库操作的,它对应了数据库中的 ...

  4. WCF-Configuration

    Host-Configuration <?xml version="1.0"?> <configuration> <configSections&gt ...

  5. Lucene入门的基本知识(四)

    刚才在写创建索引和搜索类的时候发现非常多类的概念还不是非常清楚,这里我总结了一下. 1 lucene简单介绍  1.1 什么是lucene  Lucene是一个全文搜索框架,而不是应用产品.因此它并不 ...

  6. 关于as3实现对任何对象进行深刻复制的思考

    无意中看到关于as3深度复制思考的文章,觉得不错,于是转来记录以后用到可以参考. 转载来源:http://xmchcly.iteye.com/blog/1307425,下面是转文: 通过 ByteAr ...

  7. Jquery让图片根据浏览器窗口大小自动缩放

    (function($){ $.fn.resizeimage = function(){ var imgLoad = function (url, callback) { var img = new ...

  8. HDU 3715 Go Deeper(2-sat)

    HDU 3715 Go Deeper 题目链接 题意:依据题意那个函数,构造x数组.问最大能递归层数 思路:转化为2-sat问题,因为x仅仅能是0.1,c仅仅能是0,1.2那么问题就好办了,对于0, ...

  9. nginx 编译参数详解(运维必看--转)

    nginx参数: –prefix= 指向安装目录 –sbin-path 指向(执行)程序文件(nginx) –conf-path= 指向配置文件(nginx.conf) –error-log-path ...

  10. windows查看笔记本电池使用报告

    CMD 下 powercfg /batteryreport /output “C:\battery_report.html” powercfg 参数 /LIST./L          列出所有电源方 ...