├── LICENSE
├── README.md
├── lib
├── BASE64加解密.js
├── IP地址查询.js
├── Last_day.js
├── relationship.js
├── vip视频解析2.0.js
├── weixin.js
├── wenti.js
├── 一键AES加解密.js
├── 二维码生成.js
├── 二维码识别.js
├── 亲戚关系.js
├── 倒数日.js
├── 历史上的今天.js
├── 号码归属地查询.js
├── 图片转链接.js
├── 密码生成器.js
├── 成语词典.js
├── 文字翻译.js
├── 文字识别.js
├── 时间截转换.js
├── 每日一句(英文励志).js
├── 百度搜图.js
├── 短网址生成.js
├── 短视频解析(web).js
├── 网页源码浏览.js
├── 网页翻译器.js
├── 聊天机器人.js
├── 脚本一键BASE64.js
├── 视频搜索.js
├── 调色板2.0.js
├── 身份证查询.js
├── 进制计算器.js
└── 音乐下载.js
├── main.js
├── project.json
├── res
├── ic_card_giftcard_black_48dp.png
├── ic_exit_to_app_black_48dp.png
├── ic_help_outline_black_48dp.png
├── ic_info_outline_black_48dp.png
├── ic_keyboard_backspace_black_48dp.png
├── ic_message_black_48dp.png
├── ic_refresh_black_48dp.png
├── ic_share_black_48dp.png
├── ic_touch_app_black_48dp.png
├── logo.png
└── splashIcon.png
└── 多功能工具箱_v0.29.10.apk
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 wu737
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 多功能工具箱
2 | ---
3 | ## 简介
4 | 多功能工具箱是一款类似于一个木函的多应用集成软件,这里我们集合了一些常用到的功能。
5 | 由于之前的版本过于臃肿,添加新功能非常复杂,特此重新排版整合整合,把功能分开,这样便于添加新功能。
6 | 工具箱里面的脚本部分是从Auto.js的QQ群收集而来的,由于时间久远,已经不知道脚本作者是谁了,未能联系到作者,在这里说声抱歉,如有侵权,请联系我们。我们将会及时删除。
7 |
8 |
9 | >基于 [Auto.js Pro 8.0](https://pro.autojs.org/) 。理解上和电脑版的按键精灵的区别不大。同时带上 [hyb1996](https://github.com/hyb1996) 大佬的开源的 free 版的 auto.js,参见这个仓库 [Auto.js](https://github.com/hyb1996/Auto.js) ,里面有相关的使用,有兴趣给这个点个星星哈哈哈,是个超棒的项目呢。
10 |
11 |
12 | ## 主要功能
13 | 1. 文字翻译
14 | 2. 文字识别
15 | 3. 成语词典
16 | 4. 号码归属地查询
17 | 5. IP地址查询
18 | 6. 身份证查询
19 | 7. 聊天机器人(图灵接口)
20 | 8. 密码生成器
21 | 9. 网页源码浏览
22 | 10. 调色板2.0
23 | 11. 每日一句(引文励志)
24 | 12. 短网址生成
25 | 13. 二维码生成
26 | 14. 二维码识别
27 | 15. 图片转链接
28 | 16. 音乐下载器
29 | 17. 一键AES加/解密
30 | 18. 脚本一键BASE64
31 | 19. 进制计算器
32 | 20. VIP视频解析2.0
33 | 21. 短视频解析(web)
34 | 22. 历史上的今天
35 | 23. 百度搜图
36 | 24. 视频搜索
37 | 25. 网页翻译器
38 | 26. BASE64加解密
39 | 27. 时间截转换
40 | 28. 亲戚关系查询
41 | 29. 倒数日
42 |
43 | >PS:由于部分脚本的服务是从网上寻找的,由于api变动或者网站迁移,现在可能有部分功能现在可能已经用不了。
44 | 如果你有什么好的脚本,欢迎提issue。
45 | 如果你有什么好的脚本,欢迎提issue。
46 | 如果你有什么好的脚本,欢迎提issue。
47 |
48 | ## 脚本主界面截图
49 | >配色、UI都有点难看,将就一下吧,能用就行了
50 |
51 | 
52 |
53 |
54 | ## 运行问题
55 | - 方式一 下载这个项目代码,导入手机 ``/sdcard/脚本/`` 目录下, 然后下载Auto.js, 选择```main.js```运行。
56 | - 方式二 直接下载打包好的APK文件,安装运行。
57 |
58 | ## 源码打包问题
59 | >注意:下载源码后,如果需要打包的话,请把```lib```目录下的脚本文件名文件修改成英文文件名,同时修改```main.js```里面的对应的内容。
60 |
61 | # LICENSE
62 | MIT
63 |
--------------------------------------------------------------------------------
/lib/BASE64加解密.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
7 | BASE64加/解密
8 |
9 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | );
32 | ui.jia.click(() => {
33 | let str = ui.input.text();
34 | if (str.length > 1) {
35 | ui.output.setText(ec(str));
36 | }
37 | });
38 |
39 | ui.jie.click(() => {
40 | let str = ui.input.text();
41 | if (str.length > 1) {
42 | ui.output.setText(b64(str));
43 | }
44 | });
45 |
46 | ui.zha.click(() => {
47 | ui.input.setText(getClip());
48 | });
49 |
50 | ui.cl1.click(() => {
51 | ui.input.setText("");
52 | });
53 |
54 | ui.cpy.click(() => {
55 | let str = ui.output.text();
56 | if (str.length > 1) {
57 | setClip(str);
58 | toast("复制成功");
59 | }
60 | });
61 |
62 | ui.cl2.click(() => {
63 | ui.output.setText("");
64 | });
65 |
66 | function ec(str) {
67 | return java.lang.String(android.util.Base64.encode(java.lang.String(str).getBytes(), 2));
68 | }
69 |
70 | function b64(str) {
71 | return java.lang.String(android.util.Base64.decode(java.lang.String(str).getBytes(), 0));
72 | }
--------------------------------------------------------------------------------
/lib/IP地址查询.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 | 当前的IP地址:
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | );
42 | threads.start(function () {
43 | var iipp = iip();
44 | ui.post(() => {
45 | ui.iip.setText(iipp);
46 | });
47 | asd(iipp);
48 | });
49 | ui.ok.click(function () {
50 | threads.start(function () {
51 | let sd = ui.num.text();
52 | if (sd) {
53 | asd(sd);
54 | }
55 | });
56 | });
57 | ui.ok.on("long_click", () => {
58 | ui.num.setText("");
59 | });
60 | ui.iip.click(function () {
61 | let ssj = ui.iip.text();
62 | if (ssj) {
63 | setClip(ssj);
64 | toast("复制成功");
65 | }
66 | });
67 | ui.gjia.click(function () {
68 | let cvb = ui.gjia.text();
69 | if (cvb) {
70 | setClip(cvb);
71 | toast("复制成功");
72 | }
73 | });
74 | ui.sff.click(function () {
75 | let sffj = ui.sff.text();
76 | if (sffj) {
77 | setClip(sffj);
78 | toast("复制成功");
79 | }
80 | });
81 |
82 | ui.sff.click(function () {
83 | let sffj = ui.sff.text();
84 | if (sffj) {
85 | setClip(sffj);
86 | toast("复制成功");
87 | }
88 | });
89 | ui.dqq.click(function () {
90 | let dqqd = ui.dqq.text();
91 | if (dqqd) {
92 | setClip(dqqd);
93 | toast("复制成功");
94 | }
95 | });
96 |
97 | ui.ysss.click(function () {
98 | let qhh = ui.ysss.text();
99 | if (qhh) {
100 | setClip(qhh);
101 | toast("复制成功");
102 | }
103 | });
104 |
105 | function iip() {
106 | var getIp_api = http.get('http://pv.sohu.com/cityjson?ie=utf-8');
107 | var InetIP = getIp_api.body.string();
108 | eval(InetIP);
109 | return returnCitySN.cip;
110 | }
111 | function asd(dd) {
112 | let sum = chaip(dd);
113 | if (sum) {
114 | ui.run(() => {
115 | ui.ipp.setText(sum.data.ip);
116 | ui.gjia.setText(sum.data.country);
117 | ui.sff.setText(sum.data.region);
118 | ui.dqq.setText(sum.data.city);
119 | ui.ysss.setText(sum.data.isp);
120 | });
121 | }
122 | }
123 | function chaip(ble) {
124 | ui.run(() => {
125 | ui.sff.setText("");
126 | ui.dqq.setText("");
127 | ui.ysss.setText("");
128 | });
129 | let url = "http://ip.taobao.com/service/getIpInfo.php?ip=";
130 | let html = http.get(url + ble, {
131 | headers: {
132 | 'Accept-Language': 'zh-cn,zh;q=0.5',
133 | 'User-Agent': 'Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11'
134 | }
135 | }).body.json();
136 | return html;
137 | }
--------------------------------------------------------------------------------
/lib/relationship.js:
--------------------------------------------------------------------------------
1 | /**
2 | * BY: haole zheng
3 | * http://passer-by.com
4 | */
5 | //https://github.com/mumuy/relationship
6 | ! function(root, factory) {
7 | if (typeof module === 'object' && module.exports) {
8 | module.exports = factory();
9 | } else {
10 | root.relationship = factory();
11 | }
12 | }(typeof window !== 'undefined' ? window : this, function() {
13 | //简写
14 | var _filter = [
15 | /* 表亲 */
16 | { //表亲的关系
17 | exp: /^(.+)&o([^#]+)&l/g,
18 | str: '$1$2'
19 | },
20 | { //表亲的关系
21 | exp: /^(.+)&l([^#]+)&o/g,
22 | str: '$1$2'
23 | },
24 | { //表亲的关系
25 | exp: /(,[ds],(.+),[ds])&[ol]/g,
26 | str: '$1'
27 | },
28 | /* 兄弟姐妹 */
29 | { //哥哥姐姐的哥哥姐姐还是自己的哥哥姐姐(年龄判断)
30 | exp: /(,o[sb])+(,o[sb])/,
31 | str: '$2'
32 | },
33 | { //弟弟妹妹的弟弟妹妹还是自己的弟弟妹妹(年龄判断)
34 | exp: /(,l[sb])+(,l[sb])/,
35 | str: '$2'
36 | },
37 | { //如果自己是男性,兄弟姐妹的兄弟就是自己的兄弟或自己
38 | exp: /^(.*)(,[fh1])(,[olx][sb])+,[olx]b(.*)$/,
39 | str: '$1$2,xb$4#$1$2$4'
40 | },
41 | { //如果自己是女性,兄弟姐妹的姐妹就是自己的姐妹或自己
42 | exp: /^(.*)(,[mw0])(,[olx][sb])+,[olx]s(.*)$/,
43 | str: '$1$2,xs$4#$1$2$4'
44 | },
45 | { //如果自己是男性,兄弟姐妹的姐妹就是自己的姐妹
46 | exp: /(,[fh1])(,[olx][sb])+,[olx]s/g,
47 | str: '$1,xs'
48 | },
49 | { //如果自己是女性,兄弟姐妹的兄弟就是自己的兄弟
50 | exp: /(,[mw0])(,[olx][sb])+,[olx]b/g,
51 | str: '$1,xb'
52 | },
53 | { //不知道性别,兄弟姐妹的兄弟是自己或兄弟
54 | exp: /^,[olx][sb],[olx]b(.+)?$/,
55 | str: '$1#,xb$1'
56 | },
57 | { //不知道性别,兄弟姐妹的姐妹是自己或姐妹
58 | exp: /^,[olx][sb],[olx]s(.+)?$/,
59 | str: '$1#,xs$1'
60 | },
61 | { //将复合称谓拆分
62 | exp: /^,x([sb])$/,
63 | str: ',o$1#,l$1'
64 | },
65 | /* 父母 */
66 | { //母亲的丈夫是自己的父亲
67 | exp: /m,h/g,
68 | str: 'f'
69 | },
70 | { //父亲的妻子是自己的母亲
71 | exp: /f,w/g,
72 | str: 'm'
73 | },
74 | { //兄弟的父母就是自己的父母
75 | exp: /,[xol][sb](,[mf])/g,
76 | str: '$1'
77 | },
78 | /* 父母的子女 */
79 | { //父母的女儿年龄判断是姐姐还是妹妹
80 | exp: /,[mf],d&([ol])/,
81 | str: ',$1s'
82 | },
83 | { //父母的儿子年龄判断是哥哥还是弟弟
84 | exp: /,[mf],s&([ol])/,
85 | str: ',$1b'
86 | },
87 | { //如果自己是男性,父母的儿子是自己或者兄弟
88 | exp: /^(.*)(,[fh1]|[xol]b),[mf],s(.*)$/,
89 | str: '$1$2,xb$3#$1$2$3'
90 | },
91 | { //如果自己是女性,父母的女儿是自己或者姐妹
92 | exp: /^(.*)(,[mw0]|[xol]s),[mf],d(.*)$/,
93 | str: '$1$2,xs$3#$1$2$3'
94 | },
95 | { //如果自己是女性,父母的儿子是自己兄弟
96 | exp: /(,[mw0]|[xol]s),[mf],s/,
97 | str: '$1,xb'
98 | },
99 | { //如果自己是男性,父母的女儿是自己姐妹
100 | exp: /(,[fh1]|[xol]b),[mf],d/,
101 | str: '$1,xs'
102 | },
103 | { //父母的儿子是自己或兄弟
104 | exp: /^,[mf],s(.+)?$/,
105 | str: ',1$1#,xb$1'
106 | },
107 | { //父母的女儿是自己或者姐妹
108 | exp: /^,[mf],d(.+)?$/,
109 | str: ',0$1#,xs$1'
110 | },
111 | /* 孩子 */
112 | { //孩子的姐妹是自己的女儿(年龄判断)
113 | exp: /,[ds]&o,ob/g,
114 | str: ',s&o'
115 | },
116 | { //孩子的姐妹是自己的女儿(年龄判断)
117 | exp: /,[ds]&o,os/g,
118 | str: ',d&o'
119 | },
120 | { //孩子的兄弟是自己的儿子(年龄判断)
121 | exp: /,[ds]&l,lb/g,
122 | str: ',s&l'
123 | },
124 | { //孩子的兄弟是自己的儿子(年龄判断)
125 | exp: /,[ds]&l,ls/g,
126 | str: ',d&l'
127 | },
128 | { //孩子的姐妹是自己的女儿
129 | exp: /,[ds](&[ol])?,[olx]s/g,
130 | str: ',d'
131 | },
132 | { //孩子的兄弟是自己的儿子
133 | exp: /,[ds](&[ol])?,[olx]b/g,
134 | str: ',s'
135 | },
136 | /* 夫妻 */
137 | { //自己是女性,女儿或儿子的妈妈是自己
138 | exp: /(,[mwd0](&[ol])?|[olx]s),[ds](&[ol])?,m/g,
139 | str: '$1'
140 | },
141 | { //自己是女性,女儿或儿子的爸爸是自己的丈夫
142 | exp: /(,[mwd0](&[ol])?|[olx]s),[ds](&[ol])?,f/g,
143 | str: '$1,h'
144 | },
145 | { //自己是男性,女儿或儿子的爸爸是自己
146 | exp: /(,[fhs1](&[ol])?|[olx]b),[ds](&[ol])?,f/g,
147 | str: '$1'
148 | },
149 | { //自己是男性,女儿或儿子的妈妈是自己的妻子
150 | exp: /(,[fhs1](&[ol])?|[olx]b),[ds](&[ol])?,m/g,
151 | str: '$1,w'
152 | },
153 | { //不知道性别,子女的妈妈是自己或妻子
154 | exp: /^,[ds],m(.+)?$/,
155 | str: '$1#,w$1'
156 | },
157 | { //不知道性别,子女的爸爸是自己或丈夫
158 | exp: /^,[ds],f(.+)?$/,
159 | str: '$1#,h$1'
160 | },
161 | { //夫妻的孩子就是自己的孩子
162 | exp: /,[wh](,[ds])/g,
163 | str: '$1'
164 | },
165 | { //夫妻的对方是自己
166 | exp: /,w,h|,h,w/g,
167 | str: ''
168 | },
169 | { //并列关系处理
170 | exp: /(.+)?\[(.+)\|(.+)\](.+)?/g,
171 | str: '$1$2$4#$1$3$4'
172 | }
173 | ];
174 |
175 | //关系数据
176 | //语法说明:
177 | //【关系】f:父,m:母,h:夫,w:妻,s:子,d:女,xb:兄弟,ob:兄,lb:弟,xs:姐妹,os:姐,ls:妹
178 | //【修饰符】 1:男性,0:女性,&o:年长,&l:年幼,#:隔断,[a|b]:并列
179 | var _data = {
180 | '': ['自己', '我'],
181 | //并称
182 | '[f|m]': ['父母', '爹娘', '爹妈', '爸妈', '双亲', '二老', '高堂'],
183 | '[h,f|h,m]': ['公婆'],
184 | '[xb|xs]': ['兄弟姐妹'],
185 | '[s|d]': ['子女', '儿女', '小孩', '孩子'],
186 | //本家
187 | 'f': ['爸爸', '父亲', '阿爸', '老爸', '老窦', '爸', '父', '爹', '爹爹', '爹地', '爹啲', '老爹', '大大', '老爷子', '老头子'],
188 | 'f,f': ['爷爷', '祖父', '阿爷', '奶爷', '阿公', '老爷'],
189 | 'f,f,f': ['曾祖父', '太爷', '太爷爷', '太公', '祖公', '祖奶爷', '太老爷'],
190 | 'f,f,f,f': ['高祖父', '老太爷', '祖太爷', '祖太爷爷', '祖太公'],
191 | 'f,f,f,f,f': ['天祖父'],
192 | 'f,f,f,f,f,f': ['烈祖父'],
193 | 'f,f,f,f,f,m': ['烈祖母'],
194 | 'f,f,f,f,f,f,f': ['太祖父'],
195 | 'f,f,f,f,f,f,m': ['太祖母'],
196 | 'f,f,f,f,f,f,f,f': ['远祖父'],
197 | 'f,f,f,f,f,f,f,m': ['远祖母'],
198 | 'f,f,f,f,f,f,f,f,f': ['鼻祖父'],
199 | 'f,f,f,f,f,f,f,f,m': ['鼻祖母'],
200 | 'f,f,f,f,m': ['天祖母'],
201 | 'f,f,f,f,ob': ['伯高祖父'],
202 | 'f,f,f,f,ob,w': ['伯高祖母'],
203 | 'f,f,f,f,lb': ['叔高祖父'],
204 | 'f,f,f,f,lb,w': ['叔高祖母'],
205 | 'f,f,f,f,xs': ['姑高祖母'],
206 | 'f,f,f,f,xs,h': ['姑高祖父'],
207 | 'f,f,f,m': ['高祖母', '老太太', '祖太太', '祖太奶', '祖太奶奶', '祖太婆'],
208 | 'f,f,f,m,xs': ['姨高祖母'],
209 | 'f,f,f,m,xs,h': ['姨高祖父'],
210 | 'f,f,f,m,xb': ['舅高祖父'],
211 | 'f,f,f,m,xb,w': ['舅高祖母'],
212 | 'f,f,f,ob': ['曾伯祖父', '曾伯父', '伯曾祖父', '伯公太', '伯太爷', '伯公老爷'],
213 | 'f,f,f,ob,w': ['曾伯祖母', '曾伯母', '伯曾祖母', '伯婆太', '伯太太', '伯婆奶奶'],
214 | 'f,f,f,lb': ['曾叔祖父', '曾叔父', '叔曾祖父', '叔公太', '叔太爷', '叔公老爷'],
215 | 'f,f,f,lb,w': ['曾叔祖母', '曾叔母', '叔曾祖母', '叔婆太', '叔太太', '叔婆奶奶'],
216 | 'f,f,f,xb,s&o': ['堂伯祖父', '族伯祖父'],
217 | 'f,f,f,xb,s&o,w': ['堂伯祖母', '族伯祖母'],
218 | 'f,f,f,xb,s&l': ['堂叔祖父', '族叔祖父'],
219 | 'f,f,f,xb,s&l,w': ['堂叔祖母', '族叔祖母'],
220 | 'f,f,f,xb,s,s&o': ['从伯父', '族伯父'],
221 | 'f,f,f,xb,s,s&o,w': ['从伯母', '族伯母'],
222 | 'f,f,f,xb,s,s&l': ['从叔父', '族叔父'],
223 | 'f,f,f,xb,s,s&l,w': ['从叔母', '族叔母'],
224 | 'f,f,f,xb,s,s,s&o': ['族兄'],
225 | 'f,f,f,xb,s,s,s&l': ['族弟'],
226 | 'f,f,f,xb,d': ['堂姑祖母'],
227 | 'f,f,f,xb,d,h': ['堂姑祖父'],
228 | 'f,f,f,xs': ['曾祖姑母', '姑曾祖母', '太姑婆', '姑婆太', '姑太太', '曾祖姑', '姑婆奶奶'],
229 | 'f,f,f,xs,h': ['曾祖姑丈', '姑曾祖父', '太姑丈公', '姑丈公太', '姑太爷', '姑公老爷'],
230 | 'f,f,f,xs,s&o': ['表伯祖父'],
231 | 'f,f,f,xs,s&o,w': ['表伯祖母'],
232 | 'f,f,f,xs,s&l': ['表叔祖父'],
233 | 'f,f,f,xs,s&l,w': ['表叔祖母'],
234 | 'f,f,f,xs,d': ['表姑祖母', '族祖姑'],
235 | 'f,f,f,xs,d,h': ['表姑祖父'],
236 | 'f,f,m': ['曾祖母', '太奶奶', '太婆', '祖婆', '祖奶奶'],
237 | 'f,f,m,f': ['高外祖父', '祖太姥爷', '祖太公'],
238 | 'f,f,m,m': ['高外祖母', '祖太姥姥', '祖太姥娘', '祖太婆'],
239 | 'f,f,m,xb': ['舅曾祖父', '太舅公', '太舅爷', '舅太爷', '舅太爷爷', '舅公老爷'],
240 | 'f,f,m,xb,w': ['舅曾祖母', '太舅婆', '舅太太', '舅太奶奶', '舅婆奶奶'],
241 | 'f,f,m,xb,s&o': ['表伯祖父'],
242 | 'f,f,m,xb,s&o,w': ['表伯祖母'],
243 | 'f,f,m,xb,s&l': ['表叔祖父'],
244 | 'f,f,m,xb,s&l,w': ['表叔祖母'],
245 | 'f,f,m,xb,d': ['表姑祖母'],
246 | 'f,f,m,xb,d,h': ['表姑祖父'],
247 | 'f,f,m,xs': ['姨曾祖母', '太姨奶', '姨太太', '曾姨奶奶', '姨太奶奶', '姨婆奶奶'],
248 | 'f,f,m,xs,h': ['姨曾祖父', '太姨爷', '姨太爷', '姨太爷爷'],
249 | 'f,f,m,xs,s&o': ['表伯祖父'],
250 | 'f,f,m,xs,s&o,w': ['表伯祖母'],
251 | 'f,f,m,xs,s&l': ['表叔祖父'],
252 | 'f,f,m,xs,s&l,w': ['表叔祖母'],
253 | 'f,f,m,xs,d': ['表姑祖母'],
254 | 'f,f,m,xs,d,h': ['表姑祖父'],
255 | 'f,f,xb': ['堂祖父', 'x爷爷'],
256 | 'f,f,xb,w': ['堂祖母'],
257 | 'f,f,xb,s&o': ['堂伯', '堂伯父', '从父伯父'],
258 | 'f,f,xb,s&o,w': ['堂伯母', '从父伯母'],
259 | 'f,f,xb,s&l': ['堂叔', '从父叔父'],
260 | 'f,f,xb,s,w': ['堂婶', '堂叔母', '堂婶母', '从父叔母'],
261 | 'f,f,xb,s,s&o': ['从兄', '再从兄', '从兄弟'],
262 | 'f,f,xb,s,s&o,w': ['从嫂', '再从嫂'],
263 | 'f,f,xb,s,s&l': ['从弟', '再从弟', '从兄弟'],
264 | 'f,f,xb,s,s&l,w': ['从弟妹', '再从弟妹', '再从兄'],
265 | 'f,f,xb,s,s,s': ['从侄', '再从侄', '从侄子'],
266 | 'f,f,xb,s,s,s,w': ['从侄媳妇', '再从侄妇'],
267 | 'f,f,xb,s,s,s,s': ['从侄孙'],
268 | 'f,f,xb,s,s,s,d': ['从侄孙女'],
269 | 'f,f,xb,s,s,d': ['从侄女', '再从侄女'],
270 | 'f,f,xb,s,s,d,h': ['从侄女婿', '再从侄女婿', '姻家侄婿'],
271 | 'f,f,xb,s,d&o': ['从姐', '再从姐', '从姐妹'],
272 | 'f,f,xb,s,d&o,h': ['从姐夫', '再从姐夫'],
273 | 'f,f,xb,s,d&l': ['从妹', '再从妹', '从姐妹'],
274 | 'f,f,xb,s,d&l,h': ['从妹夫', '再妹夫'],
275 | 'f,f,xb,d': ['堂姑', '堂姑妈', '堂姑母', '从父姑母'],
276 | 'f,f,xb,d,h': ['堂姑丈', '堂姑爸', '堂姑父', '从父姑父'],
277 | 'f,f,xb,d,s&o': ['堂姑表兄'],
278 | 'f,f,xb,d,s&l': ['堂姑表弟'],
279 | 'f,f,xb,d,d&o': ['堂姑表姐'],
280 | 'f,f,xb,d,d&l': ['堂姑表妹'],
281 | 'f,f,ob': ['伯祖父', '伯老爷', '伯公', '大爷爷', '大爷', '堂祖父', '伯爷爷'],
282 | 'f,f,ob,w': ['伯祖母', '伯奶奶', '伯婆', '大奶奶', '堂祖母', '姆婆'],
283 | 'f,f,lb': ['叔祖父', '叔老爷', '叔公', '小爷爷', '堂祖父', '叔爷爷', '叔奶爷'],
284 | 'f,f,lb,w': ['叔祖母', '叔奶奶', '叔婆', '小奶奶', '堂祖母', '婶婆'],
285 | 'f,f,xs': ['姑奶奶', '姑内祖母', '祖姑母', '姑祖母', '姑奶', '姑婆', '祖姑'],
286 | 'f,f,xs,h': ['姑爷爷', '姑内祖父', '祖姑父', '姑祖父', '姑老爷', '姑公', '姑奶爷', '姑丈公'],
287 | 'f,f,xs,s&o': ['姑表伯父', '表伯父', '表伯'],
288 | 'f,f,xs,s&o,w': ['姑表伯母', '表伯母'],
289 | 'f,f,xs,s&l': ['姑表叔父', '表叔父', '表叔爸', '表叔'],
290 | 'f,f,xs,s&l,w': ['姑表叔母', '表叔母', '表叔妈', '表婶'],
291 | 'f,f,xs,s,s': ['从表兄弟'],
292 | 'f,f,xs,s,d': ['从表姐妹'],
293 | 'f,f,xs,d': ['姑表姑母', '表姑妈', '表姑母', '表姑姑', '表姑'],
294 | 'f,f,xs,d,h': ['姑表姑父', '表姑爸', '表姑父', '表姑丈'],
295 | 'f,f,xs,d,s': ['从表兄弟'],
296 | 'f,f,xs,d,d': ['从表姐妹'],
297 | 'f,m': ['奶奶', '祖母', '阿嫲', '阿嬷', '嫲嫲'],
298 | 'f,m,f': ['曾外祖父', '外太公', '太姥爷'],
299 | 'f,m,f,f': ['曾外曾祖父', '祖太爷', '祖太爷爷', '祖太公'],
300 | 'f,m,f,m': ['曾外曾祖母', '祖太太', '祖太奶奶', '祖太婆'],
301 | 'f,m,f,xb,s': ['堂舅祖父'],
302 | 'f,m,f,xb,s,w': ['堂舅祖母'],
303 | 'f,m,f,xb,d': ['堂姨祖母'],
304 | 'f,m,f,xb,d,h': ['堂姨祖父'],
305 | 'f,m,f,ob': ['伯曾外祖父', '伯太姥爷', '伯太奶爷'],
306 | 'f,m,f,ob,w': ['伯曾外祖母', '伯太姥姥', '伯太奶奶'],
307 | 'f,m,f,lb': ['叔曾外祖父', '叔太姥爷', '叔太奶爷'],
308 | 'f,m,f,lb,w': ['叔曾外祖母', '叔太姥姥', '叔太奶奶'],
309 | 'f,m,f,xs': ['姑曾外祖母', '姑太姥姥', '姑太奶奶'],
310 | 'f,m,f,xs,h': ['姑曾外祖父', '姑太姥爷', '姑太奶爷', '姑太爷爷'],
311 | 'f,m,f,xs,s': ['表舅祖父'],
312 | 'f,m,f,xs,s,w': ['表舅祖母'],
313 | 'f,m,m': ['曾外祖母', '外太婆', '太姥姥'],
314 | 'f,m,m,f': ['曾外曾外祖父', '祖太姥爷', '祖太公'],
315 | 'f,m,m,m': ['曾外曾外祖母', '祖太姥姥', '祖太姥娘', '祖太婆'],
316 | 'f,m,m,xb': ['舅曾外祖父', '舅太姥爷', '舅太奶爷'],
317 | 'f,m,m,xb,w': ['舅曾外祖母', '舅太姥姥', '舅太奶奶'],
318 | 'f,m,m,xb,s': ['表舅祖父'],
319 | 'f,m,m,xb,s,w': ['表舅祖母'],
320 | 'f,m,m,xb,d': ['表姨祖母'],
321 | 'f,m,m,xb,d,h': ['表姨祖父'],
322 | 'f,m,m,xs': ['姨曾外祖母', '姨太姥姥', '姨太奶奶'],
323 | 'f,m,m,xs,h': ['姨曾外祖父', '姨太姥爷', '姨太奶爷'],
324 | 'f,m,m,xs,d': ['表姨祖母'],
325 | 'f,m,m,xs,d,h': ['表姨祖父'],
326 | 'f,m,m,xs,s': ['表舅祖父'],
327 | 'f,m,m,xs,s,w': ['表舅祖母'],
328 | 'f,m,m,xs,d': ['表姨祖母'],
329 | 'f,m,m,xs,d,h': ['表姨祖父'],
330 | 'f,m,xb': ['舅公', '舅祖父', '舅老爷', '舅爷爷', '舅爷', '舅祖', '舅奶爷', '太舅父'],
331 | 'f,m,xb,w': ['舅婆', '舅祖母', '舅奶奶', '舅奶', '妗婆', '太舅母'],
332 | 'f,m,xb,s&o': ['舅表伯父', '表伯父', '表伯'],
333 | 'f,m,xb,s&o,w': ['舅表伯母', '表伯母'],
334 | 'f,m,xb,s&l': ['舅表叔父', '表叔父', '表叔爸', '表叔'],
335 | 'f,m,xb,s&l,w': ['舅表叔母', '表叔母', '表叔妈', '表婶'],
336 | 'f,m,xb,s,s': ['从表兄弟'],
337 | 'f,m,xb,s,d': ['从表姐妹'],
338 | 'f,m,xb,d': ['舅表姑母', '表姑妈', '表姑母', '表姑姑', '表姑'],
339 | 'f,m,xb,d,h': ['舅表姑父', '表姑爸', '表姑父', '表姑丈'],
340 | 'f,m,xb,d,s': ['从表兄弟'],
341 | 'f,m,xb,d,d': ['从表姐妹'],
342 | 'f,m,xs': ['姨奶奶', '祖姨母', '姨祖母', '姨婆', '姨奶'],
343 | 'f,m,xs,h': ['姨爷爷', '祖姨父', '姨祖父', '姨公', '姨丈公', '姨爷', '姨老爷', '姨奶爷'],
344 | 'f,m,xs,s&o': ['姨表伯父', '表伯', '表伯父', '从母伯父'],
345 | 'f,m,xs,s&o,w': ['姨表伯母', '表伯母', '从母伯母'],
346 | 'f,m,xs,s&l': ['姨表叔父', '表叔父', '表叔爸', '表叔', '从母叔父'],
347 | 'f,m,xs,s&l,w': ['姨表叔母', '表叔母', '表叔妈', '表婶', '从母叔母'],
348 | 'f,m,xs,s,s': ['从表兄弟'],
349 | 'f,m,xs,s,d': ['从表姐妹'],
350 | 'f,m,xs,d': ['姨表姑母', '表姑妈', '表姑母', '表姑姑', '表姑', '从母姑母'],
351 | 'f,m,xs,d,h': ['姨表姑父', '表姑爸', '表姑父', '表姑丈', '从母姑父'],
352 | 'f,m,xs,d,s': ['从表兄弟'],
353 | 'f,m,xs,d,d': ['从表姐妹'],
354 | 'f,xb,w,f': ['姻伯公'],
355 | 'f,xb,w,m': ['姻伯婆'],
356 | 'f,xb,w,xb': ['姻世伯'],
357 | 'f,xb,w,xb,w': ['姻伯母'],
358 | 'f,xb,w,xs': ['姻伯母'],
359 | 'f,xb,w,xs,h': ['姻世伯'],
360 | 'f,xb,s&o': ['堂哥', '堂兄', '堂阿哥', '叔伯兄弟'],
361 | 'f,xb,s&o,w': ['堂嫂'],
362 | 'f,xb,s&l': ['堂弟', '堂阿弟', '叔伯兄弟'],
363 | 'f,xb,s&l,w': ['堂弟媳', '堂弟妹'],
364 | 'f,xb,s,s': ['堂侄', '堂侄子', '叔伯侄子'],
365 | 'f,xb,s,s,w': ['堂侄媳妇'],
366 | 'f,xb,s,s,s': ['堂侄孙'],
367 | 'f,xb,s,s,s,w': ['堂侄孙媳妇'],
368 | 'f,xb,s,s,d': ['堂侄孙女'],
369 | 'f,xb,s,s,d,h': ['堂侄孙女婿'],
370 | 'f,xb,s,d': ['堂侄女'],
371 | 'f,xb,s,d,h': ['堂侄女婿', '姻家侄'],
372 | 'f,xb,d&o': ['堂姐', '堂阿姐', '叔伯姐妹'],
373 | 'f,xb,d&o,h': ['堂姐夫'],
374 | 'f,xb,d&l': ['堂妹', '堂阿妹', '叔伯姐妹'],
375 | 'f,xb,d&l,h': ['堂妹夫'],
376 | 'f,xb,d,s': ['堂外甥'],
377 | 'f,xb,d,d': ['堂外甥女'],
378 | 'f,ob': ['伯父', '伯伯', '阿伯', '大伯', 'x伯'],
379 | 'f,ob,w': ['伯母', '大娘', '大妈', 'x妈'],
380 | 'f,lb': ['叔叔', '叔父', '阿叔', '叔爸', '叔爹', '仲父', 'x叔', '叔'],
381 | 'f,lb,w': ['婶婶', '婶母', '阿婶', '家婶', '叔母', '叔妈', '叔娘', '季母', 'x婶', '婶'],
382 | //姑家
383 | 'f,xs': ['姑妈', '姑姑', '姑娘', '大姑妈', 'x姑妈', '姑'],
384 | 'f,xs,h': ['姑丈', '姑父', '姑爸', '姑夫'],
385 | 'f,xs,h,f': ['姻伯公'],
386 | 'f,xs,h,m': ['姻伯婆'],
387 | 'f,xs,h,xb': ['姻世伯'],
388 | 'f,xs,h,xb,w': ['姻伯母'],
389 | 'f,xs,h,xs': ['姻伯母'],
390 | 'f,xs,h,xs,h': ['姻世伯'],
391 | 'f,xs,s&o': ['姑表哥', '表哥'],
392 | 'f,xs,s&o,w': ['姑表嫂', '表嫂'],
393 | 'f,xs,s&l': ['姑表弟', '表弟'],
394 | 'f,xs,s&l,w': ['姑表弟媳', '表弟媳', '表弟妹'],
395 | 'f,xs,s,s': ['表侄', '表侄子', '姑表侄男', '表侄男'],
396 | 'f,xs,s,s,s': ['表侄孙'],
397 | 'f,xs,s,s,s,w': ['表侄孙媳妇'],
398 | 'f,xs,s,s,d': ['表侄孙女'],
399 | 'f,xs,s,s,d,h': ['表侄孙女婿'],
400 | 'f,xs,s,d': ['表侄女', '姑表侄女'],
401 | 'f,xs,s,d,s': ['外表侄孙'],
402 | 'f,xs,s,d,s,w': ['外表侄孙媳妇'],
403 | 'f,xs,s,d,d': ['外表侄孙女'],
404 | 'f,xs,s,d,d,h': ['外表侄孙女婿'],
405 | 'f,xs,d&o': ['姑表姐', '表姐'],
406 | 'f,xs,d&o,h': ['姑表姐夫', '表姐夫', '表姐丈'],
407 | 'f,xs,d&l': ['姑表妹', '表妹'],
408 | 'f,xs,d&l,h': ['姑表妹夫', '表妹夫'],
409 | 'f,xs,d,s': ['表外甥', '姑表甥男', '表甥男'],
410 | 'f,xs,d,d': ['表外甥女', '姑表甥女', '表甥女'],
411 | 'f,os': ['姑妈', '姑母'],
412 | 'f,ls': ['姑妈', '姑姐'],
413 | //外家
414 | 'm': ['妈妈', '母亲', '老妈', '阿妈', '老母', '老妈子', '妈', '母', '娘', '娘亲', '妈咪'],
415 | 'm,f': ['外公', '外祖父', '姥爷'],
416 | 'm,f,f': ['外曾祖父', '外太祖父', '外太公', '外太爷爷', '太外祖父'],
417 | 'm,f,f,f': ['外高祖父', '祖太爷', '祖太爷爷', '祖太公'],
418 | 'm,f,f,m': ['外高祖母', '祖太太', '祖太奶奶', '祖太婆'],
419 | 'm,f,f,xb,s&o': ['堂伯外祖父'],
420 | 'm,f,f,xb,s&o,w': ['堂伯外祖母'],
421 | 'm,f,f,xb,s&l': ['堂叔外祖父'],
422 | 'm,f,f,xb,s&l,w': ['堂叔外祖母'],
423 | 'm,f,f,xb,d': ['堂姑外祖母'],
424 | 'm,f,f,xb,d,h': ['堂姑外祖父'],
425 | 'm,f,f,ob': ['伯外曾祖父', '外太伯公', '伯太姥爷', '伯太奶爷', '伯太爷爷'],
426 | 'm,f,f,ob,w': ['伯外曾祖母', '外太伯母', '伯太姥姥', '伯太奶奶'],
427 | 'm,f,f,lb': ['叔外曾祖父', '外太叔公', '叔太姥爷', '叔太奶爷', '叔太爷爷'],
428 | 'm,f,f,lb,w': ['叔外曾祖母', '外太叔母', '叔太姥姥', '叔太奶奶'],
429 | 'm,f,f,xs': ['姑外曾祖母', '外太姑婆', '姑太姥姥', '姑太奶奶'],
430 | 'm,f,f,xs,h': ['姑外曾祖父', '外太姑丈公', '姑太姥爷', '姑太奶爷', '姑太爷爷'],
431 | 'm,f,f,xs,s&o': ['表伯外祖父', '外表伯祖父'],
432 | 'm,f,f,xs,s&o,w': ['表伯外祖母', '外表伯祖母'],
433 | 'm,f,f,xs,s&l': ['表叔外祖父', '外表叔祖父'],
434 | 'm,f,f,xs,s&l,w': ['表叔外祖母', '外表叔祖母'],
435 | 'm,f,f,xs,d': ['表姑外祖母'],
436 | 'm,f,f,xs,d,h': ['表姑外祖父'],
437 | 'm,f,m': ['外曾祖母', '外太祖母', '太外祖母', '外太奶奶', '外太婆'],
438 | 'm,f,m,f': ['外高外祖父', '祖太姥爷', '祖太公'],
439 | 'm,f,m,m': ['外高外祖母', '祖太姥姥', '祖太姥娘', '祖太婆'],
440 | 'm,f,m,xb': ['舅外曾祖父', '外太舅公', '舅太姥爷', '舅太奶爷'],
441 | 'm,f,m,xb,w': ['舅外曾祖母', '外太舅母', '舅太姥姥', '舅太奶奶', '外太舅婆'],
442 | 'm,f,m,xb,s&o': ['表伯外祖父', '外表伯祖父'],
443 | 'm,f,m,xb,s&o,w': ['表伯外祖母', '外表伯祖母'],
444 | 'm,f,m,xb,s&l': ['表叔外祖父', '外表叔祖父'],
445 | 'm,f,m,xb,s&l,w': ['表叔外祖母', '外表叔祖母'],
446 | 'm,f,m,xb,d': ['表姑外祖母'],
447 | 'm,f,m,xb,d,h': ['表姑外祖父'],
448 | 'm,f,m,xs': ['姨外曾祖母', '外太姨婆', '姨太姥姥', '姨太奶奶'],
449 | 'm,f,m,xs,h': ['姨外曾祖父', '外太姑姨公', '姨太姥爷', '姨太奶爷', '姨太爷爷'],
450 | 'm,f,m,xs,s&o': ['表伯外祖父', '外表伯祖父'],
451 | 'm,f,m,xs,s&o,w': ['表伯外祖母', '外表伯祖母'],
452 | 'm,f,m,xs,s&l': ['表叔外祖父', '外表叔祖父'],
453 | 'm,f,m,xs,s&l,w': ['表叔外祖母', '外表叔祖母'],
454 | 'm,f,m,xs,d': ['表姑外祖母'],
455 | 'm,f,m,xs,d,h': ['表姑外祖父'],
456 | 'm,f,xb': ['大姥爷/小姥爷', 'x姥爷'],
457 | 'm,f,xb,s': ['堂舅', '堂舅爸', '堂舅父', '堂舅舅', '从父舅父'],
458 | 'm,f,xb,s,w': ['堂舅妈', '堂舅母', '从父舅母'],
459 | 'm,f,xb,s,s&o': ['堂舅表兄'],
460 | 'm,f,xb,s,s&l': ['堂舅表弟'],
461 | 'm,f,xb,s,d&o': ['堂舅表姐'],
462 | 'm,f,xb,s,d&l': ['堂舅表妹'],
463 | 'm,f,xb,d': ['堂姨', '堂姨妈', '堂姨母', '从父姨母'],
464 | 'm,f,xb,d,h': ['堂姨丈', '堂姨爸', '堂姨父', '从父姨父'],
465 | 'm,f,xb,d,s&o': ['堂姨表兄'],
466 | 'm,f,xb,d,s&l': ['堂姨表弟'],
467 | 'm,f,xb,d,d&o': ['堂姨表姐'],
468 | 'm,f,xb,d,d&l': ['堂姨表妹'],
469 | 'm,f,ob': ['伯外祖父', '外伯祖父', '伯姥爷', '大姥爷', '外伯祖', '外伯公'],
470 | 'm,f,ob,w': ['伯外祖母', '外伯祖母', '伯姥姥', '大姥姥', '外姆婆', '外伯婆'],
471 | 'm,f,lb': ['叔外祖父', '外叔祖父', '叔姥爷', '小姥爷', '外叔祖', '叔外祖', '外叔公'],
472 | 'm,f,lb,w': ['叔外祖母', '外叔祖母', '叔姥姥', '小姥姥', '外姆婆', '外叔婆'],
473 | 'm,f,xs': ['姑姥姥', '姑外祖母', '外姑祖母', '外太姑母', '外姑婆', '外姑母'],
474 | 'm,f,xs,h': ['姑姥爷', '姑外祖父', '外姑祖父', '外太姑父', '外姑公', '外姑丈'],
475 | 'm,f,xs,s': ['姑表舅父', '姑表舅爸', '表舅父', '表舅爸', '表舅', '表舅舅', '姑表舅舅'],
476 | 'm,f,xs,s,w': ['姑表舅母', '姑表舅妈', '表舅母', '表舅妈'],
477 | 'm,f,xs,s,s': ['从表兄弟'],
478 | 'm,f,xs,s,d': ['从表姐妹'],
479 | 'm,f,xs,d': ['姑表姨母', '姑表姨妈', '表姨母', '表姨妈', '表姨', '表阿姨', '姑表姨姨'],
480 | 'm,f,xs,d,h': ['姑表姨父', '姑表姨父', '表姨丈', '表姨父'],
481 | 'm,f,xs,d,s': ['从表兄弟'],
482 | 'm,f,xs,d,d': ['从表姐妹'],
483 | 'm,m': ['外婆', '外祖母', '姥姥', '阿婆'],
484 | 'm,m,f': ['外曾外祖父', '外太外公', '外太姥爷'],
485 | 'm,m,f,f': ['外曾外曾祖父', '祖太爷', '祖太爷爷', '祖太公'],
486 | 'm,m,f,m': ['外曾外曾祖母', '祖太太', '祖太奶奶', '祖太婆'],
487 | 'm,m,f,xb,s': ['堂舅外祖父'],
488 | 'm,m,f,xb,s,w': ['堂舅外祖母'],
489 | 'm,m,f,xb,d': ['堂姨外祖母'],
490 | 'm,m,f,xb,d,h': ['堂姨外祖父'],
491 | 'm,m,f,ob': ['伯外曾外祖父', '伯太姥爷'],
492 | 'm,m,f,ob,w': ['伯外曾外祖母', '伯太姥姥'],
493 | 'm,m,f,lb': ['叔外曾外祖父', '叔太姥爷'],
494 | 'm,m,f,lb,w': ['叔外曾外祖母', '叔太姥姥'],
495 | 'm,m,f,xs': ['姑外曾外祖母', '姑太姥姥'],
496 | 'm,m,f,xs,h': ['姑外曾外祖父', '姑太姥爷'],
497 | 'm,m,f,xs,s': ['表舅外祖父'],
498 | 'm,m,f,xs,s,w': ['表舅外祖母'],
499 | 'm,m,f,xs,d': ['表姨外祖母'],
500 | 'm,m,f,xs,d,h': ['表姨外祖父'],
501 | 'm,m,m': ['外曾外祖母', '外太外婆', '外太姥姥'],
502 | 'm,m,m,f': ['外曾外曾外祖父', '祖太姥爷', '祖太公'],
503 | 'm,m,m,m': ['外曾外曾外祖母', '祖太姥姥', '祖太姥娘', '祖太婆'],
504 | 'm,m,m,xb': ['舅外曾外祖父', '舅太姥爷'],
505 | 'm,m,m,xb,w': ['舅外曾外祖母', '舅太姥姥'],
506 | 'm,m,m,xb,s': ['表舅外祖父'],
507 | 'm,m,m,xb,s,w': ['表舅外祖母'],
508 | 'm,m,m,xb,d': ['表姨外祖母'],
509 | 'm,m,m,xb,d,h': ['表姨外祖父'],
510 | 'm,m,m,xs': ['姨外曾外祖母', '姨太姥姥'],
511 | 'm,m,m,xs,h': ['姨外曾外祖父', '姨太姥爷'],
512 | 'm,m,m,xs,s': ['表舅外祖父'],
513 | 'm,m,m,xs,s,w': ['表舅外祖母'],
514 | 'm,m,m,xs,d': ['表姨外祖母'],
515 | 'm,m,m,xs,d,h': ['表姨外祖父'],
516 | 'm,m,xb': ['外舅公', '外舅祖父', '外太舅父', '舅外祖父', '舅姥爷', '舅外公', '舅公', 'x舅姥爷'],
517 | 'm,m,xb,w': ['外舅婆', '外舅祖母', '外太舅母', '舅外祖母', '舅姥姥', '舅婆', '外妗婆'],
518 | 'm,m,xb,s': ['舅表舅父', '舅表舅爸', '表舅父', '表舅爸', '表舅', '表舅舅', '舅表舅舅'],
519 | 'm,m,xb,s,w': ['舅表舅母', '舅表舅妈', '表舅母', '表舅妈'],
520 | 'm,m,xb,s,s': ['从表兄弟'],
521 | 'm,m,xb,s,d': ['从表姐妹'],
522 | 'm,m,xb,d': ['舅表姨母', '舅表姨妈', '表姨母', '表姨妈', '表姨', '表阿姨', '舅表姨姨'],
523 | 'm,m,xb,d,h': ['舅表姨父', '舅表姨丈', '表姨父', '表姨丈'],
524 | 'm,m,xb,d,s': ['从表兄弟'],
525 | 'm,m,xb,d,d': ['从表姐妹'],
526 | 'm,m,xs': ['姨姥姥', '姨外祖母', '外姨婆', '外姨祖母', '姨婆', '姨姥'],
527 | 'm,m,xs,h': ['姨姥爷', '姨外祖父', '外姨丈公', '外姨祖父', '姨公'],
528 | 'm,m,xs,s': ['姨表舅父', '姨表舅爸', '表舅父', '表舅爸', '表舅', '表舅舅', '姨表舅舅', '从母舅父'],
529 | 'm,m,xs,s,w': ['姨表舅母', '姨表舅妈', '表舅母', '表舅妈', '从母舅母'],
530 | 'm,m,xs,s,s': ['从表兄弟'],
531 | 'm,m,xs,s,d': ['从表姐妹'],
532 | 'm,m,xs,d': ['姨表姨母', '姨表姨妈', '表姨母', '表姨妈', '表姨', '表阿姨', '姨表姨姨', '从母姨母'],
533 | 'm,m,xs,d,h': ['姨表姨父', '姨表姨丈', '表姨父', '表姨丈', '从母姨父'],
534 | 'm,m,xs,d,s': ['从表兄弟'],
535 | 'm,m,xs,d,d': ['从表姐妹'],
536 | //舅家
537 | 'm,xb': ['舅舅', '舅父', '舅', '娘舅', '舅仔', '母舅', '舅爸', '舅爹', '阿舅', 'x舅'],
538 | 'm,xb,w': ['舅妈', '舅母', '妗子', '妗妗', '妗母', '阿妗', 'x舅妈'],
539 | 'm,xb,w,f': ['姻伯公'],
540 | 'm,xb,w,m': ['姻伯婆'],
541 | 'm,xb,w,xb': ['姻世伯'],
542 | 'm,xb,w,xb,w': ['姻伯母'],
543 | 'm,xb,w,xs': ['姻伯母'],
544 | 'm,xb,w,xs,h': ['姻世伯'],
545 | 'm,xb,s&o': ['舅表哥', '表哥'],
546 | 'm,xb,s&o,w': ['舅表嫂', '表嫂'],
547 | 'm,xb,s&l': ['舅表弟', '表弟'],
548 | 'm,xb,s&l,w': ['舅表弟媳', '表弟媳', '表弟妹'],
549 | 'm,xb,s,s': ['表侄', '表侄子', '舅表侄男', '表侄男'],
550 | 'm,xb,s,s,s': ['表侄孙'],
551 | 'm,xb,s,s,s,w': ['表侄孙媳妇'],
552 | 'm,xb,s,s,d': ['表侄孙女'],
553 | 'm,xb,s,s,d,h': ['表侄孙女婿'],
554 | 'm,xb,s,d': ['表侄女', '舅表侄女'],
555 | 'm,xb,s,d,s': ['外表侄孙'],
556 | 'm,xb,s,d,s,w': ['外表侄孙媳妇'],
557 | 'm,xb,s,d,d': ['外表侄孙女'],
558 | 'm,xb,s,d,d,h': ['外表侄孙女婿'],
559 | 'm,xb,d&o': ['舅表姐', '表姐'],
560 | 'm,xb,d&o,h': ['舅表姐夫', '表姐夫', '表姐丈'],
561 | 'm,xb,d&l': ['舅表妹', '表妹'],
562 | 'm,xb,d&l,h': ['舅表妹夫', '表妹夫'],
563 | 'm,xb,d,s': ['表外甥', '舅表甥男', '表甥男'],
564 | 'm,xb,d,d': ['表外甥女', '舅表甥女', '表甥女'],
565 | 'm,ob': ['大舅'],
566 | 'm,ob,w': ['大舅妈'],
567 | 'm,lb': ['小舅', '舅父仔'],
568 | 'm,lb,w': ['小舅妈'],
569 | //姨家
570 | 'm,xs': ['姨妈', '姨母', '姨姨', '姨娘', '阿姨', '姨', 'x姨', 'x姨妈'],
571 | 'm,xs,h': ['姨丈', '姨父', '姨爸', '姨爹', 'x姨父'],
572 | 'm,xs,h,f': ['姻伯公'],
573 | 'm,xs,h,m': ['姻伯婆'],
574 | 'm,xs,h,xb': ['姻世伯'],
575 | 'm,xs,h,xb,w': ['姻伯母'],
576 | 'm,xs,h,xs': ['姻伯母'],
577 | 'm,xs,h,xs,h': ['姻世伯'],
578 | 'm,xs,s&o': ['姨表哥', '表哥'],
579 | 'm,xs,s&o,w': ['姨表嫂', '表嫂'],
580 | 'm,xs,s&l': ['姨表弟', '表弟'],
581 | 'm,xs,s&l,w': ['姨表弟媳', '表弟媳', '表弟妹'],
582 | 'm,xs,s,s': ['表侄', '表侄子', '姨表侄男', '表侄男'],
583 | 'm,xs,s,s,s': ['表侄孙'],
584 | 'm,xs,s,s,s,w': ['表侄孙媳妇'],
585 | 'm,xs,s,s,d': ['表侄孙女'],
586 | 'm,xs,s,s,d,h': ['表侄孙女婿'],
587 | 'm,xs,s,d': ['表侄女', '姨表侄女'],
588 | 'm,xs,s,d,s': ['外表侄孙'],
589 | 'm,xs,s,d,s,w': ['外表侄孙媳妇'],
590 | 'm,xs,s,d,d': ['外表侄孙女'],
591 | 'm,xs,s,d,d,h': ['外表侄孙女婿'],
592 | 'm,xs,d&o': ['姨表姐', '表姐'],
593 | 'm,xs,d&o,h': ['姨表姐夫', '表姐夫', '表姐丈'],
594 | 'm,xs,d&l': ['姨表妹', '表妹'],
595 | 'm,xs,d&l,h': ['姨表妹夫', '表妹夫'],
596 | 'm,xs,d,s': ['表外甥', '姨表甥男', '姨表甥男'],
597 | 'm,xs,d,d': ['表外甥女', '姨表甥女', '表甥女'],
598 | 'm,os': ['大姨', '大姨妈'],
599 | 'm,os,h': ['大姨父', '大姨丈'],
600 | 'm,ls': ['小姨', '小姨妈', '姨仔'],
601 | 'm,ls,h': ['小姨父', '小姨丈'],
602 | //婆家
603 | 'h': ['老公', '丈夫', '先生', '官人', '男人', '汉子', '夫', '夫君', '相公', '夫婿', '爱人', '老伴'],
604 | 'h,f': ['公公', '翁亲', '老公公'],
605 | 'h,f,f': ['祖翁'],
606 | 'h,f,f,ob': ['伯祖翁'],
607 | 'h,f,f,ob,w': ['伯祖婆'],
608 | 'h,f,f,lb': ['叔祖翁'],
609 | 'h,f,f,lb,w': ['叔祖婆'],
610 | 'h,f,f,f': ['太公翁'],
611 | 'h,f,f,f,ob': ['太伯翁'],
612 | 'h,f,f,f,ob,w': ['太姆婆'],
613 | 'h,f,f,f,lb': ['太叔翁'],
614 | 'h,f,f,f,lb,w': ['太婶婆'],
615 | 'h,f,f,m': ['太奶亲'],
616 | 'h,f,m': ['祖婆'],
617 | 'h,f,ob': ['伯翁'],
618 | 'h,f,ob,w': ['伯婆'],
619 | 'h,f,lb': ['叔公', '叔翁', '叔祖'],
620 | 'h,f,lb,w': ['叔婆', '婶婆', '婶亲'],
621 | 'h,f,xb,s&o': ['堂大伯', '堂兄', '堂大伯哥'],
622 | 'h,f,xb,s&o,w': ['堂嫂', '堂大伯嫂'],
623 | 'h,f,xb,s&l': ['堂叔仔', '堂弟', '堂小叔弟'],
624 | 'h,f,xb,s&l,w': ['堂小弟', '堂弟妇', '堂小叔弟妇'],
625 | 'h,f,xb,s,s': ['堂夫侄男'],
626 | 'h,f,xb,s,d': ['堂夫侄女'],
627 | 'h,f,xb,d&o': ['堂大姑姐'],
628 | 'h,f,xb,d&o,h': ['堂大姑姐夫'],
629 | 'h,f,xb,d&l': ['堂小姑妹'],
630 | 'h,f,xb,d&l,h': ['堂小姑妹夫'],
631 | 'h,f,xb,d,s': ['堂夫甥男'],
632 | 'h,f,xb,d,d': ['堂夫甥女'],
633 | 'h,f,xs': ['姑婆'],
634 | 'h,f,xs,h': ['姑公'],
635 | 'h,f,xs,s&o': ['姑表大伯子', '表大伯'],
636 | 'h,f,xs,s&o,w': ['姑表大伯嫂', '表大姆'],
637 | 'h,f,xs,s&l': ['姑表小叔弟', '表叔仔'],
638 | 'h,f,xs,s&l,w': ['姑表小叔弟妇'],
639 | 'h,f,xs,s,s': ['姑表夫侄男'],
640 | 'h,f,xs,s,d': ['姑表夫侄女'],
641 | 'h,f,xs,d&o': ['姑表大姑姐', '表大姑'],
642 | 'h,f,xs,d&o,h': ['姑表大姑姐夫'],
643 | 'h,f,xs,d&l': ['姑表小姑妹', '表姑仔'],
644 | 'h,f,xs,d&l,h': ['姑表小姑妹夫'],
645 | 'h,f,xs,d,s': ['姑表夫甥男'],
646 | 'h,f,xs,d,d': ['姑表夫甥女'],
647 | 'h,m': ['婆婆', '婆母', '姑亲', '老婆婆'],
648 | 'h,m,xb': ['舅公'],
649 | 'h,m,xb,w': ['舅婆'],
650 | 'h,m,xb,s&o': ['舅表大伯子', '表大伯'],
651 | 'h,m,xb,s&o,w': ['舅表大伯嫂', '表大姆'],
652 | 'h,m,xb,s&l': ['舅表小叔弟', '表叔仔'],
653 | 'h,m,xb,s&l,w': ['舅表小叔弟妇'],
654 | 'h,m,xb,s,s': ['舅表夫侄男'],
655 | 'h,m,xb,s,d': ['舅表夫侄女'],
656 | 'h,m,xb,d&o': ['舅表大姑姐', '表大姑'],
657 | 'h,m,xb,d&o,h': ['舅表大姑姐夫'],
658 | 'h,m,xb,d&l': ['舅表小姑妹', '表姑仔'],
659 | 'h,m,xb,d&l,h': ['舅表小姑妹夫'],
660 | 'h,m,xb,d,s': ['舅表夫甥男'],
661 | 'h,m,xb,d,d': ['舅表夫甥女'],
662 | 'h,m,xs': ['姨婆'],
663 | 'h,m,xs,h': ['姨公'],
664 | 'h,m,xs,s&o': ['姨表大伯子', '表大伯'],
665 | 'h,m,xs,s&o,w': ['姨表大伯嫂', '表大姆'],
666 | 'h,m,xs,s&l': ['姨表小叔弟', '表叔仔'],
667 | 'h,m,xs,s&l,w': ['姨表小叔弟妇'],
668 | 'h,m,xs,s,s': ['姨表夫侄男'],
669 | 'h,m,xs,s,d': ['姨表夫侄女'],
670 | 'h,m,xs,d&o': ['姨表大姑姐', '表大姑'],
671 | 'h,m,xs,d&o,h': ['姨表大姑姐夫'],
672 | 'h,m,xs,d&l': ['姨表小姑妹', '表姑仔'],
673 | 'h,m,xs,d&l,h': ['姨表小姑妹夫'],
674 | 'h,m,xs,d,s': ['姨表夫甥男'],
675 | 'h,m,xs,d,d': ['姨表夫甥女'],
676 | 'h,ob': ['大伯子', '大伯哥', '大伯兄', '夫兄'],
677 | 'h,ob,w': ['大婶子', '大伯嫂', '大伯妇', '伯娘', '大伯娘', '大嫂', '夫兄嫂', '妯娌'],
678 | 'h,lb': ['小叔子', '小叔弟'],
679 | 'h,lb,w': ['小婶子', '小叔妇', '小叔媳妇', '小叔弟妇', '妯娌'],
680 | 'h,xb,s': ['叔侄', '婆家侄'],
681 | 'h,os': ['大姑子', '大姑', '大娘姑', '大姑姊'],
682 | 'h,os,h': ['大姑夫', '姊丈', '大姑姐夫', '大姑姊夫'],
683 | 'h,ls': ['小姑子', '小姑', '小姑妹', '姑仔'],
684 | 'h,ls,h': ['小姑夫', '小亘子', '小姑妹夫'],
685 | 'h,xs,s': ['姑甥', '婆家甥'],
686 | //岳家
687 | 'w': ['老婆', '妻子', '太太', '媳妇儿', '媳妇', '夫人', '女人', '婆娘', '妻', '内人', '娘子', '爱人', '老伴'],
688 | 'w,f': ['岳父', '岳丈', '老丈人', '丈人', '泰山', '妻父'],
689 | 'w,f,f': ['太岳父', '祖岳父'],
690 | 'w,f,f,f,xb,s,s&o': ['姻伯丈'],
691 | 'w,f,f,f,xb,s,s&o,w': ['姻伯丈'],
692 | 'w,f,f,f,xb,s,s&l': ['姻叔丈'],
693 | 'w,f,f,f,xb,s,s&l,w': ['姻婶'],
694 | 'w,f,f,ob': ['太伯岳'],
695 | 'w,f,f,ob,w': ['太伯岳母'],
696 | 'w,f,f,lb,': ['太叔岳'],
697 | 'w,f,f,lb,w': ['太叔岳母'],
698 | 'w,f,f,xb,s&o': ['姻伯'],
699 | 'w,f,f,xb,s&o,w': ['姻姆'],
700 | 'w,f,f,xb,s&l': ['姻叔'],
701 | 'w,f,f,xb,s&l,w': ['姻婶'],
702 | 'w,f,f,xs': ['太姑岳母'],
703 | 'w,f,f,xs,h': ['太姑岳父'],
704 | 'w,f,m': ['太岳母', '祖岳母'],
705 | 'w,f,m,xb': ['太舅岳父'],
706 | 'w,f,m,xb,w': ['太舅岳母'],
707 | 'w,f,m,xs': ['太姨岳母'],
708 | 'w,f,m,xs,h': ['太姨岳父'],
709 | 'w,f,xb,s&o': ['堂大舅', '姻家兄'],
710 | 'w,f,xb,s&l': ['堂舅仔', '姻家弟'],
711 | 'w,f,xb,d&o': ['堂大姨'],
712 | 'w,f,xb,d&l': ['堂姨仔'],
713 | 'w,f,ob': ['伯岳', '伯岳父'],
714 | 'w,f,ob,w': ['伯岳母'],
715 | 'w,f,lb': ['叔岳', '叔岳父'],
716 | 'w,f,lb,w': ['叔岳母'],
717 | 'w,f,xs': ['姑岳母'],
718 | 'w,f,xs,h': ['姑岳父'],
719 | 'w,f,xs,s&o': ['表大舅', '表内兄'],
720 | 'w,f,xs,s&o,w': ['表内嫂'],
721 | 'w,f,xs,s&l': ['表舅仔', '表内弟'],
722 | 'w,f,xs,s&l,w': ['表内弟妇'],
723 | 'w,f,xs,d&o': ['表大姨', '表内姐'],
724 | 'w,f,xs,d&o,h': ['表襟兄'],
725 | 'w,f,xs,d&l': ['表姨仔', '表内妹'],
726 | 'w,f,xs,d&l,w': ['表襟弟'],
727 | 'w,m': ['岳母', '丈母娘', '丈母', '泰水'],
728 | 'w,m,f': ['外太岳父'],
729 | 'w,m,m': ['外太岳母'],
730 | 'w,m,xb': ['舅岳父'],
731 | 'w,m,xb,w': ['舅岳母'],
732 | 'w,m,xb,s&o': ['表大舅'],
733 | 'w,m,xb,s&l': ['表舅仔'],
734 | 'w,m,xb,d&o': ['表大姨'],
735 | 'w,m,xb,d&l': ['表姨仔'],
736 | 'w,m,xs': ['姨岳母'],
737 | 'w,m,xs,h': ['姨岳父'],
738 | 'w,m,xs,s&o': ['表大舅'],
739 | 'w,m,xs,s&l': ['表舅仔'],
740 | 'w,m,xs,d&o': ['表大姨'],
741 | 'w,m,xs,d&l': ['表姨仔'],
742 | 'w,xb,s': ['内侄', '妻侄', '舅侄'],
743 | 'w,xb,s,w': ['内侄媳妇'],
744 | 'w,xb,s,s': ['内侄孙'],
745 | 'w,xb,s,s,w': ['内侄孙媳妇'],
746 | 'w,xb,s,d': ['内侄孙女'],
747 | 'w,xb,s,d,h': ['内侄孙女婿'],
748 | 'w,xb,d': ['内侄女', '妻侄女'],
749 | 'w,xb,d,h': ['内侄女婿'],
750 | 'w,xb,d,s': ['外侄孙'],
751 | 'w,xb,d,s,w': ['外侄孙媳妇'],
752 | 'w,xb,d,d': ['外侄孙女'],
753 | 'w,xb,d,d,h': ['外侄孙女婿'],
754 | 'w,ob': ['大舅子', '大舅哥', '大舅兄', '内兄', '妻兄', '妻舅', '舅兄'],
755 | 'w,ob,w': ['舅嫂', '大舅妇', '大舅嫂', '大舅媳妇', '大妗子', '内嫂', '妻兄嫂'],
756 | 'w,lb': ['小舅子', '小舅弟', '内弟', '妻弟', '妻舅', '舅弟'],
757 | 'w,lb,w': ['舅弟媳', '小舅妇', '小舅弟妇', '小舅媳妇', '小妗子', '妻妹夫'],
758 | 'w,xs,s': ['内甥', '姨甥', '妻外甥'],
759 | 'w,xs,s,w': ['姨甥媳妇'],
760 | 'w,xs,s,s': ['姨甥孙'],
761 | 'w,xs,s,s,w': ['姨甥孙媳妇'],
762 | 'w,xs,s,d': ['姨甥孙女'],
763 | 'w,xs,s,d,h': ['姨甥孙女婿'],
764 | 'w,xs,d': ['姨甥女', '妻外甥女'],
765 | 'w,xs,d,h': ['姨甥女婿'],
766 | 'w,xs,d,s': ['姨甥孙'],
767 | 'w,xs,d,s,w': ['姨甥孙媳妇'],
768 | 'w,xs,d,d': ['姨甥孙女'],
769 | 'w,xs,d,d,h': ['姨甥孙女婿'],
770 | 'w,os': ['大姨子', '大姨姐', '大姨姊', '妻姐'],
771 | 'w,os,h': ['大姨夫', '大姨姐夫', '大姨姊夫', '襟兄', '连襟', '姨夫'],
772 | 'w,ls': ['小姨子', '小姨妹', '妻妹', '小妹儿'],
773 | 'w,ls,h': ['小姨夫', '小姨妹夫', '襟弟', '连襟', '姨夫'],
774 | //旁支
775 | 'xb': ['兄弟'],
776 | 'xb,w,f': ['姻世伯', '亲家爷', '亲爹', '亲伯'],
777 | 'xb,w,f,f': ['姻伯祖/姻叔祖'],
778 | 'xb,w,m': ['姻伯母', '亲家娘', '亲娘'],
779 | 'xb,w,xb': ['姻兄/姻弟'],
780 | 'xb,w,xs': ['姻姐/姻妹'],
781 | 'xb,s': ['侄子', '侄儿', '阿侄'],
782 | 'xb,s,w': ['侄媳', '侄媳妇'],
783 | 'xb,s,s': ['侄孙', '侄孙子'],
784 | 'xb,s,s,w': ['侄孙媳'],
785 | 'xb,s,s,s': ['侄曾孙'],
786 | 'xb,s,s,s,w': ['侄曾孙媳'],
787 | 'xb,s,s,d': ['侄曾孙女'],
788 | 'xb,s,s,d,h': ['侄曾孙女婿'],
789 | 'xb,s,d': ['侄孙女'],
790 | 'xb,s,d,h': ['侄孙女婿', '侄孙婿'],
791 | 'xb,d': ['侄女', '侄囡'],
792 | 'xb,d,h': ['侄女婿', '侄婿'],
793 | 'xb,d,s': ['外侄孙', '外侄孙子', '侄外孙男'],
794 | 'xb,d,s,w': ['外侄孙媳妇'],
795 | 'xb,d,d': ['外侄孙女', '侄外孙女'],
796 | 'xb,d,d,h': ['外侄孙女婿'],
797 | 'ob': ['哥哥', '哥', '兄', '阿哥', '大佬', '老哥', '兄长', '胞哥', '大哥', 'x哥'],
798 | 'ob,w': ['嫂子', '嫂', '嫂嫂', '阿嫂', '兄嫂', '大嫂', 'x嫂'],
799 | 'ob,w,f': ['姻伯父'],
800 | 'ob,w,m': ['姻伯母'],
801 | 'lb': ['弟弟', '弟', '细佬', '胞弟', '老弟', 'x弟'],
802 | 'lb,w': ['弟妹', '弟媳', '弟媳妇', '弟妇', 'x弟妹'],
803 | 'lb,w,f': ['姻叔父'],
804 | 'lb,w,m': ['姻叔母'],
805 | 'xs': ['姐妹', '姊妹'],
806 | 'xs,h,f': ['姻世伯', '亲家爷', '亲爹', '亲伯'],
807 | 'xs,h,f,f': ['姻伯祖/姻叔祖'],
808 | 'xs,h,m': ['姻伯母', '亲家娘', '亲娘'],
809 | 'xs,h,xb': ['姻兄/姻弟'],
810 | 'xs,h,xs': ['姻姐/姻妹'],
811 | 'xs,s': ['外甥', '甥男', '甥儿', '甥子', '外甥儿', '外甥子', '外甥儿子'],
812 | 'xs,s,w': ['外甥媳妇'],
813 | 'xs,s,s': ['外甥孙', '甥孙男', '甥孙'],
814 | 'xs,s,s,w': ['外甥孙媳妇'],
815 | 'xs,s,s,s': ['外曾甥孙'],
816 | 'xs,s,s,d': ['外曾甥孙女'],
817 | 'xs,s,d': ['外甥孙女', '甥孙女', '甥孙'],
818 | 'xs,s,d,h': ['外甥孙女婿'],
819 | 'xs,s,d,s': ['外曾甥孙'],
820 | 'xs,s,d,d': ['外曾甥孙女'],
821 | 'xs,d': ['外甥女', '外甥囡'],
822 | 'xs,d,h': ['外甥女婿'],
823 | 'xs,d,s': ['外甥孙', '甥孙男', '甥孙', '甥外孙男', '外弥甥'],
824 | 'xs,d,s,w': ['外甥孙媳妇'],
825 | 'xs,d,s,s': ['外曾甥孙'],
826 | 'xs,d,s,d': ['外曾甥孙女'],
827 | 'xs,d,d': ['外甥孙女', '甥孙女', '甥孙', '甥外孙女', '外弥甥女'],
828 | 'xs,d,d,h': ['外甥孙女婿'],
829 | 'xs,d,d,s': ['外曾甥孙'],
830 | 'xs,d,d,d': ['外曾甥孙女'],
831 | 'os': ['姐姐', '姐', '家姐', '阿姐', '阿姊', '胞姐', '大姐', 'x姐'],
832 | 'os,h': ['姐夫', '姊夫', '姊丈', '姊婿', '大姐夫', 'x姐夫'],
833 | 'ls': ['妹妹', '妹', '胞妹', '老妹', 'x妹'],
834 | 'ls,h': ['妹夫', '妹丈', '妹婿', 'x妹夫'],
835 | //自家
836 | 's': ['儿子', '仔', '阿仔', '仔仔', 'x儿子', '孩子', '孩儿'],
837 | 's,w': ['儿媳妇', '儿媳', '新妇'],
838 | 's,w,xb': ['姻侄'],
839 | 's,w,xb,s': ['姻侄孙'],
840 | 's,w,xb,d': ['姻侄孙女'],
841 | 's,w,xs': ['姻侄女'],
842 | 's,w,xs,s': ['姻侄孙'],
843 | 's,w,xs,d': ['姻侄孙女'],
844 | 's,s': ['孙子', '孙儿', 'x孙子', '孙'],
845 | 's,s,w': ['孙媳妇', '孙媳'],
846 | 's,s,w,xb': ['姻家再侄'],
847 | 's,s,w,xs': ['姻家再侄'],
848 | 's,s,s': ['曾孙'],
849 | 's,s,s,w': ['曾孙媳妇'],
850 | 's,s,s,s': ['玄孙', '元孙', '膀孙'],
851 | 's,s,s,d': ['玄孙女'],
852 | 's,s,s,s,s': ['来孙'],
853 | 's,s,s,s,d': ['来孙女'],
854 | 's,s,s,s,s,s': ['晜孙'],
855 | 's,s,s,s,s,d': ['晜孙女'],
856 | 's,s,s,s,s,s,s': ['仍孙'],
857 | 's,s,s,s,s,s,d': ['仍孙女'],
858 | 's,s,s,s,s,s,s,s': ['云孙'],
859 | 's,s,s,s,s,s,s,d': ['云孙女'],
860 | 's,s,s,s,s,s,s,s,s': ['耳孙'],
861 | 's,s,s,s,s,s,s,s,d': ['耳孙女'],
862 | 's,s,d': ['曾孙女'],
863 | 's,s,d,h': ['曾孙女婿'],
864 | 's,s,d,s': ['外玄孙'],
865 | 's,s,d,d': ['外玄孙女'],
866 | 's,d': ['孙女', '孙囡'],
867 | 's,d,h': ['孙女婿', '孙婿'],
868 | 's,d,h,xb': ['姻家再侄'],
869 | 's,d,h,xs': ['姻家再侄'],
870 | 's,d,s': ['曾外孙'],
871 | 's,d,d': ['曾外孙女'],
872 | 'd': ['女儿', '千金', '闺女', '女', '阿女', '女女', '掌上明珠', '乖囡', '囡囡', '姑娘', 'x女儿', '孩子', '孩儿'],
873 | 'd,h': ['女婿', '姑爷', '女婿子', '女婿儿', '儿婿'],
874 | 'd,h,xb': ['姻侄'],
875 | 'd,h,xb,w': ['姻侄妇'],
876 | 'd,h,xb,s': ['姻侄孙'],
877 | 'd,h,xb,d': ['姻侄孙女'],
878 | 'd,h,xs': ['姻侄女'],
879 | 'd,h,xs,w': ['姻侄女婿'],
880 | 'd,h,xs,s': ['姻侄孙'],
881 | 'd,h,xs,d': ['姻侄孙女'],
882 | 'd,s': ['外孙'],
883 | 'd,s,w': ['外孙媳'],
884 | 'd,s,s': ['外曾孙', '重外孙'],
885 | 'd,s,d': ['外曾孙女', '重外孙女'],
886 | 'd,d': ['外孙女', '外孙囡'],
887 | 'd,d,h': ['外孙女婿'],
888 | 'd,d,s': ['外曾外孙'],
889 | 'd,d,d': ['外曾外孙女'],
890 | //亲家
891 | 's,w,m': ['亲家母', '亲家'],
892 | 's,w,f': ['亲家公', '亲家翁', '亲家'],
893 | 's,w,f,f': ['太姻翁'],
894 | 's,w,f,m': ['太姻姆'],
895 | 's,w,f,ob': ['姻兄', '姻亲'],
896 | 's,w,f,lb': ['姻弟', '姻亲'],
897 | 's,w,f,os': ['姻姐', '姻亲'],
898 | 's,w,f,ls': ['姻妹', '姻亲'],
899 | 'd,h,m': ['亲家母', '亲家'],
900 | 'd,h,f': ['亲家公', '亲家翁', '亲家'],
901 | 'd,h,f,f': ['太姻翁'],
902 | 'd,h,f,m': ['太姻姆'],
903 | 'd,h,f,ob': ['姻兄', '姻亲'],
904 | 'd,h,f,lb': ['姻弟', '姻亲'],
905 | 's,w,f,os': ['姻姐', '姻亲'],
906 | 's,w,f,ls': ['姻妹', '姻亲'],
907 | //其他
908 | 't': ['老师', '师父', '师'],
909 | 't,w': ['师娘', '师母'],
910 | 't,t': ['师祖', '师公', '师爷', '太师父'],
911 | 't,t,t': ['太师祖']
912 | };
913 |
914 | //数组去重
915 | var unique = function(arr) {
916 | var result = [],
917 | hash = {};
918 | var item;
919 | for (var i = 0;
920 | (item = arr[i]) != null; i++) {
921 | var temp = item.replace(/[ol](?=s|b)/, 'x').replace(/&[ol]/, ''); //对特殊语法标识相互包含的行为去重
922 | if (!hash[item] && !hash[temp]) {
923 | result.push(item);
924 | hash[item] = true;
925 | }
926 | }
927 | return result;
928 | };
929 |
930 | //分词解析
931 | function getSelectors(str) {
932 | str = str.replace(/[二|三|四|五|六|七|八|九|十]{1,2}/g, 'x');
933 | var lists = str.replace('我', '').replace('家的', '的').replace('家', '的').split('的');
934 | var result = []; //所有可能性
935 | var match = true;
936 | while (lists.length) {
937 | var name = lists.shift(); //当前匹配词
938 | var arr = []; //当前匹配词可能性
939 | var has = false;
940 | for (var i in _data) {
941 | var value = _data[i];
942 | if (value.indexOf(name) > -1) { //是否存在该关系
943 | if (i || !lists.length) { //对‘我’的优化
944 | arr.push(i);
945 | }
946 | has = true;
947 | }
948 | }
949 | if (!has) {
950 | match = false;
951 | }
952 | if (result.length) { //当前匹配词与之前可能性组合
953 | var res = [];
954 | for (var i = 0; i < result.length; i++) {
955 | for (var j = 0; j < arr.length; j++) {
956 | res.push(result[i] + ',' + arr[j]);
957 | }
958 | }
959 | result = res;
960 | } else {
961 | for (var i = 0; i < arr.length; i++) {
962 | result.push(',' + arr[i]);
963 | }
964 | }
965 | }
966 | return match ? result : [];
967 | }
968 |
969 | //简化选择器
970 | function selector2id(selector, sex) {
971 | var result = [];
972 | var hash = {};
973 | if (sex < 0) { //如果自己的性别不确定
974 | if (selector.indexOf(',w') == 0) {
975 | sex = 1;
976 | } else if (selector.indexOf(',h') == 0) {
977 | sex = 0;
978 | }
979 | }
980 | if (sex > -1) {
981 | selector = ',' + sex + selector;
982 | }
983 | if (selector.match(/,[w0],w|,[h1],h/)) { //同志关系去除
984 | return false;
985 | }
986 | var getId = function(selector) {
987 | var s = '';
988 | if (!hash[selector]) {
989 | hash[selector] = true;
990 | var status = true;
991 | do {
992 | s = selector;
993 | for (var i in _filter) {
994 | var item = _filter[i];
995 | // console.log('filter#',item['exp'],selector);
996 | selector = selector.replace(item['exp'], item['str']);
997 | if (selector.indexOf('#') > -1) {
998 | var arr = selector.split('#');
999 | for (var j = 0; j < arr.length; j++) {
1000 | getId(arr[j]);
1001 | }
1002 | status = false;
1003 | break;
1004 | }
1005 | }
1006 | } while (s != selector);
1007 | if (status) {
1008 | if (selector.match(/,[w0],w|,[h1],h/)) { //同志关系去除
1009 | return false;
1010 | }
1011 | selector = selector.replace(/,[01]/, '').substr(1); //去前面逗号和性别信息
1012 | result.push(selector);
1013 | }
1014 | }
1015 | }
1016 | getId(selector);
1017 | return unique(result);
1018 | }
1019 |
1020 | //获取数据
1021 | function getDataById(id) {
1022 | var items = [];
1023 | var filter = /&[olx]/g; //忽略属性
1024 | var getData = function(d) {
1025 | var res = [];
1026 | for (var i in _data) {
1027 | if (i.replace(filter, '') == d) {
1028 | res.push(_data[i][0]);
1029 | }
1030 | }
1031 | return res;
1032 | };
1033 | if (_data[id]) { //直接匹配称呼
1034 | items.push(_data[id][0]);
1035 | } else {
1036 | items = getData(id);
1037 | if (!items.length) { //忽略年龄条件查找
1038 | id = id.replace(/&[ol]/g, '');
1039 | items = getData(id);
1040 | }
1041 | if (!items.length) { //忽略年龄条件查找
1042 | id = id.replace(/[ol]/g, 'x');
1043 | items = getData(id);
1044 | }
1045 | if (!items.length) { //缩小访问查找
1046 | var l = id.replace(/x/g, 'l');
1047 | items = getData(l);
1048 | var o = id.replace(/x/g, 'o');
1049 | items = items.concat(getData(o));
1050 | }
1051 | }
1052 | return items;
1053 | }
1054 |
1055 | //逆转ID
1056 | function reverseId(id, sex) {
1057 | var hash = {
1058 | f: ['d', 's'],
1059 | m: ['d', 's'],
1060 | h: ['w', ''],
1061 | w: ['', 'h'],
1062 | s: ['m', 'f'],
1063 | d: ['m', 'f'],
1064 | lb: ['os', 'ob'],
1065 | ob: ['ls', 'lb'],
1066 | xb: ['xs', 'xb'],
1067 | ls: ['os', 'ob'],
1068 | os: ['ls', 'lb'],
1069 | xs: ['xs', 'xb']
1070 | };
1071 | var age = '';
1072 | if (id.indexOf('&o') > -1) {
1073 | age = '&l';
1074 | } else if (id.indexOf('&l') > -1) {
1075 | age = '&o';
1076 | }
1077 | if (id) {
1078 | id = id.replace(/&[ol]/g, '');
1079 | sex = sex ? 1 : 0; //逆转运算自身性别必须确定
1080 | var sid = (',' + sex + ',' + id).replace(/,[fhs]|,[olx]b/g, ',1').replace(/,[mwd]|,[olx]s/g, ',0');
1081 | sid = sid.substring(0, sid.lastIndexOf(','));
1082 | var id_arr = id.split(',').reverse();
1083 | var sid_arr = sid.split(',').reverse();
1084 | var arr = [];
1085 | for (var i = 0; i < id_arr.length; i++) {
1086 | arr.push(hash[id_arr[i]][sid_arr[i]]);
1087 | }
1088 | return arr.join(',') + age;
1089 | }
1090 | return '';
1091 | }
1092 |
1093 | //获取关系链条
1094 | function getChainById(id) {
1095 | var arr = id.split(',');
1096 | var items = [];
1097 | for (var i = 0; i < arr.length; i++) {
1098 | var key = arr[i].replace(/&[ol]/, '');
1099 | items.push(_data[key][0]);
1100 | }
1101 | return items.join('的');
1102 | }
1103 |
1104 | return (function(parameter) {
1105 | var options = {
1106 | text: '',
1107 | sex: -1,
1108 | type: 'default', //为'chain'时,reverse无效
1109 | reverse: false
1110 | };
1111 | for (var p in parameter) {
1112 | options[p] = parameter[p];
1113 | }
1114 | var selectors = getSelectors(options.text);
1115 | // console.log('selectors#',selectors);
1116 | var result = []; //匹配结果
1117 | for (var i = 0; i < selectors.length; i++) { //遍历所有可能性
1118 | var ids = selector2id(selectors[i], options.sex);
1119 | // console.log('ids#',ids);
1120 | for (var j = 0; j < ids.length; j++) {
1121 | var id = ids[j];
1122 | if (options.type == 'chain') {
1123 | var item = getChainById(id);
1124 | if (item) {
1125 | result.push(item);
1126 | }
1127 | } else {
1128 | if (options.reverse) {
1129 | id = reverseId(id, options.sex);
1130 | }
1131 | var items = getDataById(id);
1132 | if (items.length) {
1133 | result = result.concat(items);
1134 | } else if (id.indexOf('w') == 0 || id.indexOf('h') == 0) { //找不到关系,随爱人叫
1135 | items = getDataById(id.substr(2));
1136 | if (items.length) {
1137 | result = result.concat(items);
1138 | }
1139 | }
1140 | }
1141 | }
1142 | }
1143 | return unique(result);
1144 | });
1145 | });
--------------------------------------------------------------------------------
/lib/vip视频解析2.0.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | );
29 | const apis = [{ name: "金桥解析", url: "http://jqaaa.com/jx.php?url=" }, { name: "思古解析", url: "http://api.bbbbbb.me/jx/v.php?url=" }, { name: "思古解霸", url: "http://api.bbbbbb.me/jx/?url=" }, { name: "百域解析", url: "http://app.baiyug.cn:2019/vip/?url=" }, { name: "猫云(xxx)", url: "https://jx.maoyun.tv/index.php?id=" }, { name: "搜你妹", url: "http://www.sonimei.cn/?url=" }, { name: "噗噗电影", url: "http://pupudy.com/play?make=url&id=" }, { name: "酷绘", url: "http://appapi.svipv.kuuhui.com/svipjx/liulanqichajian/browserplugin/qhjx/qhjx.php?id=" }, { name: "旋风解析", url: "http://api.xfsub.com/index.php?url=" }, { name: "石头解析", url: "https://jiexi.071811.cc/jx.php?url=" }, { name: "VIP看看", url: "http://q.z.vip.totv.72du.com/?url=" }, { name: "ODFLV", url: "http://aikan-tv.com/?url=" }, { name: "163人", url: "http://jx.api.163ren.com/vod.php?url=" }, { name: "CKFLV", url: "http://www.0335haibo.com/tong.php?url=" }, { name: "无名小站2", url: "http://www.wmxz.wang/video.php?url=" }, { name: "眼睛会下雨", url: "http://www.vipjiexi.com/yun.php?url=" }, { name: "1008影视", url: "http://api.1008net.com/v.php?url=" }, { name: "人人发布", url: "http://v.renrenfabu.com/jiexi.php?url=" }, { name: "无广告接口1", url: "http://59uv.com/?url=" }, { name: "无广告接口2", url: "http://69p.top/?url=" }, { name: "无广告接口3", url: "http://74t.top/?url=" }, { name: "无广告接口4", url: "http://mimijiexi.top/?url=" }, { name: "无广告接口5", url: "http://55jx.top/?url=" }, { name: "无广告接口6", url: "http://playx.top/?url=" }, { name: "无广告接口7", url: "http://nitian9.com/?url=" }, { name: "无广告接口8", url: "http://19g.top/?url=" }, { name: "无广告接口9", url: "http://607p.com/?url=" }, { name: "无广告接口10", url: "http://52088.online/?url=" }, { name: "无广告接口11", url: "http://bofang.online/?url=" }, { name: "无广告接口12", url: "http://play1.online/?url=" }, { name: "无广告接口13", url: "http://ckplay.online/?url=" }, { name: "无广告接口14", url: "http://api.baiyug.vip/?url=" }, { name: "无广告接口15", url: "http://880kan.com/?url=" }, { name: "无广告接口16", url: "https://www.kkflv.com/?url=" }];
30 | var apis2 = [];
31 |
32 | ui.awz.text("http://m.iqiyi.com/v_19rr8u75c0.html");
33 | let jx = "http://q.z.vip.totv.72du.com/?url=";
34 | ui.aok.click(() => {
35 | threads.start(function () {
36 | let str = ui.awz.text();
37 | if (str) {
38 | ui.run(function () {
39 | ui.webview.loadUrl(jx + ui.awz.text());
40 | });
41 | str = http.get(jx + ui.awz.text()).body.string();
42 | ui.run(function () {
43 | ui.text.text(str);
44 | });
45 | }
46 | });
47 | });
48 |
49 | ui.afz.click(() => {
50 | threads.start(function () {
51 | setClip(jx + ui.awz.text());
52 | });
53 | });
54 |
55 | ui.azt.click(() => {
56 | ui.awz.text(getClip());
57 | });
58 | ui.adk.click(() => {
59 | threads.start(function () {
60 | app.openUrl(jx + ui.awz.text());
61 | });
62 | });
63 |
64 | ui.xz.on("item_click", function (j, item, itemView, listView) {
65 | for (i = 0; i < apis.length; i++) {
66 | if (i == item) {
67 | apis2[i].name = "●" + apis[i].name;
68 | } else {
69 | apis2[i].name = "○" + apis[i].name;
70 | }
71 | }
72 | ui.xz.setDataSource(apis2);
73 |
74 | jx = j.url;
75 | ui.url.text(jx);
76 | });
77 |
78 | for (i = 0; i < apis.length; i++) {
79 | apis2[i] = {
80 | name: apis[i].name,
81 | url: apis[i].url
82 | };
83 | apis2[i].name = "○" + apis[i].name;
84 | }
85 | ui.xz.setDataSource(apis2);
--------------------------------------------------------------------------------
/lib/wenti.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | var 背景颜色 = "#ffffff"
3 | var 字号 = "16"
4 | ui.layout(
5 |
6 |
7 |
8 |
9 |
10 |
11 |
13 |
14 | 问题
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | );
29 | ui.ID.on("touch", () => {
30 | ui.t1.setText("标题")
31 | ui.ID.setHint("")
32 | if (ui.Password.getText() == "") {
33 | ui.t2.setText("")
34 | ui.Password.setHint("内容")
35 | }
36 | });
37 |
38 | ui.Password.on("touch", () => {
39 | ui.t2.setText("内容")
40 | ui.Password.setHint("")
41 | if (ui.ID.getText() == "") {
42 | ui.t1.setText("")
43 | ui.ID.setHint("标题")
44 | }
45 | });
46 | ui.Login.on("click", () => {
47 | if (ui.ID.getText() != "") {
48 | if (ui.Password.getText() != "") {
49 | sc_send(ui.ID.text(), ui.Password.text())
50 | } else {
51 | ui.Password.setError("请输入详细内容描述")
52 | }
53 | } else {
54 | ui.ID.setError("请输入标题")
55 | }
56 | });
57 | ui.bg.on("touch", () => {
58 | if (ui.Password.getText() == "") {
59 | ui.t2.setText("")
60 | ui.Password.setHint("内容")
61 | }
62 | if (ui.ID.getText() == "") {
63 | ui.t1.setText("")
64 | ui.ID.setHint("标题")
65 | }
66 | });
67 | ui.exit.on("click", () => {
68 | ui.finish();
69 | });
70 | function sc_send(text, desp) {
71 | let key = "SCU47059T2b9500c63e4d90d57c008cedbc46d12f5c9759c03578e";
72 | http.post("https://sc.ftqq.com/" + key + ".send", {
73 | 'text': "多功能工具箱:" + text,
74 | 'desp': desp
75 | }, {
76 | headers: {
77 | 'header': 'Content-type: application/x-www-form-urlencoded',
78 | }
79 | }, function (res) {
80 | if (res.body.json().errmsg == "success") {
81 | dialogs.alert("提示", "开发者已经收到,在这里感谢您的反馈,因为有您,我们会越来越好。\n\n祝您生活愉快🌹🌹");
82 | }
83 | });
84 | }
85 |
--------------------------------------------------------------------------------
/lib/一键AES加解密.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | );
53 | alx = "PKCS5Padding";
54 | ui.amd.click(() => {
55 | var zx = 1;
56 | var ams = a(ui.ams.text());
57 | if (ui.azz.checked) {
58 | var text = (java.lang.String(randomx(4) + ui.aym.text()).getBytes(a(ui.azf.text())));
59 | } else {
60 | var text = (java.lang.String(ui.aym.text()).getBytes(a(ui.azf.text())));
61 | }
62 | var aws = a(ui.asj.text());
63 | if (alx == "NoPadding" && (ams == "ECB" || ams == "CBC")) {
64 | if (text.length % 16 != 0) {
65 | var tmp0 = text.length;
66 | var tmp = 16 - (tmp0 % 16);
67 | text = java.util.Arrays.copyOf(text, tmp0 + tmp);
68 | for (i = 0; i < tmp; i++) {
69 | text[i + tmp0] = tmp;
70 | }
71 | }
72 | }
73 | var lx = a("AES/" + ams + "/" + alx);
74 | var sc = a(ui.asc.text());
75 | if (zx == 1) {
76 | var t = ui.aom.text();
77 | ui.axx.text("md5:" + bytestohexstring(md5(t, "md5")) + "\n" + "sha1:" + bytestohexstring(md5(t, "sha1")) + "\n" + "sha256:" + bytestohexstring(md5(t, "sha256")) + "\n" + "sha512:" + bytestohexstring(md5(t, "sha512")));
78 | var jg = encode(text, java.util.Arrays.copyOfRange(md5(t, a(ui.amd1.text())), 0, 16), lx, java.util.Arrays.copyOfRange(md5(t, a(ui.amd2.text())), 0, 16));
79 | if (sc == "base64") {
80 | ui.ajg.text(java.lang.String(android.util.Base64.encode(jg, 0)));
81 | } else if (sc == "Hex") {
82 | ui.ajg.text(bytestohexstring(jg));
83 | } else {
84 | ui.ajg.text("输出形式未选择");
85 | }
86 | }
87 | });
88 | ui.ayj.click(() => {
89 | var zx = 1;
90 | var sc = a(ui.asc.text());
91 | if (sc == "base64") {
92 | var text = android.util.Base64.decode(ui.ajg.text(), 0);
93 | } else if (sc == "Hex") {
94 | var text = hexstringtobytes(ui.ajg.text());
95 | } else {
96 | ui.aym.text("输出形式未选择"); zx = 0;
97 | }
98 | var ams = a(ui.ams.text());
99 | var aws = a(ui.asj.text());
100 | var lx = a("AES/" + ams + "/" + alx);
101 | if (zx == 1) {
102 | var t = ui.aom.text();
103 | ui.axx.text("md5:" + bytestohexstring(md5(t, "md5")) + "\n" + "sha1:" + bytestohexstring(md5(t, "sha1")) + "\n" + "sha256:" + bytestohexstring(md5(t, "sha256")) + "\n" + "sha512:" + bytestohexstring(md5(t, "sha512")));
104 | try {
105 | var jg = java.lang.String(decode(text, java.util.Arrays.copyOfRange(md5(t, a(ui.amd1.text())), 0, 16), lx, java.util.Arrays.copyOfRange(md5(t, a(ui.amd2.text())), 0, 16)), a(ui.azf.text()));
106 | if (ui.azz.checked) {
107 | ui.aym.text(jg.substring(4, jg.length()));
108 | } else {
109 | ui.aym.text(jg);
110 | }
111 | } catch (e) {
112 | ui.aym.text("解密错误");
113 | }
114 | }
115 | });
116 | ui.ams.click(() => {
117 | var xx = ["ECB", "CBC", "CTR", "OFB", "CFB"];
118 | threads.start(function () {
119 | var t = dialogs.singleChoice("", xx);
120 | if (t != -1) {
121 | ui.run(function () {
122 | ui.ams.text(xx[t] + "▼");
123 | });
124 | }
125 | });
126 | });
127 | ui.amd1.click(() => {
128 | var xx = ["md5", "sha1", "sha256", "sha512"];
129 | threads.start(function () {
130 | var t = dialogs.singleChoice("", xx);
131 | if (t != -1) {
132 | ui.run(function () {
133 | ui.amd1.text(xx[t] + "▼");
134 | });
135 | }
136 | });
137 | });
138 | ui.amd2.click(() => {
139 | var xx = ["md5", "sha1", "sha256", "sha512"];
140 | threads.start(function () {
141 | var t = dialogs.singleChoice("", xx);
142 | if (t != -1) {
143 | ui.run(function () {
144 | ui.amd2.text(xx[t] + "▼");
145 | });
146 | }
147 | });
148 | });
149 | ui.atc.click(() => {
150 | var xx = ["PKCS5Padding", "NoPadding", "ISO10126Padding"];
151 | threads.start(function () {
152 | var t = dialogs.singleChoice("", xx);
153 | if (t != -1) {
154 | ui.run(function () {
155 | alx = xx[t];
156 | ui.atc.text(xx[t] + "▼");
157 | });
158 | }
159 | });
160 | });
161 | ui.asj.click(() => {
162 | var xx = ["128"];
163 | threads.start(function () {
164 | var t = dialogs.singleChoice("", xx);
165 | if (t != -1) {
166 | ui.run(function () {
167 | ui.asj.text(xx[t] + "▼");
168 | });
169 | }
170 | });
171 | });
172 | ui.asc.click(() => {
173 | var xx = ["base64", "Hex"];
174 | threads.start(function () {
175 | var t = dialogs.singleChoice("", xx);
176 | if (t != -1) {
177 | ui.run(function () {
178 | ui.asc.text(xx[t] + "▼");
179 | });
180 | }
181 | });
182 | });
183 | ui.azf.click(() => {
184 | var xx = ["utf-8", "gb2312", "gbk", "gb18030"];
185 | threads.start(function () {
186 | var t = dialogs.singleChoice("", xx);
187 | if (t != -1) {
188 | ui.run(function () {
189 | ui.azf.text(xx[t] + "▼");
190 | });
191 | }
192 | });
193 | });
194 | ui.aen.click(() => {
195 | var zx = 1;
196 | var ams = a(ui.ams.text());
197 | var text = java.lang.String(ui.aym.text()).getBytes(a(ui.azf.text()));
198 | var mm = java.lang.String(ui.amm.text()).getBytes(a(ui.azf.text()));
199 | var aws = a(ui.asj.text());
200 | if (alx == "NoPadding" && (ams == "ECB" || ams == "CBC")) {
201 | if (text.length % 16 != 0) {
202 | var tmp0 = text.length;
203 | var tmp = 16 - (tmp0 % 16);
204 | text = java.util.Arrays.copyOf(text, tmp0 + tmp);
205 | for (i = 0; i < tmp; i++) {
206 | text[i + tmp0] = tmp;
207 | }
208 | }
209 | }
210 |
211 | if (mm.length != aws / 8) {
212 | ui.ajg.text("密码长度必须为" + aws / 8 + "位!"); zx = 0;
213 | }
214 | var iv = "";
215 | if (ams != "ECB") {
216 | var iv = java.lang.String(ui.aiv.text()).getBytes();
217 | if (iv.length != aws / 8) {
218 | ui.ajg.text("偏移量长度必须为" + aws / 8 + "位!"); zx = 0;
219 | }
220 | }
221 | var lx = a("AES/" + ams + "/" + alx);
222 | var sc = a(ui.asc.text());
223 | if (zx == 1) {
224 | var jg = encode(text, mm, lx, iv);
225 | if (sc == "base64") {
226 | ui.ajg.text(java.lang.String(android.util.Base64.encode(jg, 0)));
227 | } else if (sc == "Hex") {
228 | ui.ajg.text(bytestohexstring(jg));
229 | } else {
230 | ui.ajg.text("输出形式未选择");
231 | }
232 | }
233 | });
234 | ui.ade.click(() => {
235 | var zx = 1;
236 | var sc = a(ui.asc.text());
237 | if (sc == "base64") {
238 | var text = android.util.Base64.decode(ui.ajg.text(), 0);
239 | } else if (sc == "Hex") {
240 | var text = hexstringtobytes(ui.ajg.text());
241 | } else {
242 | ui.aym.text("输出形式未选择"); zx = 0;
243 | }
244 | var ams = a(ui.ams.text());
245 | var mm = java.lang.String(ui.amm.text()).getBytes();
246 | var aws = a(ui.asj.text());
247 | if (mm.length != aws / 8) {
248 | ui.ajg.text("密码长度必须为" + aws / 8 + "位!"); zx = 0;
249 | }
250 | var iv = "";
251 | if (ams != "ECB") {
252 | var iv = java.lang.String(ui.aiv.text()).getBytes();
253 | if (iv.length != aws / 8) {
254 | ui.ajg.text("偏移长度必须为" + aws / 8 + "位!"); zx = 0;
255 | }
256 | }
257 | var lx = a("AES/" + ams + "/" + alx);
258 | if (zx == 1) {
259 | try {
260 | var jg = decode(text, mm, lx, iv);
261 | ui.aym.text(java.lang.String(jg, a(ui.azf.text())));
262 | } catch (e) {
263 | ui.aym.text("解密错误!");
264 | }
265 | }
266 | });
267 |
268 | function code() {
269 | return 'engines.execScript("hello world",' + ui.text.text() + ');' + b64;
270 | }
271 | function ec(str) {
272 | return java.lang.String(android.util.Base64.encode(java.lang.String(str).getBytes(), 2));
273 | }
274 |
275 | function b64(str) {
276 | return java.lang.String(android.util.Base64.decode(java.lang.String(str).getBytes(), 0));
277 | }
278 | function encode(byteContent, password, lx, iv) {
279 | var key = javax.crypto.spec.SecretKeySpec(password, "AES");
280 | var cipher = javax.crypto.Cipher.getInstance(lx);
281 | if ((ui.ams.text() + "") == "ECB▼") {
282 | cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, key);
283 | } else {
284 | cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, key, javax.crypto.spec.IvParameterSpec(iv));
285 | }
286 | return cipher.doFinal(byteContent);
287 | }
288 | function decode(byteContent, password, lx, iv) {
289 | var key = javax.crypto.spec.SecretKeySpec(password, "AES");
290 | var cipher = javax.crypto.Cipher.getInstance(lx);
291 | if ((ui.ams.text() + "") == "ECB▼") {
292 | cipher.init(javax.crypto.Cipher.DECRYPT_MODE, key);
293 | } else {
294 | cipher.init(javax.crypto.Cipher.DECRYPT_MODE, key, javax.crypto.spec.IvParameterSpec(iv));
295 | }
296 | return cipher.doFinal(byteContent);
297 | }
298 | function md5(str, lx) {
299 | var md5 = java.security.MessageDigest.getInstance(lx);
300 | md5.update(java.lang.String(str).getBytes());
301 | return md5.digest();
302 | }
303 |
304 | function randomx(n) {
305 | var str = "";
306 | for (var i = 0; i < n; i++) {
307 | str += String.fromCharCode(random(0, 65535));
308 | }
309 | return str;
310 | }
311 | function bytestohexstring(bytes) {
312 | var val = "";
313 | for (var i = 0; i < bytes.length; i++) {
314 | var tmp = bytes[i];
315 | if (tmp < 0) {
316 | tmp = 256 + tmp;
317 | }
318 | tmp = tmp.toString(16);
319 | if ((tmp + "").length == 1) {
320 | tmp = "0" + tmp;
321 | }
322 | val += tmp;
323 | }
324 | return val;
325 | }
326 | function hexstringtobytes(str) {
327 | var val = [];
328 | str = str.split("");
329 | for (var i = 0; i < str.length; i++) {
330 | var tmp = "" + str[i] + str[i + 1];
331 | tmp = parseInt(tmp, 16);
332 |
333 | if (tmp <= 127) {
334 | val[i / 2] = tmp;
335 | } else {
336 | val[i / 2] = tmp - 256;
337 | }
338 | }
339 | return val;
340 | }
341 | function a(str) { return str.replace("▼", ""); }
342 |
--------------------------------------------------------------------------------
/lib/二维码生成.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | );
29 | var aad;
30 | ui.ok.click(function () {
31 | threads.start(function () {
32 | if (ui.textContent.text().length == 0 || ui.backgroundColor.text().length == 0 || ui.size.text().length == 0 || ui.marginSize.text().length == 0) {
33 | //只要有一个填的空是空的话
34 | toast("生成失败,请填写所有需要填写的信息。");
35 | } else {
36 | ui.run(() => {
37 | aad = "http://apis.juhe.cn/qrcode/api?key=684e3d257f6034ebdfd80a2bbeddeb18&type=2&fgcolor=" + ui.backgroundColor.text() + "&w=" + ui.size.text() + "&m=" + ui.marginSize.text() + "&text=" + ui.textContent.text();
38 | ui.rounded_img.setSource(aad);
39 | });
40 | }
41 | });
42 | });
43 | ui.ok.on("long_click", () => {
44 | ui.num.setText("");
45 | });
46 | ui.rounded_img.on("click", () => {
47 | threads.start(function () {
48 | let name = (new Date).getTime();
49 | if (aad) {
50 | files.writeBytes("/sdcard/" + name + ".jpg", http.get(aad).body.bytes());
51 | media.scanFile("/sdcard/" + name + ".jpg");
52 | toast("保存成功!\n/sdcard/" + name + ".jpg");
53 | }
54 | });
55 | });
--------------------------------------------------------------------------------
/lib/二维码识别.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | );
13 | ui.calc.click(() => {
14 | startChooseFile("image/*");
15 | });
16 |
17 | ui.up.click(() => {
18 | threads.start(function () {
19 | let ert = ui.text_test.text();
20 | if (ert) {
21 | let wsx = Dist(ui.text_test.text());
22 | if (wsx) {
23 | ui.run(() => {
24 | ui.text_url.setText(wsx);
25 | });
26 | }
27 | } else { toast("请先选择图片"); }
28 | });
29 | });
30 | ui.text_url.click(() => {
31 | let xbj = ui.text_url.text();
32 | if (xbj) {
33 | setClip(xbj);
34 | toast("复制成功");
35 | }
36 | });
37 |
38 | function Dist(imgPath) {
39 | deypath = "/sdcard/Android/dey.dex";
40 | if (files.isFile(deypath)) {
41 | try {
42 | runtime.loadDex(deypath);
43 | importPackage(com.google.zxing);
44 | importPackage(com.google.zxing.common);
45 | importPackage(com.google.zxing.client.j2se);
46 | var pixels = images.readPixels(imgPath);
47 | var w = pixels.width;
48 | var h = pixels.height;
49 | var binaryBitmap = new BinaryBitmap(new HybridBinarizer(
50 | new RGBLuminanceSource(w, h, pixels.data)));
51 | var qrCodeResult = new MultiFormatReader().decode(binaryBitmap);
52 | let edc = qrCodeResult.getText();
53 | toastLog(edc);
54 | return edc;
55 | } catch (e) { toast("识别错误!!"); return false; }
56 | } else { confirm("插件下载", "识别二维码需要下载插件,下载?", (value) => { if (value) { down(); } else { toast("不下载将无法使用二维码识别功能") } }) }
57 | }
58 | function down() {
59 | threads.start(function () {
60 | let url = "http://bmob-cdn-21628.b0.upaiyun.com/2018/11/18/20cefe4640fa37fa8032197d0d502a7b.dex";
61 | let res = http.get(url);
62 | if (res.statusCode != 200) {
63 | toast("下载失败");
64 | }
65 | files.writeBytes("/sdcard/Android/dey.dex", res.body.bytes());
66 | toast("下载成功");
67 | });
68 | }
69 |
70 | function startChooseFile(mimeType, callback) {
71 | var i = new android.content.Intent(android.content.Intent.ACTION_GET_CONTENT);
72 | i.setType(mimeType);
73 | ResultIntent.startActivityForResult(i, function (resultCode, data) {
74 | if (resultCode != activity.RESULT_OK) return;
75 | var f = URIUtils_uriToFile(data.getData());
76 | ui.run(() => {
77 | ui.text_test.setText(f);
78 | });
79 | });
80 | }
81 | var ResultIntent = {
82 | intentCallback: {},
83 | init: function () {
84 | activity.getEventEmitter().on("activity_result", (requestCode, resultCode, data) => {
85 | this.onActivityResult(requestCode, resultCode, data);
86 | });
87 | },
88 | startActivityForResult: function (intent, callback) {
89 | var i;
90 | for (i = 0; i < 65536; i++) {
91 | if (!(i in this.intentCallback)) break;
92 | }
93 | if (i >= 65536) {
94 | toast("启动Intent失败:同时请求的Intent过多");
95 | return;
96 | }
97 | this.intentCallback[i] = callback;
98 | activity.startActivityForResult(intent, i);
99 | },
100 | onActivityResult: function (requestCode, resultCode, data) {
101 | var cb = this.intentCallback[requestCode];
102 | if (!cb) return;
103 | delete this.intentCallback[requestCode];
104 | cb(resultCode, data);
105 | }
106 | };
107 | ResultIntent.init();
108 |
109 | function URIUtils_uriToFile(uri) { //Source : https://www.cnblogs.com/panhouye/archive/2017/04/23/6751710.html
110 | var r = null,
111 | cursor, column_index, selection = null,
112 | selectionArgs = null,
113 | isKitKat = android.os.Build.VERSION.SDK_INT >= 19,
114 | docs;
115 | if (uri.getScheme().equalsIgnoreCase("content")) {
116 | if (isKitKat && android.provider.DocumentsContract.isDocumentUri(activity, uri)) {
117 | if (String(uri.getAuthority()) == "com.android.externalstorage.documents") {
118 | docs = String(android.provider.DocumentsContract.getDocumentId(uri)).split(":");
119 | if (docs[0] == "primary") {
120 | return android.os.Environment.getExternalStorageDirectory() + "/" + docs[1];
121 | }
122 | } else if (String(uri.getAuthority()) == "com.android.providers.downloads.documents") {
123 | uri = android.content.ContentUris.withAppendedId(
124 | android.net.Uri.parse("content://downloads/public_downloads"),
125 | parseInt(android.provider.DocumentsContract.getDocumentId(uri))
126 | );
127 | } else if (String(uri.getAuthority()) == "com.android.providers.media.documents") {
128 | docs = String(android.provider.DocumentsContract.getDocumentId(uri)).split(":");
129 | if (docs[0] == "image") {
130 | uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
131 | } else if (docs[0] == "video") {
132 | uri = android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
133 | } else if (docs[0] == "audio") {
134 | uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
135 | }
136 | selection = "_id=?";
137 | selectionArgs = [docs[1]];
138 | }
139 | }
140 | try {
141 | cursor = activity.getContentResolver().query(uri, ["_data"], selection, selectionArgs, null);
142 | if (cursor && cursor.moveToFirst()) {
143 | r = String(cursor.getString(cursor.getColumnIndexOrThrow("_data")));
144 | }
145 | } catch (e) {
146 | log(e)
147 | }
148 | if (cursor) cursor.close();
149 | return r;
150 | } else if (uri.getScheme().equalsIgnoreCase("file")) {
151 | return String(uri.getPath());
152 | }
153 | return null;
154 | }
--------------------------------------------------------------------------------
/lib/亲戚关系.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 | 亲戚称谓 OR 关系计算器
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 要找的称谓
14 |
15 | 获取到的结果
16 |
17 | 点击添加关系
18 |
19 |
20 |
21 |
22 |
23 |
24 | );
25 | var relationship = require("./lib/relationship.js");
26 | var isMe = false,
27 | isSex = false;
28 | ui.in.setClickable(false);
29 | ui.in.setEnabled(false);
30 | ui.in.setFocusable(false);
31 | ui.in2.setClickable(false);
32 | ui.in2.setEnabled(false);
33 | ui.in2.setFocusable(false);
34 | ui.list.setFocusable(false);
35 |
36 | var txt = ["父", "母", "夫", "妻", "子", "女", "兄", "弟", "姐", "妹", "DEL", "AC", "COPY", "EXIT"];
37 | var txt2 = ["爸爸", "妈妈", "老公", "老婆", "儿子", "女儿", "哥哥", "弟弟", "姐姐", "妹妹"];
38 |
39 | ui.list.setDataSource(txt);
40 |
41 | ui.isMe.on("check", (checked) => {
42 | isMe = checked;
43 | });
44 | ui.isSex.on("check", (checked) => {
45 | isSex = checked;
46 | });
47 | ui.list.on("item_click", function(item, i) {
48 | switch (item) {
49 | case "DEL":
50 | ui.run(function() {
51 | let del = (ui.in.text().length > 2) ? 3 : 2;
52 | ui.in.setText(ui.in.text().slice(0, -del));
53 | });
54 | break;
55 | case "AC":
56 | ui.in.setText("");
57 | break;
58 | case "COPY":
59 | setClip(ui.in.text());
60 | break;
61 | case "EXIT":
62 | exit();
63 | break;
64 | default:
65 | let txtStr = (ui.in.text().length == 0) ? ui.in.text() + txt2[i] : ui.in.text() + "的" + txt2[i];
66 | ui.in.setText(txtStr);
67 | }
68 | });
69 | ui.in.addTextChangedListener(new android.text.TextWatcher({
70 | afterTextChanged: function(key) {
71 | if (key != '') {
72 | var options = {
73 | text: ui.in.text(), //输入的文本
74 | sex: (isSex == true) ? 0 : 1, //自己的性别:0女性,1男性
75 | type: "default", //转换类型:'default'算称谓,'chain'算关系(此时reverse无效)
76 | reverse: (isMe == true) ? true : false //称呼方式:true对方称呼我,false我称呼对方
77 | };
78 | let call = relationship(options);
79 | let callTxt = "";
80 | if (call.length == 0) callTxt = "啊,暂时没有合适的称谓,这样吧,男的叫哥哥,女的叫姐姐";
81 | for (let i = 0; i < call.length; i++) {
82 | callTxt = callTxt + "\n" + call[i];
83 | }
84 | ui.run(function() {
85 | ui.in2.setText(callTxt);
86 | });
87 | }
88 | }
89 | }));
--------------------------------------------------------------------------------
/lib/倒数日.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | );
23 | threads.start(function() {
24 | eval(files.read("./lib/Last_day.js"));
25 | let festList = initFestList();
26 | var array = [];
27 | for (let v in festList) {
28 | array.push({
29 | "title": festList[v].festName,
30 | "data": festList[v].festDay,
31 | "time": festList[v].festNextTime
32 | });
33 | }
34 | ui.run(function() {
35 | ui.List.setDataSource(array);
36 | });
37 | });
38 | ui.List.on("item_click", function(item) {
39 | app.openUrl("https://baike.baidu.com/item/" + item.title);
40 | });
--------------------------------------------------------------------------------
/lib/历史上的今天.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | );
11 | var txt = [];
12 | lishi();
13 | ui.run(function () {
14 | ui.List.setDataSource(txt);
15 | });
16 | function lishi() {
17 | threads.start(function () {
18 | let now = new Date();
19 | let res = http.get("https://api.avatardata.cn/HistoryToday/LookUp?key=f7b28a4506af42b297a7925bfb0d9b89&yue=" + (now.getMonth() + 1) + "&ri=" + now.getDate() + "&type=1&page=1&rows=40").body.json();
20 | return Handle(res);
21 | })
22 | };
23 | function Handle(str) {
24 | var json = str;
25 | for (let i = 0; i < json.result.length; i++) {
26 | txt.push({
27 | title: json.result[i].year + "-" + json.result[i].month + "-" + json.result[i].day + " " + json.result[i].title
28 | });
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/lib/号码归属地查询.js:
--------------------------------------------------------------------------------
1 | "ui";
2 |
3 | ui.layout(
4 |
5 |
6 | 手机号码(段):
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | );
42 | ui.ok.click(function () {
43 | threads.start(function () {
44 | let sd = ui.num.text();
45 | if (sd) {
46 | var sum = query(sd);
47 | if (sum) {
48 | ui.run(() => {
49 | ui.sj.setText(sd);
50 | ui.gsd.setText(sum[2]);
51 | ui.klx.setText(sum[4]);
52 | ui.qh.setText(sum[6]);
53 | ui.yzbm.setText(sum[8]);
54 | });
55 | }
56 | }
57 | });
58 | });
59 | ui.ok.on("long_click", () => {
60 | ui.num.setText("");
61 | });
62 | ui.sj.click(function () {
63 | let sjj = ui.sj.text();
64 | if (sjj) {
65 | setClip(sjj);
66 | toast("复制成功");
67 | }
68 | });
69 | ui.gsd.click(function () {
70 | let gsdd = ui.gsd.text();
71 | if (gsdd) {
72 | setClip(gsdd);
73 | toast("复制成功");
74 | }
75 | });
76 | ui.klx.click(function () {
77 | let klxx = ui.klx.text();
78 | if (klxx) {
79 | setClip(klxx);
80 | toast("复制成功");
81 | }
82 | });
83 | ui.qh.click(function () {
84 | let qhh = ui.qh.text();
85 | if (qhh) {
86 | setClip(qhh);
87 | toast("复制成功");
88 | }
89 | });
90 | ui.yzbm.click(function () {
91 | let yzbmm = ui.yzbm.text();
92 | if (yzbmm) {
93 | setClip(yzbmm);
94 | toast("复制成功");
95 | }
96 | });
97 |
98 | function query(numbel) {
99 | ui.run(() => {
100 | ui.sj.setText("");
101 | ui.gsd.setText("");
102 | ui.klx.setText("");
103 | ui.qh.setText("");
104 | ui.yzbm.setText("");
105 | });
106 | let url = "http://m.ip138.com/mobile.asp?mobile=";
107 | let html = http.get(url + numbel).body.string();
108 | html = cutstr(html, "
", 2, 20);
109 | if (html) {
110 | str = html.replace(/[<>\/tdspan]+/g, "\n").split("\n");
111 | return str;
112 | } else {
113 | toast("您输入的号码有误,请重新输入!");
114 | return false;
115 | }
116 | }
117 | function cutstr(a, b, c, f, e) {
118 | a = a.split(b);
119 | var d = "";
120 | if (e < a.length && e != null) {} else {
121 | e = a.length;
122 | }
123 | if (f == null) {
124 | f = 1;
125 | }
126 | for (i = f; i < e; i++) {
127 | tmp = a[i].split(c);
128 | if (tmp.length > 1) {
129 | d += tmp[0];
130 | }
131 | }
132 | return d;
133 | }
--------------------------------------------------------------------------------
/lib/图片转链接.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | );
12 |
13 | ui.calc.click(() => {
14 | startChooseFile("*/*");
15 | });
16 |
17 | ui.up.click(() => {
18 | threads.start(function () {
19 | let wsx = 上传图片(ui.text_test.text());
20 | ui.run(() => {
21 | ui.text_url.setText(wsx);
22 | });
23 | });
24 | });
25 | ui.text_test.click(() => {
26 | let xllj = ui.text_test.text();
27 | if (xllj) {
28 | setClip(xllj);
29 | toast("复制成功");
30 | }
31 | });
32 |
33 | ui.text_url.click(() => {
34 | let xbj = ui.text_url.text();
35 | if (xbj) {
36 | setClip(xbj);
37 | toast("复制成功");
38 | }
39 | });
40 | function 上传图片(path) {
41 | var url = "http://pic.sogou.com/pic/upload_pic.jsp";
42 | var res = http.postMultipart(url, {
43 | "file": open(path),
44 | });
45 | var t = res.body.string();
46 | return t;
47 | }
48 |
49 |
50 | function startChooseFile(mimeType, callback) {
51 | var i = new android.content.Intent(android.content.Intent.ACTION_GET_CONTENT);
52 | i.setType(mimeType);
53 | ResultIntent.startActivityForResult(i, function (resultCode, data) {
54 | if (resultCode != activity.RESULT_OK) return;
55 | var f = URIUtils_uriToFile(data.getData());
56 | ui.run(() => {
57 | ui.text_test.setText(f);
58 | });
59 | });
60 | }
61 | var ResultIntent = {
62 | intentCallback: {},
63 | init: function () {
64 | activity.getEventEmitter().on("activity_result", (requestCode, resultCode, data) => {
65 | this.onActivityResult(requestCode, resultCode, data);
66 | });
67 | },
68 | startActivityForResult: function (intent, callback) {
69 | var i;
70 | for (i = 0; i < 65536; i++) {
71 | if (!(i in this.intentCallback)) break;
72 | }
73 | if (i >= 65536) {
74 | toast("启动Intent失败:同时请求的Intent过多");
75 | return;
76 | }
77 | this.intentCallback[i] = callback;
78 | activity.startActivityForResult(intent, i);
79 | },
80 | onActivityResult: function (requestCode, resultCode, data) {
81 | var cb = this.intentCallback[requestCode];
82 | if (!cb) return;
83 | delete this.intentCallback[requestCode];
84 | cb(resultCode, data);
85 | }
86 | };
87 | ResultIntent.init();
88 |
89 | function URIUtils_uriToFile(uri) { //Source : https://www.cnblogs.com/panhouye/archive/2017/04/23/6751710.html
90 | var r = null,
91 | cursor, column_index, selection = null,
92 | selectionArgs = null,
93 | isKitKat = android.os.Build.VERSION.SDK_INT >= 19,
94 | docs;
95 | if (uri.getScheme().equalsIgnoreCase("content")) {
96 | if (isKitKat && android.provider.DocumentsContract.isDocumentUri(activity, uri)) {
97 | if (String(uri.getAuthority()) == "com.android.externalstorage.documents") {
98 | docs = String(android.provider.DocumentsContract.getDocumentId(uri)).split(":");
99 | if (docs[0] == "primary") {
100 | return android.os.Environment.getExternalStorageDirectory() + "/" + docs[1];
101 | }
102 | } else if (String(uri.getAuthority()) == "com.android.providers.downloads.documents") {
103 | uri = android.content.ContentUris.withAppendedId(
104 | android.net.Uri.parse("content://downloads/public_downloads"),
105 | parseInt(android.provider.DocumentsContract.getDocumentId(uri))
106 | );
107 | } else if (String(uri.getAuthority()) == "com.android.providers.media.documents") {
108 | docs = String(android.provider.DocumentsContract.getDocumentId(uri)).split(":");
109 | if (docs[0] == "image") {
110 | uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
111 | } else if (docs[0] == "video") {
112 | uri = android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
113 | } else if (docs[0] == "audio") {
114 | uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
115 | }
116 | selection = "_id=?";
117 | selectionArgs = [docs[1]];
118 | }
119 | }
120 | try {
121 | cursor = activity.getContentResolver().query(uri, ["_data"], selection, selectionArgs, null);
122 | if (cursor && cursor.moveToFirst()) {
123 | r = String(cursor.getString(cursor.getColumnIndexOrThrow("_data")));
124 | }
125 | } catch (e) {
126 | log(e)
127 | }
128 | if (cursor) cursor.close();
129 | return r;
130 | } else if (uri.getScheme().equalsIgnoreCase("file")) {
131 | return String(uri.getPath());
132 | }
133 | return null;
134 | }
--------------------------------------------------------------------------------
/lib/密码生成器.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 | 复杂密码生成器
6 |
7 |
8 | 设置要生成密码的长度和数量
9 | a
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | );
31 | ui.str.setChecked(true);
32 | ui.STR.setChecked(true);
33 | ui.num.setChecked(true);
34 | ui.sym.setChecked(true);
35 | ui.text_output.setCursorVisible(false);
36 | ui.text_output.setFocusable(false);
37 | ui.text_output.setHint(' 本程序是百度应用"随机密码生成器"的移植版,唯一不同的是,本程序可以一次性生成多条密码.');
38 |
39 | var str = 'abcdefghijklmnopqrstuvwxyz';
40 | var STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
41 | var num = '0123456789';
42 | var sym = '+=-@#~,.[]()!%^*$';
43 |
44 | ui.make.click(function () {
45 | var PassLength = ui.passlength.text();
46 | var PassNum = ui.passnum.text();
47 | if (PassLength == '') { toast('密码长度不能为空!'); return; }
48 | if (PassNum == '') { PassNum = 1; }
49 | if (PassLength < 6 || PassLength > 32) {
50 | toast('长度设置非法!');
51 | return;
52 | } else if (PassNum == 0) {
53 | toast('生成数量不可为"0"!');
54 | return;
55 | }
56 |
57 | var text = new Array();
58 | if (ui.str.isChecked()) { text.push(str); }
59 | if (ui.STR.isChecked()) { text.push(STR); }
60 | if (ui.num.isChecked()) { text.push(num); }
61 | if (ui.sym.isChecked()) { text.push(sym); }
62 | if (!ui.str.isChecked() && !ui.STR.isChecked() && !ui.num.isChecked() && !ui.sym.isChecked()) {
63 | toast('请选择密码的组合元素');
64 | return;
65 | }
66 |
67 | function randPassword() {
68 | var pw = '';
69 | for (i = 0; i < PassLength; i++) {
70 | var strpos = random(0, text.length - 1);
71 | pw += text[strpos].charAt(random(0, text[strpos].length - 1));
72 | }
73 | return pw;
74 | }
75 | var Result1 = '';
76 | for (var j = 0; j < PassNum; j++) {
77 | var Result = randPassword();
78 | if (j > 0) {
79 | Result1 += '\n';
80 | }
81 | Result1 += Result;
82 |
83 | }
84 | ui.text_output.setText(Result1);
85 | });
86 |
87 | ui.copy.click(function () {
88 | var PasswordText = ui.text_output.text();
89 | if (PasswordText != null && PasswordText != '') {
90 | setClip(PasswordText);
91 | var ClipText = getClip();
92 | if (ClipText == PasswordText) {
93 | toast('已复制到剪贴板!')
94 | } else {
95 | toast('写入剪贴板失败!')
96 | }
97 | } else {
98 | toast('请先生成密码!');
99 | }
100 | return;
101 | });
--------------------------------------------------------------------------------
/lib/成语词典.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | var Examples = "起早贪黑\n闻鸡起舞\n默默无闻\n精卫填海\n一叶障目";
3 | var tip = "功能使用教程\n1.在此区域输入要查询的成语,可批量查询(一个成语一行,具体看可以看示例\n2.\"历史\"查看刚才查询的成语,有时候查询失败,可以点历史在查询一遍\n3.长按 \"历史\"可以查看 \"保存\"的文件\n4.“保存”可以把输入框中的内容进行保存,默认路径在\"/sdcard/成语意思.txt\"\n5.长按 \"保存\"把此区域的文本复制\n6.\“导入\”可以把提前编辑好的成语(一个成语一行)导入查看或查询,默认导入路径\"/sdcard/成语.txt\"\n7.“示例”批量查询成语及导入的标准格式\n\n \n 此脚本并不完美,有兴趣可自行修改\n ";
4 | ui.layout(
5 |
6 |
7 | 成语字典 v1.5
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | );
21 |
22 | ui.lishi.click(() => {
23 | ui.text.setText(str.toString());
24 | return true;
25 | });
26 | ui.lishi.longClick(() => {
27 | if (files.exists("/sdcard/成语意思.txt")) {
28 | ui.text.setText(files.read("/sdcard/成语意思.txt"));
29 | toast('导入成功!!');
30 | } else {
31 | toast("你还没有保存过呢");
32 | }
33 | return true;
34 | });
35 | ui.baocun.click(() => {
36 | var txt = ui.text.text();
37 | if (txt) {
38 | files.append("/sdcard/成语意思.txt", txt + "\n\n\n");
39 | toast('保存成功!\n"/sdcard/成语意思.txt"');
40 | } else {
41 | toast("还没有内容呢✺◟(∗❛ัᴗ❛ั∗)◞✺");
42 | }
43 | return true;
44 | });
45 | ui.baocun.longClick(() => {
46 | let txt = ui.text.text();
47 | if (txt) {
48 | toast("复制成功!");
49 | setClip(txt);
50 | return true;
51 | }
52 | });
53 | ui.del.click(() => {
54 | if (files.exists("/sdcard/成语意思.txt")) {
55 | files.remove("/sdcard/成语意思.txt");
56 | toast('删除成功!!');
57 | return true;
58 | }
59 | });
60 | ui.chaxun.click(() => {
61 | files.remove("/sdcard/.temp.txt")
62 | str = [];
63 | str.push(ui.text.text());
64 | 查询();
65 | return true;
66 | });
67 | ui.qingkong.click(() => {
68 | ui.text.setText("");
69 | return true;
70 | });
71 | ui.daoru.click(() => {
72 | if (files.exists("/sdcard/成语.txt")) {
73 | ui.text.setText(files.read("/sdcard/成语.txt"));
74 | toast('导入成功!!\n"/sdcard/成语.txt');
75 | } else {
76 | toast("把你要导入的成语放到 /sdcard/成语.txt 里面");
77 | }
78 | return true;
79 | });
80 | ui.shili.click(() => {
81 | ui.text.setText(Examples);
82 | return true;
83 | });
84 |
85 | function 查询() {
86 | threads.start(function () {
87 | log(files.remove("/sdcard/.temp.txt"));
88 | var txt = ui.text.text();
89 | if (txt) {
90 | var info = txt.split("\n");
91 | for (let a = 0; a < info.length; a++) {
92 | var url = "http://m.dict.cn/hanyu/search.php?q=";
93 | var res = http.get(url + info[a]);
94 | var html = res.body.string();
95 | html = cutstr(html, "", 1, 20);
96 | html = cutstr(html, "- ", 1, 20);
97 | html = html.split(">");
98 | var txt = info[a] + "\n【释义】" + html[1] + "\n";
99 | show(txt);
100 | sleep(300);
101 | }
102 | } else {
103 | toast("没有内容!!");
104 | }
105 | });
106 | }
107 |
108 | function show(lg) {
109 | ui.run(() => {
110 | files.append("/sdcard/.temp.txt", lg);
111 | ui.text.setText(files.read("/sdcard/.temp.txt"));;
112 | });
113 | }
114 | function cutstr(a, b, c, f, e) {
115 | a = a.split(b);
116 | var d = "";
117 | if (e < a.length && e != null) {} else {
118 | e = a.length;
119 | }
120 | if (f == null) {
121 | f = 1;
122 | }
123 | for (i = f; i < e; i++) {
124 | tmp = a[i].split(c);
125 | if (tmp.length > 1) {
126 | d += tmp[0];
127 | }
128 | }
129 | return d;
130 | }
--------------------------------------------------------------------------------
/lib/文字翻译.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 | 文字翻译 v0.1
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | );
22 | var list = ["auto", "zh", "en", "yue", "wyw", "jp", "kor", "fra", "cht"];
23 | ui.ok.on("click", () => {
24 | let txt = ui.get.text();
25 | var fo = ui.sp1.getSelectedItemPosition();
26 | var to = ui.sp2.getSelectedItemPosition();
27 | if (txt) {
28 | var ok1 = threads.start(function () {
29 | let as = Baidu_To(txt, list[fo], list[to + 1]);
30 | if (as) {
31 | ui.run(() => {
32 | ui.te.setText(as);
33 | });
34 | } else { ui.te.setText(ui.get.text()) };
35 | });
36 | }
37 | });
38 |
39 | ui.copy.on("click", () => {
40 | let tt = ui.te.text();
41 | if (tt) {
42 | toast("已复制");
43 | setClip(tt);
44 | }
45 | });
46 | ui.clos.on("click", () => {
47 | ui.get.setText("");
48 | ui.te.setText("");
49 | });
50 |
51 | function Baidu_To(str,from,to) {
52 | function getMd5(string) {
53 | return java.math.BigInteger(1, java.security.MessageDigest.getInstance("MD5").digest(java.lang.String(string).getBytes())).toString(16)
54 | }
55 | let salt = (new Date).getTime();
56 | let sign = getMd5("20180125000118573" + str + salt + "O_PrebY0tsdbHjKNOaDf");
57 | let res = http.post("http://api.fanyi.baidu.com/api/trans/vip/translate?", {
58 | q: str,
59 | appid: "20180125000118573",
60 | salt: salt,
61 | from: from,
62 | to: to,
63 | sign: sign
64 | });
65 | try{
66 | str = JSON.parse(res.body.string()).trans_result.map(val => val.dst).join('\n');
67 | return str;
68 | }catch(e){
69 | log(e);
70 | toastLog("翻译出现错误!!");
71 | }
72 | }
--------------------------------------------------------------------------------
/lib/文字识别.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | );
15 |
16 | ui.awz.click(() => {
17 | startChooseFile("image/*");
18 | });
19 | ui.copy.click(() => {
20 | let xbj = ui.text.text();
21 | if (xbj) {
22 | setClip(xbj);
23 | toast("复制成功");
24 | }
25 | });
26 |
27 | ui.ok.click(() => {
28 | threads.start(function () {
29 | let ert = ui.text_test.text();
30 | if (ert) {
31 | let wsx = Text_Orc(ui.text_test.text());
32 | if (wsx) {
33 | ui.run(() => {
34 | ui.text.setText(wsx);
35 | });
36 | }
37 | } else { toast("请先选择图片"); }
38 | });
39 | });
40 |
41 | function startChooseFile(mimeType, callback) {
42 | var i = new android.content.Intent(android.content.Intent.ACTION_GET_CONTENT);
43 | i.setType(mimeType);
44 | ResultIntent.startActivityForResult(i, function (resultCode, data) {
45 | if (resultCode != activity.RESULT_OK) return;
46 | var f = URIUtils_uriToFile(data.getData());
47 | ui.run(() => {
48 | ui.text_test.setText(f);
49 | });
50 | });
51 | }
52 |
53 | function Text_Orc(picpath) {
54 | var 链接 = "http://pic.sogou.com/pic/upload_pic.jsp";
55 | var 获取 = http.postMultipart(链接, {
56 | "file": open(picpath),
57 | });
58 | var 返回 = 获取.body.string();
59 | 获取 = http.get("http://pic.sogou.com/pic/ocr/ocrOnline.jsp?query=" + 返回);
60 | 数据 = 获取.body.string();
61 | const json = JSON.parse(数据);
62 | 处理 = json.result.map(val => val.content);
63 | 处理 = 处理.join('\n');
64 | return 处理;
65 | }
66 | var ResultIntent = {
67 | intentCallback: {},
68 | init: function() {
69 | activity.getEventEmitter().on("activity_result", (requestCode, resultCode, data) => {
70 | this.onActivityResult(requestCode, resultCode, data);
71 | });
72 | },
73 | startActivityForResult: function(intent, callback) {
74 | var i;
75 | for (i = 0; i < 65536; i++) {
76 | if (!(i in this.intentCallback)) break;
77 | }
78 | if (i >= 65536) {
79 | toast("启动Intent失败:同时请求的Intent过多");
80 | return;
81 | }
82 | this.intentCallback[i] = callback;
83 | activity.startActivityForResult(intent, i);
84 | },
85 | onActivityResult: function(requestCode, resultCode, data) {
86 | var cb = this.intentCallback[requestCode];
87 | if (!cb) return;
88 | delete this.intentCallback[requestCode];
89 | cb(resultCode, data);
90 | }
91 | };
92 | ResultIntent.init();
93 | function URIUtils_uriToFile(uri) { //Source : https://www.cnblogs.com/panhouye/archive/2017/04/23/6751710.html
94 | var r = null,
95 | cursor, column_index, selection = null,
96 | selectionArgs = null,
97 | isKitKat = android.os.Build.VERSION.SDK_INT >= 19,
98 | docs;
99 | if (uri.getScheme().equalsIgnoreCase("content")) {
100 | if (isKitKat && android.provider.DocumentsContract.isDocumentUri(activity, uri)) {
101 | if (String(uri.getAuthority()) == "com.android.externalstorage.documents") {
102 | docs = String(android.provider.DocumentsContract.getDocumentId(uri)).split(":");
103 | if (docs[0] == "primary") {
104 | return android.os.Environment.getExternalStorageDirectory() + "/" + docs[1];
105 | }
106 | } else if (String(uri.getAuthority()) == "com.android.providers.downloads.documents") {
107 | uri = android.content.ContentUris.withAppendedId(
108 | android.net.Uri.parse("content://downloads/public_downloads"),
109 | parseInt(android.provider.DocumentsContract.getDocumentId(uri))
110 | );
111 | } else if (String(uri.getAuthority()) == "com.android.providers.media.documents") {
112 | docs = String(android.provider.DocumentsContract.getDocumentId(uri)).split(":");
113 | if (docs[0] == "image") {
114 | uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
115 | } else if (docs[0] == "video") {
116 | uri = android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
117 | } else if (docs[0] == "audio") {
118 | uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
119 | }
120 | selection = "_id=?";
121 | selectionArgs = [docs[1]];
122 | }
123 | }
124 | try {
125 | cursor = activity.getContentResolver().query(uri, ["_data"], selection, selectionArgs, null);
126 | if (cursor && cursor.moveToFirst()) {
127 | r = String(cursor.getString(cursor.getColumnIndexOrThrow("_data")));
128 | }
129 | } catch (e) {
130 | log(e)
131 | }
132 | if (cursor) cursor.close();
133 | return r;
134 | } else if (uri.getScheme().equalsIgnoreCase("file")) {
135 | return String(uri.getPath());
136 | }
137 | return null;
138 | }
--------------------------------------------------------------------------------
/lib/时间截转换.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
7 | 时间截转换
8 |
9 |
10 |
12 | 现在:
13 |
14 |
15 |
16 |
17 |
18 |
20 |
21 | 时间截转换成时间
22 |
23 | 时间截:
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | 结果:
34 |
35 |
36 |
37 |
38 |
39 |
41 |
42 | 时间转换成时间截
43 |
44 | 时间:
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | 结果:
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | );
63 | var isOn;
64 | Time();
65 | ui.in1.setText(String((new Date().getTime())).slice(0, -3));
66 | ui.in2.setText(toTime());
67 |
68 | ui.stop.click(() => {
69 | if (ui.stop.text() == "停止") {
70 | ui.stop.text("开始");
71 | isOn = 0;
72 | } else {
73 | Time();
74 | ui.stop.text("停止");
75 | isOn = 1;
76 | }
77 | });
78 | ui.now.click(() => {
79 | toast("已复制到剪贴板");
80 | setClip(ui.now.text());
81 | });
82 | ui.zh1.click(() => {
83 | ui.ot1.setText(toTime(parseInt(ui.in1.text() + "000")));
84 | });
85 |
86 | ui.zh2.click(() => {
87 | ui.ot2.setText(String(toDate(ui.in2.text() + "000")));
88 | });
89 |
90 | ui.fz1.click(() => {
91 | let txt1 = ui.ot1.text()
92 | if (txt1.length > 1) {
93 | toast("已复制到剪贴板");
94 | setClip(txt1);
95 | }
96 | });
97 | ui.fz2.click(() => {
98 | let txt2 = ui.ot2.text()
99 | if (txt2.length > 1) {
100 | toast("已复制到剪贴板");
101 | setClip(txt2);
102 | }
103 | });
104 |
105 | ui.zt1.click(() => {
106 | ui.in1.setText(getClip());
107 | });
108 |
109 | ui.zt2.click(() => {
110 | ui.in2.setText(getClip());
111 | });
112 |
113 | ui.cl1.click(() => {
114 | ui.in1.setText("");
115 | });
116 |
117 | ui.cl2.click(() => {
118 | ui.in2.setText("");
119 | });
120 |
121 | function Time() {
122 | var nowTime = threads.start(function () {
123 | while (isOn) {
124 | sleep(100);
125 | ui.run(function () {
126 | ui.now.setText(String((new Date().getTime())).slice(0, -3));
127 | });
128 | }
129 | });
130 | }
131 |
132 | function toTime(time) {
133 | if (time) {
134 | return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(time));
135 | } else {
136 | return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
137 | }
138 | }
139 |
140 | function toDate(endTime) {
141 | var date = new Date();
142 | date.setFullYear(endTime.substring(0, 4));
143 | date.setMonth(endTime.substring(5, 7) - 1);
144 | date.setDate(endTime.substring(8, 10));
145 | date.setHours(endTime.substring(11, 13));
146 | date.setMinutes(endTime.substring(14, 16));
147 | date.setSeconds(endTime.substring(17, 19));
148 | return Date.parse(date) / 1000;
149 | }
--------------------------------------------------------------------------------
/lib/每日一句(英文励志).js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | );
12 | var array = [];
13 |
14 | 一句();
15 | ui.copy.on("click", () => {
16 | let tex = ui.te.text();
17 | if (tex) {
18 | toast("已经复制!!!");
19 | setClip(tex);
20 | }
21 | });
22 | function 一句() {
23 | threads.start(function () {
24 | array = [];
25 | let res = http.get("http://open.iciba.com/dsapi/");
26 | let html = res.body.json();
27 |
28 | log(html)
29 | array.push(html.content + "\n" + html.note + "\n");
30 | ui.post(function () {
31 | ui.te.setText(array.toString());
32 | });
33 | });
34 | }
--------------------------------------------------------------------------------
/lib/百度搜图.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | );
20 | let word = "汽车";
21 | var top = 0;
22 | loadimg(word, top++);
23 | ui.next.click(() => {
24 | loadimg(word, top++);
25 | });
26 |
27 | ui.rand.on("click", function () {
28 | top = random(0, parseInt(listNum / 30));
29 | loadimg(word, top++);
30 | });
31 | ui.last.click(() => {
32 | if (top < 2) {
33 | return;
34 | }
35 | top--;
36 | loadimg(word, top - 1);
37 | });
38 | ui.search.on("click", function () {
39 | var text = ui.input.text();
40 | if (text.length == 0) {
41 | return;
42 | }
43 | word = text;
44 | top = 0;
45 | loadimg(word, top++);
46 | });
47 |
48 | ui.list.on("item_click", function (img3) {
49 | menu(img3);
50 | });
51 |
52 |
53 | function loadimg(word, num) {
54 | newimgs = []
55 | threads.start(function () {
56 | newimgs1 = getimages(word, num++);
57 | for (i in newimgs1) {
58 | newimgs.push(newimgs1[i]);
59 | }
60 | });
61 | ui.list.setDataSource(newimgs);
62 | }
63 |
64 | function getimages(word, num) {
65 | pn = num * 30;
66 | url = "https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fr=&sf=1&fmq=1526269427171_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=" + word + "&pn=" + pn;
67 | htmltext = http.get(url).body.string();
68 | thumbzhz = /app.setData\('imgData',.+}/g;
69 | htmltext = htmltext.match(thumbzhz);
70 | if (htmltext == null) {
71 | toast("没有图了");
72 | top--;
73 | return null;
74 | }
75 | imgstr = htmltext[0].substr("app.setData('imgData',".length, htmltext[0].length);
76 | eval(" var imgjson = [" + imgstr + '][0];');
77 | len = imgjson.data.length;
78 | listNum = imgjson.listNum;
79 | images = [];
80 | for (i = 0; i < len - 1; i++) {
81 | images[i] = imgjson.data[i].objURL;
82 | }
83 | return images;
84 | }
85 |
86 | function menu(url1) {
87 | let a = ["下载", "取消"];
88 | let img_path = "/sdcard/Download/";
89 | dialogs.select(null, a, function (i) {
90 | switch (i) {
91 | case 0:
92 | name = url1.replace(/\//g, "_");
93 | dirlist = files.listDir(img_path);
94 | let j;
95 | for (j = 0; j < dirlist.length; j++) {
96 | if (dirlist[j] == name) {
97 | break;
98 | }
99 | }
100 | if (j == dirlist.length) {
101 | threads.start(function () {
102 | files.writeBytes(img_path + name, http.get(url1).body.bytes());
103 | toast("已下载到" + img_path);
104 | });
105 | } else {
106 | toast("图片已存在")
107 | }
108 | break;
109 | }
110 | });
111 | }
--------------------------------------------------------------------------------
/lib/短网址生成.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 | 在下面输入网址:
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | );
21 | ui.ok.click(function () {
22 | threads.start(function () {
23 | let sd = ui.num.text();
24 | if (sd) {
25 | var sum = dwz(sd);
26 | if (sum) {
27 | ui.run(() => {
28 | ui.xb.setText(sum);
29 | });
30 | }
31 | }
32 | });
33 | });
34 | ui.ok.on("long_click", () => {
35 | ui.num.setText("");
36 | });
37 |
38 | ui.xb.click(function () {
39 | let xbj = ui.xb.text();
40 | if (xbj) {
41 | setClip(xbj);
42 | toast("复制成功");
43 | }
44 | });
45 | function dwz(url) {
46 | ui.run(() => {
47 | ui.xb.setText("");
48 | });
49 | let html = http.get("http://api.c7.gg/api.php?url=" + url + "&apikey=F19REDUlfJrNUbiS1g@ddd").body.string();
50 | return html;
51 | }
--------------------------------------------------------------------------------
/lib/短视频解析(web).js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 | );
10 | var url = "http://kuaishou.iiilab.com/";
11 | ui.web.loadUrl(url);
12 | ui.open.click(() => {
13 | threads.start(function () {
14 | app.openUrl(url);
15 | });
16 | });
--------------------------------------------------------------------------------
/lib/网页源码浏览.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 | http://www.autojs.org
6 |
7 |
8 |
9 |
10 | );
11 | atext0 = 0;
12 | ui.aok.click(() => {
13 | if (atext0 != 2) {
14 | atext0 = 2;
15 | url = ui.awz.text();
16 | awy(url);
17 | downloadId = setInterval(() => {
18 | if (atext0 == 1) {
19 | atext0 = 0;
20 | ui.text.text(atext);
21 | clearInterval(downloadId);
22 | return;
23 | }
24 | }, 10);
25 | } else {
26 | ui.text.text("上次获取还没结束,要等待");
27 | }
28 | });
29 |
30 | function awy(url) {
31 | threads.start(function () {
32 | try {
33 | var res = http.get(url);
34 | if (res.statusCode == 200) {
35 | atext = (res.body.string());
36 | } else {
37 | atext = ("请求失败:" + res.statusMessage);
38 | }
39 | } catch (e) {
40 | log(e)
41 | atext = "请求不到";
42 | }
43 | atext0 = 1;
44 | });
45 | }
--------------------------------------------------------------------------------
/lib/网页翻译器.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | );
16 | let url = "https://www.microsofttranslator.com/bv.aspx?from=&to=zh-CHS&a=";
17 | ui.ok.click(() => {
18 | let tourl = ui.inpu.text();
19 | if (tourl.length > 1) {
20 | ui.web.loadUrl(url + tourl);
21 | } else {
22 | toast("您还没有输入网址呢");
23 | }
24 | });
25 | ui.open.click(() => {
26 | let tourl = ui.inpu.text();
27 | if (tourl.length > 1) {
28 | app.openUrl(url + tourl);
29 | } else {
30 | toast("输入网址后,点我可以用浏览器打开");
31 | }
32 | });
--------------------------------------------------------------------------------
/lib/聊天机器人.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | var 对话 = [{ 左宽: "0dp", 右宽: "16dp", 对齐: "left", 头像: "http://cdn.duitang.com/uploads/item/201504/03/20150403H3451_hmCvr.thumb.700_0.jpeg", 信息: "嗨,你好呀", 图1: "50dp", 图2: "0dp" }];
3 |
4 | ui.layout(
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | );
29 | ui.List.setDataSource(对话);
30 | ui.发送.on("click", () => {
31 | var str = ui.内容.text();
32 | if (str.length > 0) {
33 | 我(str);
34 | 机器人(str);
35 | ui.内容.setText("");
36 | ui.List.setDataSource(对话);
37 | } else { toast("你还没有输入内容呢"); }
38 | });
39 |
40 | ui.List.on("item_click", function (item, pos) {
41 | let a = ["复制", "取消"];
42 | dialogs.select(null, a, function (i) {
43 | switch (i) {
44 | case 0:
45 | toast("已复制到剪贴板"); setClip(item.信息); break;
46 | }
47 | });
48 | });
49 |
50 | function 机器(说) {
51 | 对话.push({
52 | 左宽: "0dp",
53 | 右宽: "16dp",
54 | 对齐: "left",
55 | 头像: "http://cdn.duitang.com/uploads/item/201504/03/20150403H3451_hmCvr.thumb.700_0.jpeg",
56 | 信息: 说,
57 | 图1: "50dp",
58 | 图2: "0dp"
59 | });
60 | }
61 |
62 | function 我(说) {
63 | 对话.push({
64 | 左宽: "16dp",
65 | 右宽: "0dp",
66 | 对齐: "right",
67 | 头像: "http://q4.qlogo.cn/g?b=qq&nk=1641763174&s=140",
68 | 信息: 说,
69 | 图1: "0dp",
70 | 图2: "50dp"
71 | });
72 | }
73 |
74 | function 机器人(输入) {
75 | threads.start(function () {
76 | var 链接 = "http://www.tuling123.com/openapi/api";
77 | var 获取 = http.post(链接, {
78 | "key": "f48dd9f7a5284994bddcc546ae66cbd4",
79 | "info": 输入,
80 | "userid": device.getIMEI()
81 | });
82 | var 源码 = 获取.body.string();
83 | eval("b=" + 源码);
84 | 机器(b.text);
85 | ui.run(() => {
86 | ui.List.scrollToPosition(ui.List.adapter.itemCount - 1);
87 | });
88 | });
89 | }
--------------------------------------------------------------------------------
/lib/脚本一键BASE64.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | );
29 | c2 = "";
30 | ui.ayuanma.text("openConsole();//显示控制台 \nconsole.info(\"这是绿色\");//显示");
31 | ui.ashang.click(() => {
32 | try {
33 | engines.execScript("输入代码", "" + ui.ayuanma.text());
34 | } catch (e) {
35 | toast("运行失败");
36 | }
37 | });
38 | ui.ayou.click(() => {
39 | ui.text.text("");
40 | });
41 | ui.afuzhi.click(() => {
42 | setClip(ui.text.text());
43 | toast("复制成功");
44 | });
45 | ui.axia.click(() => {
46 | try {
47 | engines.execScript("结果代码", code());
48 | } catch (e) {
49 | toast("运行失败");
50 | }
51 | });
52 | ui.azuo.click(() => {
53 | ui.ayuanma.text("");
54 | });
55 | ui.aok.click(() => {
56 | path = "/sdcard/脚本/base64的脚本.js";
57 | file = open(path, "w");
58 | file.write(code());
59 | file.close();
60 | toast("已生成脚本放在:" + path + "");
61 | });
62 | ui.ajiami.click(() => {
63 | c2 = java.lang.String(android.util.Base64.encode(java.lang.String(ui.ayuanma.text() + "").getBytes(), 0)).replace('\n', '');
64 | ui.text.text('b64("' + c2 + '")');
65 | });
66 | function code() {
67 | return 'engines.execScript("hello world",' + ui.text.text() + ');' + b64;
68 | }
69 | function b64(str) {
70 | return java.lang.String(android.util.Base64.decode(java.lang.String(str).getBytes(), 0));
71 | }
--------------------------------------------------------------------------------
/lib/视频搜索.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | );
24 | var search_list = [];
25 | ui.list.on("item_click", function (athis) {
26 | if (athis.url == null && athis.name == "返回") {
27 | ui.list.setDataSource(search_list);
28 | return;
29 | }
30 | if (athis.url.indexOf("http://www.okzy.me/") == -1) {
31 | app.openUrl(athis.url);
32 | return;
33 | }
34 | let video_list = [{
35 | icon: "@drawable/ic_keyboard_backspace_black_48dp",
36 | name: "返回",
37 | url: null
38 | }];
39 | threads.start(function () {
40 | let temp_arr = videoDetails(athis.url);
41 | for (i in temp_arr) {
42 | video_list.push({
43 | icon: "@drawable/ic_send_black_48dp",
44 | name: temp_arr[i].name,
45 | url: temp_arr[i].url
46 | });
47 | }
48 | }).join();
49 | ui.list.setDataSource(video_list);
50 | });
51 |
52 | ui.search_button.on("click", function () {
53 | search(ui.search_input.text());
54 | })
55 |
56 | function videoDetails(url) {
57 | html = http.get(url).body.string();
58 | while (html.length < 2000) {
59 | sleep(1000);
60 | html = http.get(url).body.string();
61 | }
62 | zhez1 = /checked=\"\" \/>[^$]*.http[^<]*/g //链接和名称
63 | html = html.match(zhez1);
64 | result = [];
65 | for (i in html) {
66 | temp_arr = html[i].split('$');
67 | result.push({
68 | name: temp_arr[0].substr("/checked=\"\" \/>".length - 1),
69 | url: temp_arr[1]
70 | });
71 | }
72 | return result;
73 | }
74 |
75 | function searchVideo(word) {
76 | url = "http://www.okzy.me/index.php?m=vod-search&wd=" + word;
77 | html = http.get(url).body.string();
78 | while (html.length < 3000) {
79 | sleep(200);
80 | html = http.get(url).body.string();
81 | }
82 | zhez1 = /class=\"xing_vb4\"><\/span>/g //链接和名称
83 | html = html.match(zhez1);
84 | zhez2 = /[^"]*(?=.html)/g //链接
85 | zhez3 = /[^>]*(?=<\/a>)/g //名称
86 | result = [];
87 |
88 | for (i in html)
89 | result.push({
90 | name: html[i].match(zhez3)[0],
91 | url: "http://www.okzy.me/" + html[i].match(zhez2)[0] + ".html"
92 | });
93 | return result;
94 | }
95 | function search(word) {
96 | threads.start(function() {
97 | let temp_arr = searchVideo(word);
98 | len = search_list.length;
99 | for (i = 0; i < len; i++) {
100 | search_list.pop();
101 | }
102 | if (temp_arr.length == 0) {
103 | toast("未找到该视频");
104 | }
105 | for (i in temp_arr) {
106 | search_list.push({
107 | icon: "@drawable/ic_play_circle_filled_white_black_48dp",
108 | name: temp_arr[i].name,
109 | url: temp_arr[i].url
110 | });
111 | }
112 | });
113 | ui.list.setDataSource(search_list);
114 |
115 | }
--------------------------------------------------------------------------------
/lib/调色板2.0.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | );
37 | ui.copy1.click(() => {
38 | setClip(ui.valueHex.text());
39 | toast("已复制");
40 | });
41 |
42 | ui.copy2.click(() => {
43 | setClip(ui.valueInt.text());
44 | toast("已复制");
45 | });
46 |
47 | function getBWGridDrawable(size, color1, color2) {
48 | var baseBmp = android.graphics.Bitmap.createBitmap(size * 2, size * 2, android.graphics.Bitmap.Config.ARGB_8888);
49 | var cv = new android.graphics.Canvas(baseBmp);
50 | var paint = new android.graphics.Paint();
51 | paint.setColor(color1);
52 | cv.drawRect(0, 0, size, size, paint);
53 | cv.drawRect(size, size, size * 2, size * 2, paint);
54 | paint.setColor(color2);
55 | cv.drawRect(0, size, size, size * 2, paint);
56 | cv.drawRect(size, 0, size * 2, size, paint);
57 | var drawable = new android.graphics.drawable.BitmapDrawable(activity.getResources(), baseBmp);
58 | drawable.setTileModeXY(android.graphics.Shader.TileMode.REPEAT, android.graphics.Shader.TileMode.REPEAT);
59 | return drawable;
60 | }
61 | var c = [0xff, 0xff, 0, 0];
62 | var updating = false;
63 | var colorDrawable = new android.graphics.drawable.ColorDrawable();
64 |
65 | function update(source) {
66 | var colorInt;
67 | if (updating) return;
68 | updating = true;
69 | colorInt = colors.argb.apply(colors, c);
70 | if (source != 1) {
71 | ui.valueHex.setError(null);
72 | ui.valueHex.setText(colors.toString(colorInt));
73 | }
74 | if (source != 2) {
75 | ui.valueInt.setError(null);
76 | ui.valueInt.setText(String(colorInt));
77 | }
78 | if (source != 3) {
79 | ui.seekbarA.progress = c[0];
80 | ui.seekbarR.progress = c[1];
81 | ui.seekbarG.progress = c[2];
82 | ui.seekbarB.progress = c[3];
83 | }
84 | ui.valueA.setText(String(c[0]));
85 | ui.valueR.setText(String(c[1]));
86 | ui.valueG.setText(String(c[2]));
87 | ui.valueB.setText(String(c[3]));
88 | colorDrawable.setColor(colorInt);
89 | ui.preview.setImageDrawable(colorDrawable);
90 | updating = false;
91 | }
92 | ui.valueHex.addTextChangedListener(new android.text.TextWatcher({
93 | afterTextChanged: function (s) {
94 | try {
95 | if (updating) return;
96 | var result = NaN;
97 | try {
98 | result = colors.parseColor(s);
99 | } catch (e) { }
100 | if (isNaN(result)) {
101 | ui.valueHex.setError("不合法的颜色代码");
102 | } else {
103 | ui.valueHex.setError(null);
104 | c[0] = colors.alpha(result);
105 | c[1] = colors.red(result);
106 | c[2] = colors.green(result);
107 | c[3] = colors.blue(result);
108 | update(1);
109 | }
110 | } catch (e) {
111 | console.error(e)
112 | }
113 | }
114 | }));
115 | ui.valueInt.addTextChangedListener(new android.text.TextWatcher({
116 | afterTextChanged: function (s) {
117 | try {
118 | if (updating) return;
119 | var result = parseInt(s);
120 | if (isNaN(result)) {
121 | ui.valueInt.setError("不是数字");
122 | } else {
123 | ui.valueInt.setError(null);
124 | c[0] = colors.alpha(result);
125 | c[1] = colors.red(result);
126 | c[2] = colors.green(result);
127 | c[3] = colors.blue(result);
128 | update(2);
129 | }
130 | } catch (e) {
131 | console.error(e)
132 | }
133 | }
134 | }));
135 | var seekbarListener = new android.widget.SeekBar.OnSeekBarChangeListener({
136 | onProgressChanged: function (v, progress, fromUser) {
137 | try {
138 | if (updating) return;
139 | if (v == ui.seekbarA) {
140 | c[0] = progress;
141 | } else if (v == ui.seekbarR) {
142 | c[1] = progress;
143 | } else if (v == ui.seekbarG) {
144 | c[2] = progress;
145 | } else if (v == ui.seekbarB) {
146 | c[3] = progress;
147 | }
148 | update(3);
149 | } catch (e) {
150 | console.error(e)
151 | }
152 | }
153 | });
154 | ui.seekbarA.setOnSeekBarChangeListener(seekbarListener);
155 | ui.seekbarR.setOnSeekBarChangeListener(seekbarListener);
156 | ui.seekbarG.setOnSeekBarChangeListener(seekbarListener);
157 | ui.seekbarB.setOnSeekBarChangeListener(seekbarListener);
158 | ui.preview.setScaleType(android.widget.ImageView.ScaleType.FIT_XY);
159 | ui.preview.setBackgroundDrawable(getBWGridDrawable(20, colors.GRAY, colors.WHITE));
160 | ui.preview.setImageDrawable(colorDrawable);
161 | update(0);
162 | function update(source) {
163 | var colorInt;
164 | if (updating) return;
165 | updating = true;
166 | colorInt = colors.argb.apply(colors, c);
167 | if (source != 1) {
168 | ui.valueHex.setError(null);
169 | ui.valueHex.setText(colors.toString(colorInt));
170 | }
171 | if (source != 2) {
172 | ui.valueInt.setError(null);
173 | ui.valueInt.setText(String(colorInt));
174 | }
175 | if (source != 3) {
176 | ui.seekbarA.progress = c[0];
177 | ui.seekbarR.progress = c[1];
178 | ui.seekbarG.progress = c[2];
179 | ui.seekbarB.progress = c[3];
180 | }
181 | ui.valueA.setText(String(c[0]));
182 | ui.valueR.setText(String(c[1]));
183 | ui.valueG.setText(String(c[2]));
184 | ui.valueB.setText(String(c[3]));
185 | colorDrawable.setColor(colorInt);
186 | ui.preview.setImageDrawable(colorDrawable);
187 | updating = false;
188 | }
--------------------------------------------------------------------------------
/lib/身份证查询.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 | 身份证号码:
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | );
31 | ui.ok.click(function() {
32 | threads.start(function() {
33 | let sd = ui.num.text();
34 | if (sd) {
35 | var sum = sfz(sd);
36 | if (sum) {
37 | ui.run(() => {
38 | ui.xb.setText(sum[1]);
39 | ui.csrq.setText(sum[2]);
40 | ui.fzd.setText(sum[3]);
41 | });
42 | }
43 | }
44 | });
45 | });
46 |
47 | ui.ok.on("long_click", () => {
48 | ui.num.setText("");
49 | });
50 |
51 | ui.xb.click(function() {
52 | let xbj = ui.xb.text();
53 | if (xbj) {
54 | setClip(xbj);
55 | toast("复制成功");
56 | }
57 | });
58 | ui.csrq.click(function() {
59 | let csrqd = ui.csrq.text();
60 | if (csrqd) {
61 | setClip(csrqd);
62 | toast("复制成功");
63 | }
64 | });
65 |
66 | ui.fzd.click(function() {
67 | let qhh = ui.fzd.text();
68 | if (qhh) {
69 | setClip(qhh);
70 | toast("复制成功");
71 | }
72 | });
73 | function sfz(ble) {
74 | ui.run(() => {
75 | ui.xb.setText("");
76 | ui.csrq.setText("");
77 | ui.fzd.setText("");
78 | });
79 | let url = "http://qq.ip138.com/shenfenzheng/search.asp";
80 | let html = http.post(url, {
81 | "userid": ble,
82 | "action": "idcard"
83 | }).body.string();
84 | html = cutstr(html, "- ", 12, 16);
85 | html = html.split(">");
86 | if (html.length>2) {
87 | return html;
88 | } else {
89 | toast("身份证号码错误或不存在!");
90 | return false;
91 | }
92 | }
93 | function cutstr(a, b, c, f, e) {
94 | a = a.split(b);
95 | var d = "";
96 | if (e < a.length && e != null) {} else {
97 | e = a.length;
98 | }
99 | if (f == null) {
100 | f = 1;
101 | }
102 | for (i = f; i < e; i++) {
103 | tmp = a[i].split(c);
104 | if (tmp.length > 1) {
105 | d += tmp[0];
106 | }
107 | }
108 | return d;
109 | }
110 |
--------------------------------------------------------------------------------
/lib/进制计算器.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 | 二 进 制
7 |
8 |
9 |
10 |
11 | 八 进 制
12 |
13 |
14 |
15 |
16 | 十 进 制
17 |
18 |
19 |
20 |
21 | 十六进制
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | );
33 | ui.in_bin.addTextChangedListener(new android.text.TextWatcher({
34 | afterTextChanged: function (text) {
35 | if (ui.in_bin.focused) {
36 | text = String(parseInt(text, 2));
37 | ui.run(() => {
38 | ui.in_ba.setText(conversion(text, 8));
39 | ui.in_ten.setText(conversion(text, 10));
40 | ui.in_hex.setText(conversion(text, 16));
41 | });
42 | };
43 | }
44 | }));
45 |
46 | ui.in_ba.addTextChangedListener(new android.text.TextWatcher({
47 | afterTextChanged: function (text) {
48 | if (ui.in_ba.focused) {
49 | text = String(parseInt(text, 8));
50 | ui.run(() => {
51 | ui.in_bin.setText(conversion(text, 2));
52 | ui.in_ten.setText(conversion(text, 10));
53 | ui.in_hex.setText(conversion(text, 16));
54 | });
55 | };
56 | }
57 | }));
58 |
59 | ui.in_ten.addTextChangedListener(new android.text.TextWatcher({
60 | afterTextChanged: function (text) {
61 | if (ui.in_ten.focused) {
62 | text = String(parseInt(text, 10));
63 | ui.run(() => {
64 | ui.in_bin.setText(conversion(text, 2));
65 | ui.in_ba.setText(conversion(text, 8));
66 | ui.in_hex.setText(conversion(text, 16));
67 | });
68 | };
69 | }
70 | }));
71 |
72 | ui.in_hex.addTextChangedListener(new android.text.TextWatcher({
73 | afterTextChanged: function (text) {
74 | if (ui.in_hex.focused) {
75 | text = String(parseInt(text, 16));
76 | ui.run(() => {
77 | ui.in_bin.setText(conversion(text, 2));
78 | ui.in_ba.setText(conversion(text, 8));
79 | ui.in_ten.setText(conversion(text, 10));
80 | });
81 | };
82 | }
83 | }));
84 |
85 | ui.clos.click(function () {
86 | ui.run(() => {
87 | ui.in_bin.setText("");
88 | ui.in_ba.setText("");
89 | ui.in_ten.setText("");
90 | ui.in_hex.setText("");
91 | });
92 | });
93 | ui.bin.click(function () {
94 | let binz = ui.in_bin.text();
95 | if (binz) {
96 | setClip(binz);
97 | toast("复制成功");
98 | }
99 | });
100 |
101 | ui.ba.click(function () {
102 | let baz = ui.in_ba.text();
103 | if (baz) {
104 | setClip(baz);
105 | toast("复制成功");
106 | }
107 | });
108 |
109 | ui.ten.click(function () {
110 | let tenz = ui.in_ten.text();
111 | if (tenz) {
112 | setClip(tenz);
113 | toast("复制成功");
114 | }
115 | });
116 |
117 | ui.hex.click(function () {
118 | let hexz = ui.in_hex.text();
119 | if (hexz) {
120 | setClip(hexz);
121 | toast("复制成功");
122 | }
123 | });
124 | function conversion(text, num) {
125 | if (!parseInt(text)) {
126 | return ""
127 | };
128 | return Number(text).toString(num);
129 | };
--------------------------------------------------------------------------------
/lib/音乐下载.js:
--------------------------------------------------------------------------------
1 | "ui";
2 | ui.layout(
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | );
24 | const music_source = ["tencent","netease","kugou","baidu","xiami"];
25 | var music_list = [];
26 |
27 | threads.start(function () {
28 | netease_hot();
29 | });
30 |
31 | ui.music_list.setDataSource(music_list);
32 |
33 | ui.music_search_button.on("click", function () {
34 | music_flag1 = false;
35 | music_page = 1;
36 | threads.start(function () {
37 | var len = music_list.length;
38 | for (let i = 0; i < len; i++) {
39 | music_list.pop();
40 | }
41 | var i = ui.music_sp1.getSelectedItemPosition();
42 | // toast(music_source[i]);
43 | getMusic(ui.music_search_input.text(), music_source[i], music_page, 20);
44 | });
45 | });
46 |
47 | ui.music_list.on("item_click", function (m) {
48 | if (m.id == 0) {
49 | threads.start(function () {
50 | getMusic(ui.music_search_input.text(), m.source, ++music_page, 10);
51 | });
52 | } else {
53 | threads.start(function () {
54 | let music_d;
55 | if (music_flag1) {
56 | music_d = download_music(m.id, "netease");
57 | } else {
58 | music_d = download_music(m.id, m.source);
59 | }
60 | download(m.name + " - " + m.artist, music_d.url)
61 | });
62 | }
63 | });
64 |
65 | function netease_hot() {
66 | url = "https://y.xuelg.com/api.php?callback=jQuery111305475340320325446_1529241763034&types=playlist&id=3778678";
67 | hot = http.get(url).body.string();
68 | hot = hot.match(/"tracks":.*/g)[0];
69 | eval("hot = " + hot.substr(9).replace(/,"trackIds".*/g, ""));
70 | for (i in hot) {
71 | music_list.push({
72 | id: hot[i].id,
73 | name: hot[i].name,
74 | artist: hot[i].ar[0].name,
75 | pic: hot[i].al.picUrl
76 | });
77 |
78 | }
79 | return hot;
80 | }
81 |
82 | function getMusic(word, source, page, num) {
83 | if (!word) {
84 | return;
85 | }
86 | url = "https://y.xuelg.com/api.php?callback=jQuery111305475340320325446_1529241763041&types=search&count=" + num + "&source=" + source + "&pages=" + page + "&name=" + word;
87 | let m = http.get(url).body.string();
88 | eval("m = " + m.substr(m.indexOf('(')));
89 | music_list.pop();
90 | if (m.length == 0) {
91 | toast("没有更多了");
92 | }
93 | for (i in m) {
94 | url = "https://y.xuelg.com/api.php?callback=jQuery111306503234710876828_1529243003818&types=" + "pic" + "&id=" + m[i].pic_id + "&source=" + m[i].source;
95 | mstr = http.get(url).body.string();
96 | eval(mstr = mstr.substr(mstr.indexOf('(')));
97 | mstr = mstr.replace(/\\/g, "");
98 | m[i]["pic"] = mstr.match(/http[^"]*/g)[0];
99 | music_list.push(m[i]);
100 | }
101 | music_list.push({
102 | name: " 加载更多",
103 | pic: "#ffffff",
104 | artist: "",
105 | id: "0"
106 | });
107 | return m;
108 | }
109 | function download_music(id, source) {
110 | url = "https://y.xuelg.com/api.php?callback=jQuery111306503234710876828_1529243003818&types=" + "url" + "&id=" + id + "&source=" + source;
111 | mstr = http.get(url).body.string();
112 | eval(mstr = mstr.substr(mstr.indexOf('(')));
113 | mstr = mstr.replace(/\\/g, "");
114 | m = [];
115 | try {
116 | m["url"] = mstr.match(/url\":\"[^"]*/g)[0].match(/http.*/g)[0];
117 | m["size"] = mstr.match(/size\":[^,]*/g)[0].match(/\d.*/g)[0];
118 | m["br"] = mstr.match(/br\":[^}]*/g)[0].match(/\d.*/g)[0];
119 | } catch (e) {
120 | log(e)
121 | }
122 | return m;
123 | }
124 |
--------------------------------------------------------------------------------
/main.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: 白酒煮饭
3 | * @Date: 2018-11-15 22:56:19
4 | * @Last Modified by: QQ: 1641763174
5 | * @Last Modified time: 2019-12-14 15:59:31
6 | */
7 | "ui";
8 |
9 | const versionCode = 1;
10 | const Spiccode = "v0.29.3";
11 |
12 | const share = "多功能工具箱:\n" +
13 | "一款方便快捷的轻应用APP,内有多种小功能,欢迎下载使用!\n" +
14 | "欢迎加入多功能工具箱官方群,群号码:984523553。";
15 | const QAQ = "1.这个软件支持哪些手机?\n答:一般安卓系统7.0以上的都支持,但也有可能存在个别手机的兼容问题,如在使用过程中发现有问题,请及时反馈。\n2.苹果手机可以用吗?\n答:不可以。\n";
16 | const INFO = "本软件是一款免费开源的的项目!\n如果你从任何地方购买的,那么您很可能上当了。\n此软件中使用到的某些功能模块,是在Auto.js群中收集的,由本人稍加修改适配。";
17 | const releaseNotes = "多功能工具箱,是一款免费开源的的项目,您的捐赠将促进软件持续更新,金额不限,您的支持对独立软件开发者很重要,请帮忙多多宣传。";
18 | const F_List = [{
19 | id: "文字翻译",
20 | text: "",
21 | code: "文字翻译",
22 | bg: "#808080"
23 | }, {
24 | id: "文字识别",
25 | text: "",
26 | code: "文字识别",
27 | bg: "#808080"
28 | }, {
29 | id: "成语词典",
30 | text: "",
31 | code: "成语词典",
32 | bg: "#808080"
33 | }, {
34 | id: "号码归属地查询",
35 | text: "",
36 | code: "号码归属地查询",
37 | bg: "#808080"
38 | }, {
39 | id: "IP地址查询",
40 | text: "",
41 | code: "IP地址查询",
42 | bg: "#808080"
43 | }, {
44 | id: "身份证查询",
45 | text: "",
46 | code: "身份证查询",
47 | bg: "#808080"
48 | }, {
49 | id: "聊天机器人",
50 | text: "",
51 | code: "聊天机器人",
52 | bg: "#808080"
53 | }, {
54 | id: "密码生成器",
55 | text: "",
56 | code: "密码生成器",
57 | bg: "#808080"
58 | }, {
59 | id: "网页源码浏览",
60 | text: "",
61 | code: "网页源码浏览",
62 | bg: "#808080"
63 | }, {
64 | id: "调色板2.0",
65 | text: "",
66 | code: "调色板2.0",
67 | bg: "#808080"
68 | }, {
69 | id: "每日一句(英文励志)",
70 | text: "",
71 | code: "每日一句(英文励志)",
72 | bg: "#808080"
73 | }, {
74 | id: "短网址生成",
75 | text: "",
76 | code: "短网址生成",
77 | bg: "#808080"
78 | }, {
79 | id: "二维码生成",
80 | text: "",
81 | code: "二维码生成",
82 | bg: "#808080"
83 | }, {
84 | id: "二维码识别",
85 | text: "",
86 | code: "二维码识别",
87 | bg: "#808080"
88 | }, {
89 | id: "图片转链接",
90 | text: "",
91 | code: "图片转链接",
92 | bg: "#808080"
93 | }, {
94 | id: "音乐下载",
95 | text: "",
96 | code: "音乐下载",
97 | bg: "#808080"
98 | }, {
99 | id: "一键AES加/解密",
100 | text: "",
101 | code: "一键AES加解密",
102 | bg: "#808080"
103 | }, {
104 | id: "脚本一键BASE64",
105 | text: "",
106 | code: "脚本一键BASE64",
107 | bg: "#808080"
108 | }, {
109 | id: "进制计算器",
110 | text: "",
111 | code: "进制计算器",
112 | bg: "#808080"
113 | }, {
114 | id: "vip视频解析2.0",
115 | text: "",
116 | code: "vip视频解析2.0",
117 | bg: "#808080"
118 | }, {
119 | id: "历史上的今天",
120 | text: "",
121 | code: "历史上的今天",
122 | bg: "#808080"
123 | }, {
124 | id: "百度搜图",
125 | text: "",
126 | code: "百度搜图",
127 | bg: "#808080"
128 | }, {
129 | id: "视频搜索",
130 | text: "",
131 | code: "视频搜索",
132 | bg: "#808080"
133 | }, {
134 | id: "网页翻译器",
135 | text: "",
136 | code: "网页翻译器",
137 | bg: "#808080"
138 | }, {
139 | id: "BASE64加解密",
140 | text: "",
141 | code: "BASE64加解密",
142 | bg: "#808080"
143 | }, {
144 | id: "时间截转换",
145 | text: "",
146 | code: "时间截转换",
147 | bg: "#808080"
148 | }, {
149 | id: "倒数日",
150 | text: "",
151 | code: "倒数日",
152 | bg: "#808080"
153 | }, {
154 | id: "亲戚关系",
155 | text: "",
156 | code: "亲戚关系",
157 | bg: "#808080"
158 | }];
159 |
160 | ui.statusBarColor("#a3a1a1");
161 | ui.layout(
162 |
163 |
164 |
165 |
166 |
167 |
234 |
235 |
236 |
237 |
238 |
239 | );
240 | activity.setSupportActionBar(ui.toolbar);
241 | ui.viewpager.setTitles(["功能", "我的"]);
242 | ui.tabs.setupWithViewPager(ui.viewpager);
243 | ui.list.setDataSource(F_List);
244 |
245 | ui.list.on("item_click", function (name) {
246 | QuoteCode(name.code)
247 | });
248 | ui.me.click(() => {
249 | app.startActivity({
250 | action: "android.intent.action.VIEW",
251 | data: "mqqapi://card/show_pslcard?&uin=1641763174"
252 | });
253 | });
254 | ui.zanzhu.click(() => {
255 | dialogs.build({
256 | title: "请选择打赏的方式",
257 | content: releaseNotes,
258 | neutral: "取消",
259 | negative: "支付宝",
260 | positive: "微信",
261 | cancelable: false
262 | })
263 | .on("negative", () => {
264 | alipay("fkx06321tasf2kjzl3dki78");
265 | })
266 | .on("positive", () => {
267 | QuoteCode("weixin");
268 | })
269 | .show();
270 | });
271 |
272 | ui.qun.click(() => {
273 | app.startActivity({
274 | action: "android.intent.action.VIEW",
275 | data: "mqqapi://card/show_pslcard?card_type=group&uin=952614347",
276 | packageName: "com.tencent.mobileqq",
277 | });
278 | });
279 |
280 | ui.help.click(() => {
281 | dialogs.build({
282 | title: "常见问题QAQ",
283 | content: QAQ,
284 | positive: "我知道了",
285 | cancelable: false
286 | })
287 | .show();
288 | });
289 |
290 | ui.jianyi.click(() => {
291 | engines.execScriptFile("./lib/wenti.js");
292 | });
293 | ui.fen.click(() => {
294 | dialogs.build({
295 | title: "是否分享给好友?",
296 | content: null,
297 | positive: "确定",
298 | negative: "取消",
299 | cancelable: false
300 | })
301 | .on("positive", () => {
302 | app.startActivity({
303 | action: "android.intent.action.SEND",
304 | type: "text/*",
305 | extras: {
306 | "android.intent.extra.TEXT": share
307 | },
308 | packageName: "com.tencent.mobileqq",
309 | className: "com.tencent.mobileqq.activity.JumpActivity"
310 | });
311 | })
312 | .show();
313 | });
314 | ui.up.click(() => {
315 | app.openUrl("https://github.com/wu737/function_toolbox");
316 | });
317 | ui.up.on("long_click", () => {
318 | app.openUrl("https://github.com/wu737/function_toolbox");
319 | });
320 | ui.info.click(() => {
321 | dialogs.build({
322 | title: "关于工具箱" + Spiccode,
323 | content: INFO,
324 | positive: "我知道了",
325 | cancelable: false
326 | })
327 | .show();
328 | });
329 |
330 | ui.exit.click(() => {
331 | dialogs.confirm("提示", "您真的要退出吗?", (a) => {
332 | if (a) {
333 | ui.finish();
334 | }
335 | });
336 | });
337 |
338 | function alipay(code) {
339 | app.startActivity({
340 | action: "android.intent.action.VIEW",
341 | data: "alipayqr://platformapi/startapp?saId=10000007&qrcode=" +
342 | "HTTPS://QR.ALIPAY.COM/" + code
343 | });
344 | }
345 | function QuoteCode(Name) {
346 | let code = "./lib/" + Name + ".js";
347 | engines.execScriptFile(code);
348 | }
349 |
--------------------------------------------------------------------------------
/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_number": 0,
5 | "build_time": 0
6 | },
7 | "useFeatures": [],
8 | "main": "main.js",
9 | "name": "多功能工具箱",
10 | "packageName": "com.auto.gjx.com",
11 | "scripts": {},
12 | "versionCode": 1,
13 | "versionName": "0.24.0"
14 | }
--------------------------------------------------------------------------------
/res/ic_card_giftcard_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wu737/function_toolbox/47d65c40540b3bf83c61396b6b8d6bcff937df1e/res/ic_card_giftcard_black_48dp.png
--------------------------------------------------------------------------------
/res/ic_exit_to_app_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wu737/function_toolbox/47d65c40540b3bf83c61396b6b8d6bcff937df1e/res/ic_exit_to_app_black_48dp.png
--------------------------------------------------------------------------------
/res/ic_help_outline_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wu737/function_toolbox/47d65c40540b3bf83c61396b6b8d6bcff937df1e/res/ic_help_outline_black_48dp.png
--------------------------------------------------------------------------------
/res/ic_info_outline_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wu737/function_toolbox/47d65c40540b3bf83c61396b6b8d6bcff937df1e/res/ic_info_outline_black_48dp.png
--------------------------------------------------------------------------------
/res/ic_keyboard_backspace_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wu737/function_toolbox/47d65c40540b3bf83c61396b6b8d6bcff937df1e/res/ic_keyboard_backspace_black_48dp.png
--------------------------------------------------------------------------------
/res/ic_message_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wu737/function_toolbox/47d65c40540b3bf83c61396b6b8d6bcff937df1e/res/ic_message_black_48dp.png
--------------------------------------------------------------------------------
/res/ic_refresh_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wu737/function_toolbox/47d65c40540b3bf83c61396b6b8d6bcff937df1e/res/ic_refresh_black_48dp.png
--------------------------------------------------------------------------------
/res/ic_share_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wu737/function_toolbox/47d65c40540b3bf83c61396b6b8d6bcff937df1e/res/ic_share_black_48dp.png
--------------------------------------------------------------------------------
/res/ic_touch_app_black_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wu737/function_toolbox/47d65c40540b3bf83c61396b6b8d6bcff937df1e/res/ic_touch_app_black_48dp.png
--------------------------------------------------------------------------------
/res/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wu737/function_toolbox/47d65c40540b3bf83c61396b6b8d6bcff937df1e/res/logo.png
--------------------------------------------------------------------------------
/res/splashIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wu737/function_toolbox/47d65c40540b3bf83c61396b6b8d6bcff937df1e/res/splashIcon.png
--------------------------------------------------------------------------------
/多功能工具箱_v0.29.10.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wu737/function_toolbox/47d65c40540b3bf83c61396b6b8d6bcff937df1e/多功能工具箱_v0.29.10.apk
--------------------------------------------------------------------------------