本章知识点
1.百度翻译平台接口
2.md5加密转换
3.http.request请求
4.typescript转JavaScript并发送的npm
百度翻译平台
首先在 百度翻译平台注册,申请一个通用翻译的api,标准版的就够用
然后根据文档与支持里的通用翻译文档进行查看和操作
在操作过程中,app ID和密钥都需要保密,如果泄漏有可能别人也会调用,调用的多的话就会扣钱
拼接完整请求: http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001& salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4 请求参数: q=apple from=en to=zh appid=2015063000000001(请替换为您的appid) salt=1435660288(随机码) 平台分配的密钥: 12345678 生成签名sign: Step1. 拼接字符串1: 拼接appid=2015063000000001+q=apple+salt=1435660288+密钥=12345678得到字符串1:“2015063000000001apple143566028812345678” Step2. 计算签名:(对字符串1做md5加密) sign=md5(2015063000000001apple143566028812345678),得到sign=f89f9594663708c1605f3d736d01d2d4
代码会上传的github或其他开源网站,所以这个时候就要使用md5进行加密了
md5加密
百度翻译的请求链接中的请求参数需要用到md5加密转化使用的是32位小写
项目中使用md5
在项目中如果要使用md5需要下载md5库
yarn add md5
因为我使用的是typescript;所以MD5也要搭配typescript使用
yarn add --dev @types/md5
在项目中引入md5
然后直接使用,转化为md5加密
const sign = md5(要加密的内容) ;
http.request请求的使用方式
url地址的请求参数是 ?后面的http://api.fanyi.baidu.com/translate?q=apple&from=en&to=zh&appid=2015063000000001&
salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4
它并不是固定不变的,当请求的内容不一样时,里面的参数会变化;
所以需要把它拼装在一起 这个时候可以使用querystring.stringify()
,它是将参数变成由 & 相连的字符串 q=hi&sign=1234
querystring.stringify({q: 'hi', sign: '1234'}) // q=hi&sign=1234
https.request需要有两个参数,一个是options参数,另一个是回调函数;
options会自动拼接成url,回调函数是请求后对返回数据的操作
response.on是对数据的监控; req.end() 来表示请求的结束
const options = { hostname: 'api.fanyi.baidu.com', port: 443, path: '/api/trans/vip/translate?'+query, method: 'GET' }; const req = https.request(options, (response) => { response.on('data', (d) => { }); }); req.on('error', (e) => { console.error(e); }); req.end();
请求返回来的数据都是Buffer类型的,有时候一次性传不完,还会接着几次传递,所以要拼接数据
完整的代码:
const request = https.request(options, (response) => { // console.log('状态码:', response.statusCode); // console.log('请求头:', response.headers); //监听请求到的结果,并把它变成字符串 let chunks:Buffer[] = []; response.on('data', (chunk:Buffer) => { chunks.push(chunk) }); response.on('end',()=>{ const string = Buffer.concat(chunks).toString(); //定义一个返回结果的类型 type BaiduResult={ error_code?:string; error_msg?:string; from:string; to:string; trans_result:{src:string,dst:string}[]; } const object:BaiduResult = JSON.parse(string); if(object.error_code){ console.log(errorMap[object.error_code] || object.error_msg); //退出当前任务 process.exit(2) }else { console.log(object.trans_result[0].dst) //退出当前进程,0表示没有错误 process.exit(0) } }) }); request.on('error', (e) => { console.error(e); }); request.end(); 复制代码
上传到npm
上传之前需要将typescript转化为JavaScript,并且生成dist目录,只上传dist目录的文件
初始化
会生成一个配置文件tsconfig.json
tsc --init
将outDir修改"outFile": "dist/",
在cli.ts里第一行添加,告诉程序使用node执行
#!/usr/bin/env node
执行tsc
,会生成dist目录,所有的ts文件都会转化为js文件
tsc
修改package.json
{ "name": "uath-translate", "version": "0.0.1", "main": "dist/main.js", //使用fy代替 "dist/cli.js"使用时只需要执行 fy 单词 "bin": { "fy": "dist/cli.js" }, //只上传dist目录下的js文件 "files": [ "dist/**/*.js" ], "scripts": { "start": "ts-node-dev src/main.ts" },
开始上传
发送之前要把淘宝源修改为npm的官方源
使用 nrm ls
查看源
如果此时你使用的是淘宝源,切换到npm的官方源
nrm use npm
登录你的npm账户
npm adduser
上传
npm public
下载安装测试
在另一个命令行窗口下载,测试
我的npm包名字是uath-translate
npm i -g uath-translate
/