Mac上的欧路词典单词本迁移到有道词典 #node.js
摘要
有道词典提供了柯林斯和朗文辞典,加上最近在背单词且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> |
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分隔线---------------------------------
提取csv文件中的单词列表,并添加
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);
});
});
结尾
所有单词添加完毕。
后记:这个方法并不能普遍化,因为需要抓包拿到token,cookie等数据,若要普遍化,有一个思路是实现用帐号密码登录,用代码取得token等数据,而不是通过抓包。
Mac上的欧路词典单词本迁移到有道词典 #node.js的更多相关文章
- bing词典vs有道词典对比测试报告——功能篇之细节与用户体验
之所以将细节与用户体验放在一起讨论,是因为两者是那么的密不可分.所谓“细节决定成败”,在细节上让用户感受方便.舒适.不费心而且温馨,多一些人文理念,多一些情怀,做出来的产品自然比其他呆板的产品更受欢迎 ...
- 必应词典手机版(IOS版)与有道词典(IOS版)之软件分析【功能篇】【用户体验篇】
1.序言: 随着手机功能的不断更新和推广,手机应用市场的竞争变得愈发激烈.这次我们选择必应词典和有道词典的苹果客户端作对比,进一步分析这两款词典的客户端在功能和用户体验方面的利弊.这次测评的主要评测人 ...
- 有道词典 Andriod 版本数据格式分析
其实很简单无聊 基于版本 5.3 分析. 其实也简单分析了有道词典iOS版本,必应词典的各个版本,以及金山词典的各个版本,还有那个一直逍遥法外的林格斯词典. 由于在各个平台上的限制,同一词典的不同版本 ...
- ubuntu14.04 下安装有道词典
安装步骤 1.ubuntu14.04.1版本下是不能直接安装有道词典的,首先需要把14.04.版升级为14.04.2版. 在终端窗口中输入以下命令: sudo apt-get update sudo ...
- (转)在Windows平台上安装Node.js及NPM模块管理
本文转载自:http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html 之前9月份的时候我写了一篇关于如何在Windows平台上手工管理 ...
- ASP.Net Core项目在Mac上使用Entity Framework Core 2.0进行迁移可能会遇到的一个问题.
在ASP.Net Core 2.0的项目里, 我使用Entity Framework Core 2.0 作为ORM. 有人习惯把数据库的连接字符串写在appSettings.json里面, 有的习惯写 ...
- mac 10.9开启有道词典取词功能
取词时候,有道词典给出提示,说要去开启辅助功能,但提示的是在mac 10.8上面怎么操作,在10.9的话,就是以下位置去改了. 补充以下: 在mac机器上,实际上大多数的单词都能从自带的词典中查找到. ...
- MAC上有哪些优秀的日常软件| 入门级Mac OS 用户必备软件
本文整理的网友反馈的MAC上有哪些优秀的日常软件+入门级Mac OS 用户必备软件,感兴趣的朋友可以看看,下载下来试用一样便知实不实用.如有更好的推荐,欢迎留言. MAC上有哪些优秀的日常软件 Tim ...
- 我在 Mac 上都用什么
我在 Mac 上都用什么 Homebrew Homebrew 是统一管理 macOS 中应用的最佳方法之一,而且大量优秀的应用都可以在 Homebrew 中找到. 就不做过多介绍了, 有兴趣可以看相关 ...
随机推荐
- Maven(一)maven环境搭建
1.下载maven安装文件 https://maven.apache.org/download.cgi#,根据自己的需要下载对应版本 2. 配置maven环境变量,和java环境变量配置方式类似. ...
- 关于android截图的一些方法
这里只记录一些链接,对于我的需求,只需要, public static String createScreenShot(View v) { //测试截屏功能 SimpleD ...
- .net 制作二维码
首先 要下载 ThoughtWorks.QRCode.dll 下载地址:http://download.csdn.net/detail/lybwwp/6861821 然后新建项目 把Thought ...
- WIN7-修改域名
前言:访问本地项目有如下的几种方式,其中通过修改域名配置文件的方式使用的较少,不过在某些项目中也会使用的到(比如:我曾经参与的一个项目使用到SpringCloud框架,需要将每个微服务注册到,服务控制 ...
- iOS--KVO的实现原理与具体应用
本文分为2个部分:概念与应用. 概念部分旨在剖析KVO这一设计模式的实现原理,应用部分通过创建的项目,以说明KVO技术在iOS开发中所带来的作用: 如果是作为是刚接触KVO的初学者,可以在了解基本原理 ...
- php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
1.获取上个月第一天及最后一天. echo date('Y-m-01', strtotime('-1 month')); echo "<br/>"; ...
- centos 6.5 x64创建并挂载使用iscsi共享磁盘
前景摘要:NFS或iSCSI,哪个更好?文件 vs 块NFS使用文件级别的实施,服务器或存储阵列托管整个文件系统,客户到文件系统上读写文件,可以在阵列端对主存储数据进行重复数据删除.iSCSI和FC则 ...
- 前端菜鸟的编程之路之css的用法
/* * * 固定特殊类 * */ /* ===========固定宽度*============= */ .ld-with80{width: 80px} .ld-with50{width: 50px ...
- 艺术品照片融合到背景墙上效果及DEMO
演示地址: 功能:图片按照角度增加阴影,比较复杂的功能就是当墙面是不规则的时候,贴的艺术品必须按照墙面的角度进行变形处理.
- IS A 和 HAS A的区别
IS A:一般是用作继承或者接口类.比如:中国人和外国人都是人,重点在:是一个... . HAS A:一般用作对象和他的成员的从属关系.比如:中国人和外国人都有眼睛.耳朵.嘴巴.重点在:有一个... ...