├── server
├── api
│ ├── subject_collection.js
│ ├── utils
│ │ ├── common.js
│ │ ├── douban_common.js
│ │ ├── douban_url_config.js
│ │ └── douban_query_config.js
│ ├── detail.js
│ ├── play.js
│ ├── movie_list.js
│ └── search.js
├── tsconfig.json
├── source
│ ├── app.js
│ ├── lib
│ │ ├── app.js
│ │ ├── ali_readable.js
│ │ ├── ali.js
│ │ ├── ali_readable.unfinished.js
│ │ ├── similarity.js
│ │ └── utils.js
│ ├── build.js
│ ├── dovx_open.js
│ ├── xiaozhitiao_open.js
│ ├── kuwo.js
│ ├── caiji_open.js
│ ├── pansou_open.js
│ ├── sharenice_open.js
│ ├── bookan_book_open.js
│ ├── pansearch_open.js
│ ├── tuxiaobei_open.js
│ ├── ubestkid_open.js
│ ├── wogg_open.js
│ ├── douyu_bytecode.js
│ ├── kuqimv_open.js
│ ├── dj0898_book_open.js
│ ├── kkys_open.js
│ ├── huya_bytecode.js
│ ├── boosj_open.js
│ ├── shuyinfm_bytecode.js
│ ├── jojo_bytecode.js
│ ├── hula8_bytecode.js
│ ├── duanju.js
│ ├── ting13_bytecode.js
│ ├── cntv_open.js
│ ├── bililive_bytecode.js
│ ├── lbgs_book_open.js
│ ├── 230ts_book_open.js
│ └── yqktv_open2.js
└── utils
│ └── index.js
├── .eslintignore
├── components
├── LayoutFooter.vue
├── SearchComp.vue
├── Subtitle.vue
├── LayoutHeader.vue
├── ItemList.vue
└── SearchContent.vue
├── assets
├── styles
│ └── var.less
└── logo.png
├── public
└── favicon.ico
├── prettier.config.cjs
├── tsconfig.json
├── composables
├── token.js
├── fetch.js
└── storage.js
├── .gitignore
├── utils
└── index.js
├── pages
├── History.vue
├── Search.vue
├── Detail.vue
├── Setting.vue
├── Play.vue
└── index.vue
├── .eslintrc.cjs
├── middleware
└── index.global.js
├── nuxt.config.js
├── README.md
├── app.vue
└── package.json
/server/api/subject_collection.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | out
4 | .gitignore
5 | package.json
--------------------------------------------------------------------------------
/components/LayoutFooter.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/server/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../.nuxt/tsconfig.server.json"
3 | }
4 |
--------------------------------------------------------------------------------
/assets/styles/var.less:
--------------------------------------------------------------------------------
1 | @layout-header-height: 60px;
2 | @layout-footer-height: 60px;
3 |
--------------------------------------------------------------------------------
/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liujuntao123/one-site-movie/HEAD/assets/logo.png
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liujuntao123/one-site-movie/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/prettier.config.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | singleQuote: true,
3 | printWidth: 4000,
4 | endOfLine: 'auto',
5 | };
6 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | // https://nuxt.com/docs/guide/concepts/typescript
3 | "extends": "./.nuxt/tsconfig.json"
4 | }
5 |
--------------------------------------------------------------------------------
/server/api/utils/common.js:
--------------------------------------------------------------------------------
1 | export function objectToQueryString(obj) {
2 | return Object.keys(obj)
3 | .map((key) => `${key}=${obj[key]}`)
4 | .join('&');
5 | }
6 |
--------------------------------------------------------------------------------
/composables/token.js:
--------------------------------------------------------------------------------
1 |
2 | export const setToken=async ()=>{
3 | const aliToken=getLocalstorage('ali_token')
4 | await useFetch('/api/get_token',{query:{aliToken}})
5 | }
--------------------------------------------------------------------------------
/server/source/app.js:
--------------------------------------------------------------------------------
1 | function __jsEvalReturn() {
2 | return {
3 | isVideoFormat: function (url) {
4 | return !0;
5 | },
6 | };
7 | }
8 | export { __jsEvalReturn };
9 |
--------------------------------------------------------------------------------
/server/source/lib/app.js:
--------------------------------------------------------------------------------
1 | function __jsEvalReturn() {
2 | return {
3 | isVideoFormat: function (url) {
4 | return !0;
5 | },
6 | };
7 | }
8 | export { __jsEvalReturn };
9 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Nuxt dev/build outputs
2 | .output
3 | .data
4 | .nuxt
5 | .nitro
6 | .cache
7 | dist
8 |
9 | # Node dependencies
10 | node_modules
11 |
12 | # Logs
13 | logs
14 | *.log
15 |
16 | # Misc
17 | .DS_Store
18 | .fleet
19 | .idea
20 |
21 | # Local env files
22 | .env
23 | .env.*
24 | !.env.example
25 |
26 | .vscode
27 |
28 | .vercel
29 |
--------------------------------------------------------------------------------
/utils/index.js:
--------------------------------------------------------------------------------
1 | export const getLastPath = (url) => {
2 | const paths = url.split('/');
3 | return paths[paths.length - 1];
4 | };
5 |
6 | export const req = (...args) => {
7 | return $fetch(...args)
8 | .then((res) => {
9 | return { ...res, content: JSON.stringify(res) };
10 | })
11 | .catch((error) => {
12 | return error;
13 | });
14 | };
15 |
--------------------------------------------------------------------------------
/server/api/utils/douban_common.js:
--------------------------------------------------------------------------------
1 | export const common_header = {
2 | 'User-Agent': 'Rexxar-Core/0.1.3 api-client/1 com.douban.frodo/7.9.0(216) Android/28 product/Xiaomi11 rom/android network/wifi udid/pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n platform/mobile com.douban.frodo/7.9.0(216) Rexxar/1.2.151 platform/mobile 1.2.151',
3 | };
4 |
5 | export const base_url = 'https://frodo.douban.com/api/v2';
6 |
--------------------------------------------------------------------------------
/pages/History.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
15 |
--------------------------------------------------------------------------------
/components/SearchComp.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
12 |
--------------------------------------------------------------------------------
/composables/fetch.js:
--------------------------------------------------------------------------------
1 | const getAliToken = () => getLocalstorage('ali_token');
2 | const getEngine = () => getLocalstorage('engine');
3 |
4 | export const useFetchWithToken = (...args) => {
5 | return useFetch(args[0], { ...args[1], headers: { 'Ali-Token': getAliToken() } });
6 | };
7 |
8 | export const useFetchWithEngine = (...args) => {
9 | return useFetch(args[0], { ...args[1], headers: { 'Search-Engine': getEngine() } });
10 | };
11 |
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true,
5 | },
6 | extends: ['plugin:vue/vue3-essential', 'eslint:recommended', '@vue/prettier'],
7 |
8 | parserOptions: {
9 | ecmaVersion: 2020,
10 | type: 'module',
11 | },
12 | rules: {
13 | 'no-undef': 'off',
14 | 'vue/no-unused-vars': 'warn',
15 | 'no-unused-vars': 'warn',
16 | 'vue/multi-word-component-names': 'off',
17 | },
18 | };
19 |
--------------------------------------------------------------------------------
/middleware/index.global.js:
--------------------------------------------------------------------------------
1 | export default defineNuxtRouteMiddleware((to, from) => {
2 | // console.log(to.path)
3 | if (process.server) return;
4 | // 检查是否是播放页面,如果是,则检查localstorage中是否有token,如果没有,则弹窗提示,并阻止跳转
5 | if (to.path === '/play') {
6 | const token = getLocalstorage('ali_token');
7 |
8 | if (!token) {
9 | Modal.info({
10 | title: '提示',
11 | content: '请先前往设置页面设置token,否则无法使用在线播放功能',
12 | onOk() {},
13 | });
14 | return abortNavigation();
15 | }
16 | }
17 | });
18 |
--------------------------------------------------------------------------------
/server/api/detail.js:
--------------------------------------------------------------------------------
1 | import { __jsEvalReturn } from '../source/pansearch_open';
2 |
3 | export default defineEventHandler(async (event) => {
4 | const query = getQuery(event);
5 | const headers = getHeaders(event);
6 |
7 | var spider = __jsEvalReturn();
8 |
9 | function jsonParse(obj) {
10 | if (typeof obj === 'string') {
11 | return JSON.parse(obj);
12 | }
13 | return obj;
14 | }
15 |
16 | await spider.init({ skey: 'siteKey', ext: headers['ali-token'] });
17 |
18 | const result = jsonParse(await spider.detail(query.id));
19 |
20 | return { status: result ? 'success' : 'failed', data: result };
21 | });
22 |
--------------------------------------------------------------------------------
/nuxt.config.js:
--------------------------------------------------------------------------------
1 | // https://nuxt.com/docs/api/configuration/nuxt-config
2 | export default defineNuxtConfig({
3 | ssr: false,
4 | devtools: { enabled: true },
5 | modules: ['@ant-design-vue/nuxt'],
6 | app: {
7 | head: {
8 | charset: 'utf-8',
9 | viewport: 'width=device-width, initial-scale=1',
10 | meta: [
11 | { name: 'referrer', content: 'no-referrer' },
12 | { 'http-equiv': 'Content-Security-Policy', content: "worker-src blob:; child-src blob: gap:;img-src * blob: data:;media-src * blob:;default-src * 'self' 'unsafe-inline' 'unsafe-eval' data: gap: content:" },
13 | ],
14 | },
15 | },
16 | });
17 |
--------------------------------------------------------------------------------
/server/api/play.js:
--------------------------------------------------------------------------------
1 | import { __jsEvalReturn } from '../source/pansearch_open';
2 |
3 | export default defineEventHandler(async (event) => {
4 | const query = getQuery(event);
5 | const headers = getHeaders(event);
6 |
7 | var spider = __jsEvalReturn();
8 |
9 | function jsonParse(obj) {
10 | if (typeof obj === 'string') {
11 | return JSON.parse(obj);
12 | }
13 | return obj;
14 | }
15 |
16 | await spider.init({ skey: 'siteKey', ext: headers['ali-token'] });
17 |
18 | var result = jsonParse(await spider.play(query.flag, query.url, query.share_id));
19 | return { status: result ? 'success' : 'failed', data: result };
20 | });
21 |
--------------------------------------------------------------------------------
/server/api/utils/douban_url_config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | hot_gaia: '/movie/hot_gaia',
3 | tv_hot: '/subject_collection/tv_hot/items',
4 | tv_domestic: '/subject_collection/tv_domestic/items',
5 | tv_american: '/subject_collection/tv_american/items',
6 | tv_japanese: '/subject_collection/tv_japanese/items',
7 | tv_korean: '/subject_collection/tv_korean/items',
8 | tv_animation: '/subject_collection/tv_animation/items',
9 | show_hot: '/subject_collection/show_hot/items',
10 | tag_movie: '/movie/tag',
11 | movie_top250: '/subject_collection/movie_top250/items',
12 | movie_rank: '/movie/category_ranks',
13 | tv_rank: '/tv/category_ranks',
14 | play_list: '/skynet/new_playlists',
15 | };
16 |
--------------------------------------------------------------------------------
/components/Subtitle.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {{ subtitle }}
9 |
10 |
11 |
12 |
13 |
21 |
22 |
32 |
--------------------------------------------------------------------------------
/composables/storage.js:
--------------------------------------------------------------------------------
1 | export const setLocalStrorage = (key, value) => {
2 | if (!process.client) return;
3 | if (key && value !== '') {
4 | if (typeof value === 'object') {
5 | value = JSON.stringify(value);
6 | }
7 | window.localStorage.setItem(key, value);
8 | console.log(`${key} local storage 设置成功`);
9 | }
10 | };
11 |
12 | export const getLocalstorage = (key) => {
13 | if (!process.client) return;
14 | let value = window.localStorage.getItem(key);
15 | value = value === null ? '' : value;
16 | return value;
17 | };
18 |
19 | export const removeLocalstorage = (key) => {
20 | if (!process.client) return;
21 | if (this.getLocalstorage(key)) {
22 | window.localStorage.removeItem(key);
23 | }
24 | };
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 声明:本项目仅用于学习交流,不用于商业用途。如果存在侵权问题,请联系作者删除。
2 |
3 | # 一站影视
4 |
5 | 界面清爽,完全免费的在线观影网站。
6 |
7 | 体验地址:https://one-site-movie.fun
8 |
9 | 网站截图
10 |
11 | 
12 |
13 |
14 | ## 如何使用
15 | 1. 拥有一个阿里云盘账号
16 | 2. 前往设置页面设置token
17 | 3. 开始使用
18 |
19 | ## 功能
20 |
21 | - 影视搜索:搜索电影、电视剧、综艺、动漫、纪录片等。
22 | - 影视分类:按类型、地区、年代、评分等分类。
23 | - 影视播放:支持在线播放。
24 | - 播放历史
25 |
26 | ## TODO
27 |
28 | - 自动跳过片头片尾
29 | - 收藏
30 | - 分享链接解析
31 | - 阿里云盘扫码获得token
32 | - 移动端适配
33 |
34 | ## 如何自己部署一个此网站?(以下都是免费的)
35 |
36 | 1. fork 本项目
37 | 2. 在vercel选择fork的仓库进行一键部署
38 | 3. 在vercel创建一个database类型的项目,选择vercel kv类型的数据
39 | 4. 根据指引进行database和project的关联
40 | 5. 完成
41 |
--------------------------------------------------------------------------------
/server/api/movie_list.js:
--------------------------------------------------------------------------------
1 | import { objectToQueryString } from './utils/common';
2 | import { base_url, common_header } from './utils/douban_common';
3 | import urlConfig from './utils/douban_url_config';
4 | import common_query from './utils/douban_query_config';
5 |
6 | export default defineEventHandler(async (event) => {
7 | const query = getQuery(event);
8 | const path = urlConfig[query.key];
9 | const url = `${base_url}${path}`;
10 | let commonQueryKey = query.key;
11 |
12 | const queryObj = common_query[commonQueryKey];
13 | const queryString = objectToQueryString({ ...queryObj, q: query.q, start: query.start, count: query.count });
14 | const res = await $fetch(`${url}?${queryString}`, {
15 | method: 'GET',
16 | headers: { ...common_header },
17 | });
18 | return {
19 | status: 'success',
20 | data: res,
21 | };
22 | });
23 |
--------------------------------------------------------------------------------
/app.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
16 |
17 |
37 |
38 |
48 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nuxt-app",
3 | "private": true,
4 | "type": "module",
5 | "scripts": {
6 | "build": "nuxt build",
7 | "dev": "nuxt dev --dotenv .env.development.local",
8 | "generate": "nuxt generate",
9 | "preview": "nuxt preview",
10 | "postinstall": "nuxt prepare"
11 | },
12 | "devDependencies": {
13 | "@ant-design-vue/nuxt": "^1.4.1",
14 | "@nuxtjs/eslint-config-typescript": "^12.1.0",
15 | "@nuxtjs/eslint-module": "^4.1.0",
16 | "@vue/eslint-config-prettier": "^9.0.0",
17 | "ant-design-vue": "^4.1.0",
18 | "eslint": "^8.56.0",
19 | "eslint-config-prettier": "^9.1.0",
20 | "eslint-plugin-prettier": "^5.1.3",
21 | "eslint-plugin-vue": "^9.20.1",
22 | "less": "^4.2.0",
23 | "nuxt": "^3.9.1",
24 | "prettier": "^3.2.4",
25 | "vercel": "^33.2.0",
26 | "vue": "^3.4.10",
27 | "vue-router": "^4.2.5"
28 | },
29 | "dependencies": {
30 | "@vercel/kv": "^1.0.1",
31 | "dplayer": "^1.27.1",
32 | "hls.js": "^1.5.1",
33 | "xgplayer": "^3.0.11",
34 | "xgplayer-hls": "^3.0.11"
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/server/api/search.js:
--------------------------------------------------------------------------------
1 | import { __jsEvalReturn as pansearch } from '../source/pansearch_open';
2 | import { __jsEvalReturn as wogg } from '../source/wogg_open';
3 | import { __jsEvalReturn as dovx } from '../source/dovx_open';
4 | import { __jsEvalReturn as pansou } from '../source/pansou_open';
5 | import { __jsEvalReturn as xiaozhitiao } from '../source/xiaozhitiao_open';
6 |
7 | const engines = {
8 | pansearch,
9 | wogg,
10 | dovx,
11 | pansou,
12 | xiaozhitiao,
13 | };
14 |
15 | export default defineEventHandler(async (event) => {
16 | const query = getQuery(event);
17 | const headers = getHeaders(event);
18 | const engineHeader = headers['search-engine'];
19 | console.log('🚀 ~ defineEventHandler ~ engineHeader:', engineHeader);
20 |
21 | const engine = engines[engineHeader];
22 |
23 | var spider = engine();
24 |
25 | function jsonParse(obj) {
26 | if (typeof obj === 'string') {
27 | return JSON.parse(obj);
28 | }
29 | return obj;
30 | }
31 |
32 | var result = jsonParse(await spider.search(query.keywords));
33 |
34 | return { status: 'success', data: result };
35 | });
36 |
--------------------------------------------------------------------------------
/components/LayoutHeader.vue:
--------------------------------------------------------------------------------
1 |
2 |
21 |
22 |
23 |
29 |
30 |
45 |
--------------------------------------------------------------------------------
/server/utils/index.js:
--------------------------------------------------------------------------------
1 | import { kv } from '@vercel/kv';
2 |
3 | export const getLastPath = (url) => {
4 | const paths = url.split('/');
5 | return paths[paths.length - 1];
6 | };
7 |
8 | export const req = (...args) => {
9 | return (
10 | $fetch(...args)
11 | // .then((res) => {
12 | // if (res.text) {
13 | // return res.text();
14 | // }
15 | // })
16 | .then((res) => {
17 | if (!res.content) {
18 | return { content: res };
19 | }
20 | return res;
21 | })
22 | .catch((error) => {
23 | return error;
24 | })
25 | );
26 | };
27 |
28 | export const jsonParse = (jsonString) => {
29 | if (!jsonString) return null;
30 | if (typeof jsonString === 'object') return jsonString;
31 | try {
32 | return JSON.parse(jsonString);
33 | } catch (e) {
34 | return null;
35 | }
36 | };
37 |
38 | export const store = {
39 | set: async (path1, path2, val) => {
40 | const res = await kv.set(`${path1}/${path2}`, val);
41 | // console.log('🚀 ~ set: ~ res:', '存储成功', res);
42 | return res;
43 | },
44 | get: async (path1, path2) => {
45 | const res = await kv.get(`${path1}/${path2}`);
46 | // console.log('🚀 ~ get: ~ res:', '获取成功', res);
47 | return res;
48 | },
49 | };
50 |
--------------------------------------------------------------------------------
/server/source/lib/ali_readable.js:
--------------------------------------------------------------------------------
1 | import { _ } from './cat.js';
2 | import { log } from './utils.js';
3 | import { initSome, setToken, setShareId, getVod, playerContent, playerContentByFlag } from './ali_api_readable.js';
4 |
5 | async function initAli(c) {
6 | let e = c['ext'];
7 |
8 | await log('ali init:' + typeof c);
9 | await initSome();
10 | await setToken(e);
11 | await log('ali init ext:' + e);
12 | }
13 |
14 | async function detailContent(c) {
15 | const e = /www.aliyundrive.com\/s\/([^\/]+)(\/folder\/([^\/]+))?/;
16 | let f = c['trim']();
17 | let g = f['match'](e);
18 |
19 | if (_['isEmpty'](g)) return '';
20 |
21 | let fileId = g[1];
22 | let folderId = g.length == 3 ? g[3] : '';
23 |
24 | await setShareId(fileId);
25 |
26 | let vodInfo = await getVod(f, folderId);
27 | let stringifyInfo = JSON.stringify({ list: [vodInfo] });
28 |
29 | return stringifyInfo;
30 | }
31 |
32 | async function playContent(c, d, sharedUrl) {
33 | const e = /www.aliyundrive.com\/s\/([^\/]+)(\/folder\/([^\/]+))?/;
34 | let trimedStr = sharedUrl['trim']();
35 | const matchedArray = trimedStr['match'](e);
36 |
37 | if (_['isEmpty'](matchedArray)) return '';
38 |
39 | let shareId = matchedArray[1];
40 |
41 | await setShareId(shareId);
42 | let clarity = d['split']('+');
43 | let content = c == '原画' ? await playerContent(clarity) : await playerContentByFlag(clarity, c);
44 |
45 | return content;
46 | }
47 |
48 | export { initAli, detailContent, playContent };
49 |
--------------------------------------------------------------------------------
/components/ItemList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | {{ item.vodRemarks }}
13 |
14 |
15 |
16 |
17 |
18 |
19 |
35 |
36 |
70 |
--------------------------------------------------------------------------------
/components/SearchContent.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | {{ item.vod_remarks }}
13 |
14 |
15 |
16 |
17 |
18 |
19 |
35 |
36 |
70 |
--------------------------------------------------------------------------------
/server/source/lib/ali.js:
--------------------------------------------------------------------------------
1 | (function(c,d){const n=b,e=c();while(!![]){try{const f=-parseInt(n(0x148))/0x1+-parseInt(n(0x140))/0x2*(parseInt(n(0x145))/0x3)+parseInt(n(0x150))/0x4*(parseInt(n(0x14c))/0x5)+-parseInt(n(0x147))/0x6+-parseInt(n(0x13d))/0x7+parseInt(n(0x13c))/0x8+parseInt(n(0x13b))/0x9*(parseInt(n(0x142))/0xa);if(f===d)break;else e['push'](e['shift']());}catch(g){e['push'](e['shift']());}}}(a,0xaf4a3));import{_}from'./cat.js';import{log}from'./utils.js';import{initSome,setToken,setShareId,getVod,playerContent,playerContentByFlag}from'./ali_api.js';function a(){const r=['126jHersJ','8018976SyNpYU','7198947GYbEkJ','wGsFx','isEmpty','50HOYYaa','PIvCN','1745270xSfZmS','match','split','68196ySTEaL','trim','3359892YLzwvG','845051dhMcfo','ali\x20init:','MlDBF','xvRmD','4405TqvVPk','stringify','HyWVX','ali\x20init\x20ext:','1244NAvJeB','ewEMb'];a=function(){return r;};return a();}function b(c,d){const e=a();return b=function(f,g){f=f-0x13a;let h=e[f];return h;},b(c,d);}async function initAli(c){const o=b,d={'HyWVX':function(f,g){return f(g);},'PIvCN':o(0x149),'ewEMb':function(f,g){return f+g;},'xvRmD':o(0x14f)};let e=c['ext'];await d[o(0x14e)](log,d[o(0x141)]+typeof c),await initSome(),await d[o(0x14e)](setToken,e),await d[o(0x14e)](log,d[o(0x13a)](d[o(0x14b)],e));}async function detailContent(c){const p=b,d={'MlDBF':function(l,m){return l(m);}},e=/www.aliyundrive.com\/s\/([^\/]+)(\/folder\/([^\/]+))?/;let f=c[p(0x146)](),g=f[p(0x143)](e);if(_[p(0x13f)](g))return'';let h=g[0x1],i=g['length']==0x3?g[0x3]:'';await d[p(0x14a)](setShareId,h);let j=await getVod(f,i),k=JSON[p(0x14d)]({'list':[j]});return k;}async function playContent(c,d,e){const q=b,f={'wGsFx':function(i,j){return i==j;},'rAcPj':function(i,j,k){return i(j,k);}};let g=d[q(0x144)]('+'),h=f[q(0x13e)](c,'原画')?await playerContent(g):await f['rAcPj'](playerContentByFlag,g,c);return h;}export{initAli,detailContent,playContent};
--------------------------------------------------------------------------------
/server/source/lib/ali_readable.unfinished.js:
--------------------------------------------------------------------------------
1 | import { _ } from './cat.js'
2 | import { log } from './utils.js'
3 | import {
4 | initSome,
5 | setToken,
6 | setShareId,
7 | getVod,
8 | playerContent,
9 | playerContentByFlag,
10 | getOAuthToken,
11 | getUserToken,
12 | } from './ali_api_readable.js'
13 |
14 | const ALIYUN_DRIVE_REGEX = /www.aliyundrive.com\/s\/([^\/]+)(\/folder\/([^\/]+))?/
15 |
16 | async function initAli({token}) {
17 | await initSome(token)
18 | }
19 |
20 | async function detailContent(shareUrl) {
21 | const trimmedUrl = shareUrl.trim()
22 | const matchResult = trimmedUrl.match(ALIYUN_DRIVE_REGEX)
23 | if (_.isEmpty(matchResult)) return ''
24 |
25 | const shareId = matchResult[1]
26 | const folderId = matchResult.length == 3 ? matchResult[3] : ''
27 |
28 | await setShareId(shareId)
29 | console.log('🚀 ~ detailContent ~ setShareId: success')
30 |
31 | const vodResult = await getVod(trimmedUrl, folderId)
32 | const resultJson = JSON.stringify({ list: [vodResult] })
33 |
34 | return resultJson
35 | }
36 |
37 | async function playContent(quality, mediaId, sharedUrl) {
38 | const trimmedUrl = sharedUrl.trim()
39 | const matchResult = trimmedUrl.match(ALIYUN_DRIVE_REGEX)
40 | if (_.isEmpty(matchResult)) return ''
41 |
42 | const shareId = matchResult[1]
43 | await setShareId(shareId)
44 |
45 | const mediaIds = mediaId.split('+')
46 | const contentResult =
47 | quality == '原画' ? await playerContent(mediaIds) : await playerContentByFlag(mediaIds, quality)
48 |
49 | return contentResult
50 | }
51 |
52 | async function getToken(ali_token,shareId){
53 | console.log("🚀 ~ getToken ~ ali_token:", ali_token)
54 | // await setToken(ali_token)
55 | const oauthToken=await getOAuthToken(ali_token,shareId)
56 | const userToken=await getUserToken(ali_token,shareId)
57 | return {
58 | oauthToken,
59 | userToken
60 | }
61 | }
62 |
63 | export { initAli, detailContent, playContent,getToken }
64 |
--------------------------------------------------------------------------------
/server/source/build.js:
--------------------------------------------------------------------------------
1 | import fs from 'node:fs';
2 | import path from 'path';
3 | import uglifyjs from 'uglify-js';
4 |
5 | const copySpider = ['app', 'kunyu77_open', 'alist_open'];
6 |
7 | const root = process.cwd();
8 |
9 | const src = path.join(root);
10 | const out = path.join(root, 'dist');
11 |
12 | function minify(s, d) {
13 | var jsContent = fs.readFileSync(s).toString();
14 | jsContent = jsContent.replace('./lib/cat.js', 'assets://js/lib/cat.js');
15 | jsContent = jsContent.replace('./cat.js', 'assets://js/lib/cat.js');
16 | jsContent = uglifyjs.minify(jsContent, {
17 | mangle: false,
18 | });
19 | fs.writeFileSync(d, jsContent.code);
20 | }
21 |
22 | function listAllFiles(dirPath, arrayOfFiles) {
23 | var files = fs.readdirSync(dirPath);
24 |
25 | arrayOfFiles = arrayOfFiles || [];
26 |
27 | files.forEach(function (file) {
28 | if (fs.statSync(dirPath + '/' + file).isDirectory()) {
29 | arrayOfFiles = listAllFiles(dirPath + '/' + file, arrayOfFiles);
30 | } else {
31 | arrayOfFiles.push(path.join(dirPath, '/', file));
32 | }
33 | });
34 |
35 | return arrayOfFiles;
36 | }
37 |
38 | function src2Out() {
39 | if (fs.existsSync(out)) fs.rmSync(out, { recursive: true, force: true });
40 |
41 | fs.mkdirSync(out, { recursive: true });
42 | const libSrc = path.join(src, 'lib');
43 | const libOut = path.join(out, 'lib');
44 | fs.mkdirSync(libOut, { recursive: true });
45 | const libs = listAllFiles(libSrc);
46 | for (let index = 0; index < libs.length; index++) {
47 | const element = libs[index];
48 | const relative = path.relative(libSrc, element);
49 | minify(element, path.join(libOut, relative));
50 | }
51 |
52 | for (const sp of copySpider) {
53 | minify(path.join(src, sp + '.js'), path.join(out, sp + '.js'));
54 | }
55 | }
56 |
57 | src2Out();
58 |
59 | fs.copyFileSync(path.join(src, 'config_open.json'), path.join(out, 'config_open.json'));
60 |
61 | console.log('done');
62 |
--------------------------------------------------------------------------------
/server/source/dovx_open.js:
--------------------------------------------------------------------------------
1 | import { _ } from './lib/cat.js';
2 | import { log } from './lib/utils.js';
3 | import { initAli, detailContent, playContent } from './lib/ali.js';
4 |
5 | let siteKey = 'dovx';
6 | let siteType = 0;
7 | let siteUrl = 'https://api.dovx.tk';
8 | let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/;
9 |
10 | async function request(reqUrl) {
11 | let res = await req(reqUrl, {
12 | method: 'get',
13 | headers: {
14 | Referer: siteUrl,
15 | },
16 | });
17 | return res.content;
18 | }
19 |
20 | // cfg = {skey: siteKey, ext: extend}
21 | async function init(cfg) {
22 | try {
23 | siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
24 | siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
25 | await initAli(cfg);
26 | } catch (e) {
27 | await log('init:' + e.message + ' line:' + e.lineNumber);
28 | }
29 | }
30 |
31 | async function home(filter) {
32 | return '{}';
33 | }
34 |
35 | async function homeVod() {}
36 |
37 | async function category(tid, pg, filter, extend) {
38 | return '{}';
39 | }
40 |
41 | async function detail(id) {
42 | try {
43 | let matches = id.match(patternAli);
44 | if (!_.isEmpty(matches)) return await detailContent(matches[0]);
45 | return '';
46 | } catch (e) {
47 | await log('detail:' + e.message + ' line:' + e.lineNumber);
48 | }
49 | }
50 |
51 | async function play(flag, id, flags) {
52 | try {
53 | return await playContent(flag, id, flags);
54 | } catch (e) {
55 | await log('play:' + e.message + ' line:' + e.lineNumber);
56 | }
57 | }
58 |
59 | async function search(wd, quick, pg) {
60 | let resp = await request(siteUrl + '/ali/search?wd=' + encodeURIComponent(wd));
61 | let videos = jsonParse(resp).list;
62 | _.each(videos, (item) => {
63 | item.vod_id = item.vod_content;
64 | item.vod_content = undefined;
65 | });
66 | return JSON.stringify({
67 | list: videos,
68 | });
69 | }
70 |
71 | export function __jsEvalReturn() {
72 | return {
73 | init: init,
74 | home: home,
75 | homeVod: homeVod,
76 | category: category,
77 | detail: detail,
78 | play: play,
79 | search: search,
80 | };
81 | }
82 |
--------------------------------------------------------------------------------
/pages/Search.vue:
--------------------------------------------------------------------------------
1 |
2 |
15 |
16 |
17 |
48 |
49 |
94 |
--------------------------------------------------------------------------------
/server/source/lib/similarity.js:
--------------------------------------------------------------------------------
1 | function compareTwoStrings(first,second){if((first=first.replace(/\s+/g,""))===(second=second.replace(/\s+/g,"")))return 1;if(first.length<2||second.length<2)return 0;var firstBigrams=new Map;for(let i=0;iratings[bestMatchIndex].rating&&(bestMatchIndex=i)}return{ratings:ratings,bestMatch:ratings[bestMatchIndex],bestMatchIndex:bestMatchIndex}}function lcs(str1,str2){if(!str1||!str2)return{length:0,sequence:"",offset:0};for(var sequence="",str1Length=str1.length,str2Length=str2.length,num=new Array(str1Length),maxlen=0,lastSubsBegin=0,i=0;imaxlen&&(maxlen=num[i][j],lastSubsBegin===(thisSubsBegin=i-num[i][j]+1)?sequence+=str1[i]:(lastSubsBegin=thisSubsBegin,sequence="",sequence+=str1.substr(lastSubsBegin,i+1-lastSubsBegin))));return{length:maxlen,sequence:sequence,offset:thisSubsBegin}}function findBestLCS(mainString,targetStrings){var results=[];let bestMatchIndex=0;for(let i=0;iresults[bestMatchIndex].lcs.length&&(bestMatchIndex=i)}return{allLCS:results,bestMatch:results[bestMatchIndex],bestMatchIndex:bestMatchIndex}}export{compareTwoStrings,findBestMatch,findBestLCS};
--------------------------------------------------------------------------------
/pages/Detail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
![]()
8 |
9 |
10 |
11 | {{ query.title }}
12 | {{ query.card_subtitle }}
13 | {{ query.comment }}
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
47 |
48 |
97 |
--------------------------------------------------------------------------------
/server/source/lib/utils.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | function isSub(ext) {
4 | return ext == "srt" || ext == "ass" || ext == "ssa";
5 | }
6 |
7 | function getSize(size) {
8 | if (size <= 0) return "";
9 | if (size > 1024 * 1024 * 1024 * 1024.0) {
10 | size /= (1024 * 1024 * 1024 * 1024.0);
11 | return size.toFixed(2) + "TB";
12 | } else if (size > 1024 * 1024 * 1024.0) {
13 | size /= (1024 * 1024 * 1024.0);
14 | return size.toFixed(2) + "GB";
15 | } else if (size > 1024 * 1024.0) {
16 | size /= (1024 * 1024.0);
17 | return size.toFixed(2) + "MB";
18 | } else {
19 | size /= 1024.0;
20 | return size.toFixed(2) + "KB";
21 | }
22 | }
23 |
24 | function removeExt(text) {
25 | return text.indexOf('.') > -1 ? text.substring(0, text.lastIndexOf(".")) : text;
26 | }
27 |
28 | async function log(str) {
29 | console.debug(str);
30 | }
31 |
32 | function isVideoFormat(url) {
33 | var RULE = /http((?!http).){12,}?\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)\?.*|http((?!http).){12,}\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)|http((?!http).)*?video\/tos*/;
34 | if (url.indexOf("url=http") > -1 || url.indexOf(".js") > -1 || url.indexOf(".css") > -1 || url.indexOf(".html") > -1) {
35 | return false;
36 | }
37 | return RULE.test(url);
38 | }
39 |
40 | function jsonParse(input, json) {
41 | var jsonPlayData = JSON.parse(json);
42 | var url = jsonPlayData.url;
43 | if (url.startsWith("//")) {
44 | url = "https:" + url;
45 | }
46 | if (!url.startsWith("http")) {
47 | return null;
48 | }
49 | if (url === input) {
50 | if (!isVideoFormat(url)) {
51 | return null;
52 | }
53 | }
54 | var headers = {};
55 | var ua = jsonPlayData["user-agent"] || "";
56 | if (ua.trim().length > 0) {
57 | headers["User-Agent"] = " " + ua;
58 | }
59 | var referer = jsonPlayData.referer || "";
60 | if (referer.trim().length > 0) {
61 | headers["Referer"] = " " + referer;
62 | }
63 | var taskResult = {
64 | header: headers,
65 | url: url
66 | };
67 | return taskResult;
68 | }
69 |
70 | function debug(obj) {
71 | for (var a in obj) {
72 | if (typeof(obj[a]) == "object") {
73 | debug(obj[a]); //递归遍历
74 | } else {
75 | console.debug(a + "=" + obj[a]);
76 | }
77 | }
78 | }
79 |
80 | export { isSub, getSize, removeExt, log, isVideoFormat, jsonParse, debug};
--------------------------------------------------------------------------------
/pages/Setting.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
设置
6 |
7 |
8 |
9 |
10 | token获取链接
11 |
12 |
13 |
14 |
15 | PanSearch
16 | 玩偶
17 | 七夜
18 |
19 |
20 |
21 | 保存
22 |
23 |
24 |
25 |
26 |
27 |
87 |
88 |
99 |
--------------------------------------------------------------------------------
/server/source/xiaozhitiao_open.js:
--------------------------------------------------------------------------------
1 | import { load, _ } from './lib/cat.js';
2 | import { jsonParse, log } from './lib/utils.js';
3 | import { initAli, detailContent, playContent } from './lib/ali.js';
4 |
5 | let siteKey = 'xiaozhitiao';
6 | let siteType = 0;
7 | let siteUrl = 'https://gitcafe.net/tool/alipaper/';
8 | let aliUrl = 'https://www.aliyundrive.com/s/';
9 | let token = '';
10 | let date = new Date();
11 |
12 | const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
13 |
14 | async function request(reqUrl, data) {
15 | let res = await req(reqUrl, {
16 | method: 'POST',
17 | headers: {
18 | 'User-Agent': UA,
19 | 'Content-Type': 'multipart/form-data;',
20 | },
21 | data: data,
22 | body: data,
23 | // postType: 'form',
24 | });
25 | console.log('🚀 ~ request ~ res:', res);
26 | return res.content;
27 | }
28 |
29 | // cfg = {skey: siteKey, ext: extend}
30 | async function init(cfg) {
31 | try {
32 | siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
33 | siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
34 | await initAli(cfg);
35 | } catch (e) {
36 | await log('init:' + e.message + ' line:' + e.lineNumber);
37 | }
38 | }
39 |
40 | async function home(filter) {
41 | return '{}';
42 | }
43 |
44 | async function homeVod() {}
45 |
46 | async function category(tid, pg, filter, extend) {
47 | return '{}';
48 | }
49 |
50 | async function detail(id) {
51 | try {
52 | return await detailContent(id);
53 | } catch (e) {
54 | await log('detail:' + e.message + ' line:' + e.lineNumber);
55 | }
56 | }
57 |
58 | async function play(flag, id, flags) {
59 | try {
60 | return await playContent(flag, id, flags);
61 | } catch (e) {
62 | await log('play:' + e.message + ' line:' + e.lineNumber);
63 | }
64 | }
65 |
66 | async function search(wd, quick, pg) {
67 | if (pg <= 0) pg = 1;
68 | const params = {
69 | action: 'search',
70 | from: 'web',
71 | keyword: wd,
72 | token: await getToken(),
73 | };
74 | const resp = await request(siteUrl, params);
75 | const json = jsonParse(resp);
76 | if (!json.success) return '';
77 | const videos = _.map(json.data, (item) => {
78 | return {
79 | vod_id: aliUrl + item.alikey,
80 | vod_name: item.title,
81 | vod_pic: 'https://www.lgstatic.com/i/image2/M01/15/7E/CgoB5lysLXCADg6ZAABapAHUnQM321.jpg',
82 | vod_remarks: item.creatime,
83 | };
84 | });
85 | return JSON.stringify({
86 | list: videos,
87 | });
88 | }
89 |
90 | async function getToken() {
91 | const newDate = new Date();
92 | if (_.isEmpty(token) || newDate > date) {
93 | const params = {
94 | action: 'get_token',
95 | };
96 | const resp = await request(siteUrl, params);
97 | const json = jsonParse(resp);
98 | if (json.success) {
99 | token = json.data;
100 | date = newDate;
101 | }
102 | }
103 | return token;
104 | }
105 |
106 | export function __jsEvalReturn() {
107 | return {
108 | init: init,
109 | home: home,
110 | homeVod: homeVod,
111 | category: category,
112 | detail: detail,
113 | play: play,
114 | search: search,
115 | };
116 | }
117 |
--------------------------------------------------------------------------------
/server/source/kuwo.js:
--------------------------------------------------------------------------------
1 | //bbQ0FUT1BgGGt1d29fb3Blbi5qcyxhc3NldHM6Ly9qcy9saWIvY2F0LmpzHF9fanNFdmFsUmV0dXJuAl8Ga2V5CEhPU1QOc2l0ZUtleRBzaXRlVHlwZRJNT0JJTEVfVUEOcmVxdWVzdAhpbml0CGhvbWUOaG9tZVZvZBBjYXRlZ29yeQxkZXRhaWwIcGxheQxzZWFyY2gHd5Htd2dSJmh0dHA6Ly93YXBpLmt1d28uY26WAk1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhvbmUgT1MgMTNfMl8zIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwNS4xLjE1IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8xMy4wLjMgTW9iaWxlLzE1RTE0OCBTYWZhcmkvNjA0LjEMcmVxVXJsDmFnZW50U3AGcmVzBnJlcQxtZXRob2QUVXNlci1BZ2VudA5oZWFkZXJzDmNvbnRlbnQGY2ZnCHNrZXkKc3R5cGUMZmlsdGVyDmNsYXNzZXMSZmlsdGVyT2JqDnR5cGVfaWQJHHNgT/NgC3cSdHlwZV9uYW1lCR9Xc1QxcsVgCfRmGlm+fGlfDziXU5A7YMGIhHa6Th91CViNf1pTX1OQCytvK2/9j7tZ740JtlutXsVgH2ESc3RyaW5naWZ5DmZpbHRlcnMEe30GdGlkBHBnDGV4dGVuZAhsaW5rBGpvDHZpZGVvc1ovb3BlbmFwaS92MS9zaG9ydHBsYXkvbW9kdWxlTW9yZT9jdXJyZW50UGFnZT0UJm1vZHVsZUlkPQwmcm49MTIKcGFyc2UIZGF0YQhsaXN0DmZvckVhY2gQcGFyc2VJbnQIcGFnZRBuZXh0UGFnZRJwYWdlY291bnQQcGFnZVNpemUKbGltaXQKdG90YWwEaXQIcHVzaAZ1cmwMdm9kX2lkCnRpdGxlEHZvZF9uYW1lBmltZw52b2RfcGljGGN1cnJyZW50RGVzYxZ2b2RfcmVtYXJrcwRpZAZ2b2QOcGxheVVybFAvb3BlbmFwaS92MS9zaG9ydHBsYXkvdmlkZW9MaXN0P2FsYnVtSWQ9EnNob3J0aW5mbwpjb3ZlcgIjCVOQf5UoV79+GnZvZF9wbGF5X2Zyb20Ydm9kX3BsYXlfdXJsAiQSbXZwYXlpbmZvBnZpZAhmbGFn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
--------------------------------------------------------------------------------
/server/source/caiji_open.js:
--------------------------------------------------------------------------------
1 | //bbQ0FUT1BTEGNhaWppLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4CXw5zaXRlS2V5EHNpdGVUeXBlBFVBDmJhc2VVcmwUY2F0ZWdvcmllcwhpbml0EmdldEhlYWRlchJnZXRTdHJpbmcIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaN4BTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwOS4wLjAuMCBTYWZhcmkvNTM3LjM2BmNmZwhza2V5CnN0eXBlBmV4dAZ1cmwMaGVhZGVyFFVzZXItQWdlbnQGcmVzBnJlcQ5oZWFkZXJzDmNvbnRlbnQMZmlsdGVyDHJlcVVybA5qc29uU3RyCGRhdGEWY2xhc3Nlc3NBcnIOY2xhc3NlcxJmaWx0ZXJPYmoaY2F0ZWdvcmllc09iagZvbmUIY2F0ZQJlCnBhcnNlDmlzRW1wdHkQaW5jbHVkZXMSdHlwZV9uYW1lDnR5cGVfaWQQdHlwZV9waWQIcHVzaBJzdHJpbmdpZnkOZmlsdGVycw5jb25zb2xlCmRlYnVnBHt9BnRpZARwZwxleHRlbmQMdmlkZW9zID9hYz12aWRlb2xpc3QmdD0IJnBnPQhsaXN0DHZvZF9pZBB2b2RfbmFtZQ52b2RfcGljFnZvZF9yZW1hcmtzEHBhcnNlSW50CHBhZ2UScGFnZWNvdW50CmxpbWl0CnRvdGFsBGlkBnZvZCQ/YWM9dmlkZW9saXN0Jmlkcz0Qdm9kX3llYXIQdm9kX2FyZWESdm9kX2FjdG9yGHZvZF9kaXJlY3RvchZ2b2RfY29udGVudBp2b2RfcGxheV9mcm9tGHZvZF9wbGF5X3VybAhmbGFnBHdkCnF1aWNrHD9hYz1kZXRhaWwmd2Q9D6QDAaYDAQAPqAMAAQCqAwAOAAYBoAEAAAABEApLAKoDAAysAwAJrgMBCbADAgmyAwMJtAMECbYDBQG4AwYBugMHAbwDCAG+AwkBwAMKAcIDCwHEAwwBxgMNAagDDgEI6DS+AF8GAL4BXwcAvgJfCAC+A18JAL4EXwoAvgVfCwC+Bl8M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
--------------------------------------------------------------------------------
/server/source/pansou_open.js:
--------------------------------------------------------------------------------
1 | import { load, _ } from './lib/cat.js';
2 | import { log } from './lib/utils.js';
3 | import { initAli, detailContent, playContent } from './lib/ali.js';
4 |
5 | let siteKey = 'pansou';
6 | let siteType = 0;
7 | let siteUrl = 'https://www.alipansou.com';
8 | let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/;
9 |
10 | const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
11 |
12 | async function requestRaw(reqUrl, headers, redirect) {
13 | let res = await req(reqUrl, {
14 | method: 'get',
15 | headers: headers || {
16 | 'User-Agent': UA,
17 | Referer: siteUrl,
18 | },
19 | redirect: redirect,
20 | });
21 | // console.log(res)
22 | console.log('🚀 ~ requestRaw ~ res:', res);
23 | return res;
24 | }
25 |
26 | async function request(reqUrl) {
27 | let resRaw = await requestRaw(reqUrl);
28 | return resRaw.content;
29 | }
30 |
31 | // cfg = {skey: siteKey, ext: extend}
32 | async function init(cfg) {
33 | try {
34 | siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
35 | siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
36 | await initAli(cfg);
37 | } catch (e) {
38 | await log('init:' + e.message + ' line:' + e.lineNumber);
39 | }
40 | }
41 |
42 | async function home(filter) {
43 | return '{}';
44 | }
45 |
46 | async function homeVod() {}
47 |
48 | async function category(tid, pg, filter, extend) {
49 | return '{}';
50 | }
51 |
52 | async function detail(id) {
53 | try {
54 | let matches = id.match(patternAli);
55 | if (!_.isEmpty(matches)) return await detailContent(matches[0]);
56 | let url = siteUrl + id.replace('/s/', '/cv/');
57 | const data = await requestRaw(url, getHeaders(id), 0);
58 | const headers = data.headers;
59 | const resp = data.content;
60 | if (headers.hasOwnProperty('location')) {
61 | url = headers['location'].replace('/redirect?visit=', 'https://www.aliyundrive.com/s/');
62 | return await detailContent(url);
63 | } else if (!_.isEmpty(resp)) {
64 | const $ = load(resp);
65 | url = $('a:first').attr('href').replace('/redirect?visit=', 'https://www.aliyundrive.com/s/');
66 | return await detailContent(url);
67 | }
68 | return '';
69 | } catch (e) {
70 | await log('detail:' + e.message + ' line:' + e.lineNumber);
71 | }
72 | }
73 |
74 | function getHeaders(id) {
75 | return {
76 | 'User-Agent': UA,
77 | Referer: siteUrl + id,
78 | _bid: '6d14a5dd6c07980d9dc089a693805ad8',
79 | };
80 | }
81 |
82 | async function play(flag, id, flags) {
83 | try {
84 | return await playContent(flag, id, flags);
85 | } catch (e) {
86 | await log('play:' + e.message + ' line:' + e.lineNumber);
87 | }
88 | }
89 |
90 | async function search(wd, quick, pg) {
91 | if (pg <= 0) pg = 1;
92 | const limit = 10;
93 | const html = await request(siteUrl + '/search?k=' + encodeURIComponent(wd) + '&page=' + pg + '&s=0&t=-1');
94 | const $ = load(html);
95 | const items = $('van-row > a');
96 | const videos = _.map(items, (item) => {
97 | let title = $(item).find('template:first').text().trim();
98 | return {
99 | vod_id: item.attribs.href,
100 | vod_name: title,
101 | vod_pic: 'https://inews.gtimg.com/newsapp_bt/0/13263837859/1000',
102 | };
103 | });
104 | const pageCount = $('van-pagination').attr('page-count') || pg;
105 | const pgCount = parseInt(pageCount);
106 | return JSON.stringify({
107 | page: parseInt(pg),
108 | pagecount: pgCount,
109 | limit: limit,
110 | total: limit * pgCount,
111 | list: videos,
112 | });
113 | }
114 |
115 | export function __jsEvalReturn() {
116 | return {
117 | init: init,
118 | home: home,
119 | homeVod: homeVod,
120 | category: category,
121 | detail: detail,
122 | play: play,
123 | search: search,
124 | };
125 | }
126 |
--------------------------------------------------------------------------------
/server/source/sharenice_open.js:
--------------------------------------------------------------------------------
1 | // 搜索滑块验证
2 | import { load, _ } from './lib/cat.js';
3 |
4 | let key = '短视频';
5 | let HOST = 'http://www.sharenice.net';
6 | let siteKey = '';
7 | let siteType = 0;
8 | let PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36';
9 |
10 | async function request(reqUrl, agentSp) {
11 | let res = await req(reqUrl, {
12 | method: 'get',
13 | headers: {
14 | 'User-Agent': agentSp || PC_UA,
15 | },
16 | });
17 | return res.content;
18 | }
19 |
20 | async function init(cfg) {
21 | siteKey = cfg.skey;
22 | siteType = cfg.stype;
23 | }
24 |
25 | function clsjoin(cls) {
26 | _.each(cls, (s) => {
27 | let typeId = s.attribs['href'];
28 | typeId = typeId.substring(typeId.lastIndexOf('t/') + 2);
29 | classes.push({
30 | type_id: typeId,
31 | type_name: s.children[0].data,
32 | });
33 | });
34 | }
35 |
36 | let classes = [];
37 | async function home(filter) {
38 | let filterObj = {};
39 | let html = await request(HOST);
40 | let $ = load(html);
41 | let series = $('div.nav > ul > li > a[href*=net/]');
42 | let tag = $('div.hot-tags-list > a[href*=net]');
43 | clsjoin(series);
44 | clsjoin(tag);
45 | return JSON.stringify({
46 | class: classes,
47 | filters: filterObj,
48 | });
49 | }
50 |
51 | async function homeVod() {
52 | let link = HOST + '/t-576O5aWz';
53 | let html = await request(link);
54 | let $ = load(html);
55 | let items = $('div.item-box ul li');
56 | let videos = _.map(items, (item) => {
57 | let a = $(item).find('a:first')[0];
58 | let img = $(item).find('img:first')[0];
59 | return {
60 | vod_id: a.attribs.href,
61 | vod_name: a.attribs.title,
62 | vod_pic: img.attribs['data-original'],
63 | vod_remarks: '',
64 | };
65 | });
66 | return JSON.stringify({
67 | list: videos,
68 | });
69 | }
70 |
71 | async function category(tid, pg, filter, extend) {
72 | if (pg <= 0 || typeof(pg) == 'undefined') pg = 1;
73 | let link = HOST + '/' + tid + '?page=' + pg;
74 | let html = await request(link);
75 | let $ = load(html);
76 | let items = $('div.item-box ul li');
77 | let videos = _.map(items, (item) => {
78 | let a = $(item).find('a:first')[0];
79 | let img = $(item).find('img:first')[0];
80 | return {
81 | vod_id: a.attribs.href,
82 | vod_name: a.attribs.title,
83 | vod_pic: img.attribs['data-original'],
84 | vod_remarks: '',
85 | };
86 | });
87 | let hasMore = $('ul.pagination > li > a:contains(»)').length > 0;
88 | let pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
89 | return JSON.stringify({
90 | page: parseInt(pg),
91 | pagecount: pgCount,
92 | limit: 16,
93 | total: 16 * pgCount,
94 | list: videos,
95 | });
96 | }
97 |
98 | async function detail(id) {
99 | let vod = {
100 | vod_id: id,
101 | vod_remarks: '',
102 | };
103 | let playlist = ['观看视频' + '$' + id];
104 | vod.vod_play_from = '道长在线';
105 | vod.vod_play_url = playlist.join('#');
106 | return JSON.stringify({
107 | list: [vod],
108 | });
109 | }
110 |
111 | async function play(flag, id, flags) {
112 | let html = await request(id);
113 | let $ = load(html);
114 | let playUrl = $('div.video-play-box').find('video:first')[0].attribs.src + '#.mp4';
115 | return JSON.stringify({
116 | parse: 0,
117 | url: playUrl,
118 | });
119 | }
120 |
121 | async function search(wd, quick, pg) {
122 | return '{}';
123 | }
124 |
125 | export function __jsEvalReturn() {
126 | return {
127 | init: init,
128 | home: home,
129 | homeVod: homeVod,
130 | category: category,
131 | detail: detail,
132 | play: play,
133 | search: search,
134 | };
135 | }
--------------------------------------------------------------------------------
/server/source/bookan_book_open.js:
--------------------------------------------------------------------------------
1 | import { _ } from './lib/cat.js';
2 |
3 | let key = 'bookan';
4 | let url = 'https://api.bookan.com.cn';
5 | let siteKey = '';
6 | let siteType = 0;
7 |
8 | async function request(reqUrl, agentSp) {
9 | let res = await req(reqUrl, {
10 | method: 'get',
11 | });
12 | return res.content;
13 | }
14 |
15 | // cfg = {skey: siteKey, ext: extend}
16 | async function init(cfg) {
17 | siteKey = cfg.skey;
18 | siteType = cfg.stype;
19 | }
20 |
21 | async function home(filter) {
22 | return JSON.stringify({
23 | class: [
24 | { type_id: '1305', type_name: '少年读物' },
25 | { type_id: '1304', type_name: '儿童文学' },
26 | { type_id: '1320', type_name: '国学经典' },
27 | { type_id: '1306', type_name: '文艺少年' },
28 | { type_id: '1309', type_name: '育儿心经' },
29 | { type_id: '1310', type_name: '心理哲学' },
30 | { type_id: '1307', type_name: '青春励志' },
31 | { type_id: '1312', type_name: '历史小说' },
32 | { type_id: '1303', type_name: '故事会' },
33 | { type_id: '1317', type_name: '音乐戏剧' },
34 | { type_id: '1319', type_name: '相声评书' },
35 | ],
36 | });
37 | }
38 |
39 | async function category(tid, pg, filter, extend) {
40 | pg = pg || 1;
41 | if (pg == 0) pg = 1;
42 | let content = await request(`${url}/voice/book/list?instance_id=25304&page=${pg}&category_id=${tid}&num=24`);
43 | let data = JSON.parse(content).data;
44 | let books = [];
45 | for (const book of data.list) {
46 | books.push({
47 | book_id: book.id,
48 | book_name: book.name,
49 | book_pic: book.cover,
50 | book_remarks: book.extra.author,
51 | });
52 | }
53 | return JSON.stringify({
54 | page: data.current_page,
55 | pagecount: data.last_page,
56 | limit: 24,
57 | total: data.total,
58 | list: books,
59 | });
60 | }
61 |
62 | async function detail(id) {
63 | let content = await request(`${url}/voice/album/units?album_id=${id}&page=1&num=200&order=1`);
64 | let data = JSON.parse(content).data;
65 |
66 | let book = {
67 | book_id: id,
68 | type_name: '',
69 | book_year: '',
70 | book_area: '',
71 | book_remarks: '',
72 | book_actor: '',
73 | book_director: '',
74 | book_content: '',
75 | };
76 | let us = _.map(data.list, function (b) {
77 | return formatPlayUrl(b.title) + '$' + b.file;
78 | }).join('#');
79 | book.volumes = '书卷';
80 | book.urls = us;
81 |
82 | return JSON.stringify({
83 | list: [book],
84 | });
85 | }
86 |
87 | function formatPlayUrl(name) {
88 | return name
89 | .trim()
90 | .replace(/<|>|《|》/g, '')
91 | .replace(/\$|#/g, ' ')
92 | .trim();
93 | }
94 |
95 | async function proxy(segments, headers) {}
96 |
97 | async function play(flag, id, flags) {
98 | return JSON.stringify({
99 | parse: 0,
100 | url: id,
101 | });
102 | }
103 |
104 | async function search(wd, quick, pg) {
105 | pg = pg || 1;
106 | if (pg == 0) pg = 1;
107 | let content = await request(`https://es.bookan.com.cn/api/v3/voice/book?instanceId=25304&keyword=${wd}&pageNum=${pg}&limitNum=20`);
108 | let data = JSON.parse(content).data;
109 | let books = [];
110 | for (const book of data.list) {
111 | books.push({
112 | book_id: book.id,
113 | book_name: book.name,
114 | book_pic: book.cover,
115 | book_remarks: book.extra.author,
116 | });
117 | }
118 | return JSON.stringify({
119 | page: data.current_page,
120 | pagecount: data.last_page,
121 | limit: 20,
122 | total: data.total,
123 | list: books,
124 | });
125 | }
126 |
127 | export function __jsEvalReturn() {
128 | return {
129 | init: init,
130 | home: home,
131 | category: category,
132 | detail: detail,
133 | play: play,
134 | search: search,
135 | };
136 | }
137 |
--------------------------------------------------------------------------------
/server/source/pansearch_open.js:
--------------------------------------------------------------------------------
1 | import { load, _ } from './lib/cat.js';
2 | import { log } from './lib/utils.js';
3 | import { initAli, detailContent, playContent } from './lib/ali_readable.js';
4 |
5 | let siteKey = 'pansearch';
6 | let siteType = 0;
7 | let siteUrl = 'https://www.pansearch.me';
8 | let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/;
9 |
10 | const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
11 |
12 | async function requestRaw(reqUrl, headers) {
13 | let res = await req(reqUrl, {
14 | method: 'get',
15 | headers: headers || {
16 | 'User-Agent': UA,
17 | Referer: siteUrl,
18 | },
19 | });
20 | return { content: JSON.stringify(res.content) };
21 | }
22 |
23 | async function request(reqUrl) {
24 | let resRaw = await requestRaw(reqUrl);
25 | return resRaw.content;
26 | }
27 |
28 | // cfg = {skey: siteKey, ext: extend}
29 | async function init(cfg) {
30 | try {
31 | siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
32 | siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
33 | await initAli(cfg);
34 | } catch (e) {
35 | await log('init:' + e.message + ' line:' + e.lineNumber);
36 | }
37 | }
38 |
39 | async function home(filter) {
40 | return '{}';
41 | }
42 |
43 | async function homeVod() {}
44 |
45 | async function category(tid, pg, filter, extend) {
46 | return '{}';
47 | }
48 |
49 | async function detail(id) {
50 | console.log('🚀 ~ detail ~ id:', id);
51 | try {
52 | let matches = id.match(patternAli);
53 | if (!_.isEmpty(matches)) return await detailContent(matches[0]);
54 | return '';
55 | } catch (e) {
56 | await log('detail:' + e.message + ' line:' + e.lineNumber);
57 | }
58 | }
59 |
60 | async function play(flag, id, flags) {
61 | try {
62 | return await playContent(flag, id, flags);
63 | } catch (e) {
64 | await log('play:' + e.message + ' line:' + e.lineNumber);
65 | }
66 | }
67 |
68 | async function search(wd, quick, pg) {
69 | if (pg <= 0) pg = 1;
70 | const limit = 20;
71 | let offsetParam = '';
72 | const offset = (pg - 1) * limit;
73 | if (offset > 0) {
74 | offsetParam = '&offset=' + offset;
75 | }
76 | const html = await request(siteUrl);
77 | const $ = load(jsonParse(html));
78 | const script = $('script#__NEXT_DATA__')[0];
79 | const data = script.children[0].data;
80 | const buildId = jsonParse(data).buildId;
81 | const url = siteUrl + '/_next/data/' + buildId + '/search.json?keyword=' + encodeURIComponent(wd) + offsetParam + '&pan=aliyundrive';
82 | const result = await requestRaw(url, getSearchHeader());
83 | const json = jsonParse(result.content).pageProps.data;
84 | const total = json.total;
85 | const videoIdSet = new Set();
86 | const videos = [];
87 | for (const item of json.data) {
88 | const content = item.content;
89 | const img = item.image || siteUrl + '/favicon.png';
90 | const splits = content.split('\n');
91 | if (_.isEmpty(splits)) continue;
92 | if (content.includes('1、')) {
93 | for (const line of splits) {
94 | if (_.isEmpty(line)) continue;
95 | const vodId = parseVideo(line, videoIdSet);
96 | if (!vodId) continue;
97 | videos.push({
98 | vod_id: vodId,
99 | vod_name: line
100 | .replaceAll(/<\/?[^>]+>/g, '')
101 | .replace(/[0-9]*、/g, '')
102 | .replace(/:http.*/g, ''),
103 | vod_pic: img,
104 | vod_remarks: item.time,
105 | });
106 | }
107 | } else {
108 | const vodId = parseVideo(content, videoIdSet);
109 | if (!vodId) continue;
110 | videos.push({
111 | vod_id: vodId,
112 | vod_name: splits[0].replaceAll(/<\/?[^>]+>/g, '').replace('名称:', ''),
113 | vod_pic: img,
114 | vod_remarks: item.time,
115 | });
116 | }
117 | }
118 | const pgCount = parseInt(total / limit) + 1;
119 | return JSON.stringify({
120 | page: parseInt(pg),
121 | pagecount: pgCount,
122 | limit: limit,
123 | total: total,
124 | list: videos,
125 | });
126 | }
127 |
128 | function parseVideo(content, videoIdSet) {
129 | const matches = content.match(patternAli);
130 | if (_.isEmpty(matches)) return;
131 | const vodId = matches[1];
132 | if (videoIdSet.has(vodId)) return;
133 | videoIdSet.add(vodId);
134 | return vodId;
135 | }
136 |
137 | function getSearchHeader() {
138 | return {
139 | 'x-nextjs-data': '1',
140 | Referer: siteUrl,
141 | };
142 | }
143 |
144 | export function __jsEvalReturn() {
145 | return {
146 | init: init,
147 | home: home,
148 | homeVod: homeVod,
149 | category: category,
150 | detail: detail,
151 | play: play,
152 | search: search,
153 | };
154 | }
155 |
--------------------------------------------------------------------------------
/server/source/tuxiaobei_open.js:
--------------------------------------------------------------------------------
1 | import { load, _ } from './lib/cat.js';
2 | let key = '🐰兔小贝';
3 | let HOST = 'https://www.tuxiaobei.com';
4 | let siteKey = '';
5 | let siteType = 0;
6 | const IOS_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
7 |
8 | async function request(reqUrl, agentSp) {
9 | let res = await req(reqUrl, {
10 | method: 'get',
11 | headers: {
12 | 'User-Agent': agentSp || IOS_UA,
13 | },
14 | });
15 | return res.content
16 | }
17 |
18 | async function init(cfg) {
19 | siteKey = cfg.skey;
20 | siteType = cfg.stype
21 | }
22 |
23 | async function home(filter) {
24 | const classes = [{ type_id: '', type_name: '🐰全部' }, { type_id: 2, type_name: '🐰儿歌' }, { type_id: 3, type_name: '🐰故事' }, { type_id: 27, type_name: '🐰公益' }, { type_id: 9, type_name: '🐰十万个为什么' }, { type_id: 28, type_name: '🐰安全教育' }, { type_id: 29, type_name: '🐰动物奇缘' }, { type_id: 7, type_name: '🐰弟子规' }, { type_id: 5, type_name: '🐰古诗' }, { type_id: 6, type_name: '🐰三字经' }, { type_id: 8, type_name: '🐰千字文' }, { type_id: 11, type_name: '🐰数学' }, { type_id: 25, type_name: '🐰英语' }, { type_id: 24, type_name: '🐰折纸' }];
25 | const filterObj = {};
26 | return JSON.stringify({
27 | class: _.map(classes, (cls) => {
28 | cls.land = 1;
29 | cls.ratio = 1.78;
30 | return cls;
31 | }),
32 | filters: filterObj,
33 | })
34 | }
35 |
36 | async function homeVod() {
37 | const link = await request(HOST + '/list/mip-data?typeId=9&page=1&callback=');
38 | const html = link.match(/\((.*?)\);/)[1];
39 | const data = JSON.parse(html).data;
40 | let videos = _.map(data.items, (it) => {
41 | return {
42 | vod_id: it.video_id,
43 | vod_name: it.name,
44 | vod_pic: it.image,
45 | vod_remarks: it.root_category_name + ' | ' + it.duration_string || '',
46 | }
47 | });
48 | return JSON.stringify({
49 | list: videos,
50 | })
51 | }
52 |
53 | async function category(tid, pg, filter, extend) {
54 | if (pg <= 0 || typeof pg == 'undefined') pg = 1;
55 | const link = await request(HOST + '/list/mip-data?typeId=' + tid + '&page=' + pg + '&callback=');
56 | const html = link.match(/\((.*?)\);/)[1];
57 | const data = JSON.parse(html).data;
58 | let videos = _.map(data.items, (it) => {
59 | return {
60 | vod_id: it.video_id,
61 | vod_name: it.name,
62 | vod_pic: it.image,
63 | vod_remarks: it.root_category_name + ' | ' + it.duration_string || '',
64 | }
65 | });
66 | const pgCount = pg * 30 > data.totalCount ? parseInt(pg) : parseInt(pg) + 1;
67 | return JSON.stringify({
68 | page: parseInt(pg),
69 | pagecount: pgCount,
70 | limit: 30,
71 | total: data.totalCount,
72 | list: videos,
73 | })
74 | }
75 |
76 | async function detail(id) {
77 | const vod = {
78 | vod_id: id,
79 | vod_remarks: '',
80 | };
81 | const playlist = ['点击播放' + '$' + HOST + '/play/' + id];
82 | vod.vod_play_from = "道长在线";
83 | vod.vod_play_url = playlist.join('#');
84 | return JSON.stringify({
85 | list: [vod],
86 | });
87 | }
88 |
89 | async function play(flag, id, flags) {
90 | const html = await request(id);
91 | const $ = load(html);
92 | const pvideo = $("body mip-search-video[video-src*=http]");
93 | const purl = pvideo[0].attribs['video-src'];
94 | // console.debug('兔小贝 purl =====>' + purl); // js_debug.log
95 | return JSON.stringify({
96 | parse: 0,
97 | url: purl,
98 | });
99 | }
100 |
101 | async function search(wd, quick) {
102 | const link = HOST + "/search/" + wd;
103 | const html = await request(link);
104 | const $ = load(html);
105 | const list = $("div.list-con > div.items");
106 | let videos = _.map(list, (it) => {
107 | const a = $(it).find("a:first")[0];
108 | const img = $(it).find("mip-img:first")[0];
109 | const tt = $(it).find("p:first")[0];
110 | const remarks = $(it).find("p")[1];
111 | return {
112 | vod_id: a.attribs.href.replace(/.*?\/play\/(.*)/g, '$1'),
113 | vod_name: tt.children[0].data,
114 | vod_pic: img.attribs["src"],
115 | vod_remarks: remarks.children[0].data || "",
116 | };
117 | });
118 | return JSON.stringify({
119 | list: videos,
120 | land: 1,
121 | ratio: 1.78,
122 | });
123 | }
124 |
125 | export function __jsEvalReturn() {
126 | return {
127 | init: init,
128 | home: home,
129 | homeVod: homeVod,
130 | category: category,
131 | detail: detail,
132 | play: play,
133 | search: search,
134 | }
135 | }
--------------------------------------------------------------------------------
/server/source/ubestkid_open.js:
--------------------------------------------------------------------------------
1 | // 无搜索功能
2 | import { _ } from './lib/cat.js';
3 | let key = '🐯贝乐虎';
4 | let HOST = 'https://vd.ubestkid.com';
5 | let siteKey = '';
6 | let siteType = 0;
7 | const MOBILE_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
8 |
9 | async function request(reqUrl, referer, mth, data, hd) {
10 | const headers = {
11 | "User-Agent": MOBILE_UA,
12 | };
13 | if (referer) headers.referer = encodeURIComponent(referer);
14 | let res = await req(reqUrl, {
15 | method: mth || "get",
16 | headers: headers,
17 | data: data,
18 | postType: mth === "post" ? "json" : "",
19 | });
20 | return res.content;
21 | }
22 |
23 | async function init(cfg) {
24 | siteKey = cfg.skey;
25 | siteType = cfg.stype
26 | }
27 |
28 | async function home(filter) {
29 | const classes = [{ type_id: 65, type_name: '🐯最新上架' }, { type_id: 113, type_name: '🐯人气热播' }, { type_id: 56, type_name: '🐯经典童谣' }, { type_id: 137, type_name: '🐯开心贝乐虎' }, { type_id: 53, type_name: '🐯律动儿歌' }, { type_id: 59, type_name: '🐯经典儿歌' }, { type_id: 101, type_name: '🐯超级汽车1' }, { type_id: 119, type_name: '🐯超级汽车第二季' }, { type_id: 136, type_name: '🐯超级汽车第三季' }, { type_id: 95, type_name: '🐯三字经' }, { type_id: 133, type_name: '🐯幼儿手势舞' }, { type_id: 117, type_name: '🐯哄睡儿歌' }, { type_id: 70, type_name: '🐯英文儿歌' }, { type_id: 116, type_name: '🐯节日与节气' }, { type_id: 97, type_name: '🐯恐龙世界' }, { type_id: 55, type_name: '🐯动画片儿歌' }, { type_id: 57, type_name: '🐯流行歌曲' }, { type_id: 118, type_name: '🐯贝乐虎入园记' }, { type_id: 106, type_name: '🐯贝乐虎大百科' }, { type_id: 62, type_name: '🐯经典古诗' }, { type_id: 63, type_name: '🐯经典故事' }, { type_id: 128, type_name: '🐯萌虎学功夫' }, { type_id: 100, type_name: '🐯绘本故事' }, { type_id: 121, type_name: '🐯开心贝乐虎英文版' }, { type_id: 96, type_name: '🐯嗨贝乐虎情商动画' }, { type_id: 108, type_name: '🐯动物音乐派对' }, { type_id: 126, type_name: '🐯动物音乐派对英文版' }, { type_id: 105, type_name: '🐯奇妙的身体' }, { type_id: 124, type_name: '🐯奇妙的身体英文版' }, { type_id: 64, type_name: '🐯认知卡片' }, { type_id: 109, type_name: '🐯趣味简笔画' }, { type_id: 78, type_name: '🐯数字儿歌' }, { type_id: 120, type_name: '🐯识字体验版' }, { type_id: 127, type_name: '🐯启蒙系列体验版' }];
30 | const filterObj = {};
31 | return JSON.stringify({
32 | class: _.map(classes, (cls) => {
33 | cls.land = 1;
34 | cls.ratio = 1.78;
35 | return cls;
36 | }),
37 | filters: filterObj,
38 | })
39 | }
40 |
41 | async function homeVod() {
42 | const link = HOST + "/api/v1/bv/video";
43 | const pdata = { age: 1, appver: "6.1.9", egvip_status: 0, svip_status: 0, vps: 60, subcateId: 56, "p": 1 };
44 | const jo = JSON.parse(await request(link, "", "post", pdata)).result;
45 | const videos = [];
46 | _.each(jo.items, (it) => {
47 | videos.push({
48 | vod_id: it.url,
49 | vod_name: it.title,
50 | vod_pic: it.image,
51 | vod_remarks: '👀' + it.viewcount || '',
52 | })
53 | });
54 | return JSON.stringify({
55 | list: videos,
56 | })
57 | }
58 |
59 | async function category(tid, pg, filter, extend) {
60 | if (pg <= 0 || typeof pg == 'undefined') pg = 1;
61 | const link = HOST + "/api/v1/bv/video";
62 | const pdata = { age: 1, appver: "6.1.9", egvip_status: 0, svip_status: 0, vps: 60, subcateId: tid, "p": pg };
63 | const jo = JSON.parse(await request(link, "", "post", pdata)).result;
64 | const videos = [];
65 | _.each(jo.items, (it) => {
66 | videos.push({
67 | vod_id: it.url,
68 | vod_name: it.title,
69 | vod_pic: it.image,
70 | vod_remarks: '👀' + it.viewcount || '',
71 | })
72 | });
73 | const pgCount = pg * 60 > jo.total ? parseInt(pg) : parseInt(pg) + 1;
74 | return JSON.stringify({
75 | page: parseInt(pg),
76 | pagecount: pgCount,
77 | limit: 60,
78 | total: jo.total,
79 | list: videos,
80 | })
81 | }
82 |
83 | async function detail(id) {
84 | const vod = {
85 | vod_id: id,
86 | vod_remarks: '',
87 | };
88 | const playlist = ['点击播放' + '$' + id];
89 | vod.vod_play_from = "道长在线";
90 | vod.vod_play_url = playlist.join('#');
91 | return JSON.stringify({
92 | list: [vod],
93 | });
94 | }
95 |
96 | async function play(flag, id, flags) {
97 | // console.debug('贝乐虎 id =====>' + id); // js_debug.log
98 | return JSON.stringify({
99 | parse: 0,
100 | url: id,
101 | });
102 | }
103 |
104 | async function search(wd, quick) {
105 | return '{}'
106 | }
107 |
108 | export function __jsEvalReturn() {
109 | return {
110 | init: init,
111 | home: home,
112 | homeVod: homeVod,
113 | category: category,
114 | detail: detail,
115 | play: play,
116 | search: search,
117 | }
118 | }
--------------------------------------------------------------------------------
/server/source/wogg_open.js:
--------------------------------------------------------------------------------
1 | import { load, _, Uri } from './lib/cat.js';
2 | import { log } from './lib/utils.js';
3 | import { initAli, detailContent, playContent } from './lib/ali.js';
4 |
5 | let siteKey = 'wogg';
6 | let siteType = 0;
7 | let siteUrl = 'https://wogg.xyz';
8 | let UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
9 | let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/;
10 |
11 | async function init(cfg) {
12 | try {
13 | siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
14 | siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
15 | await initAli(cfg);
16 | } catch (e) {
17 | await log('init:' + e.message + ' line:' + e.lineNumber);
18 | }
19 | }
20 |
21 | async function request(reqUrl, agentSp) {
22 | let header = {
23 | 'user-agent': agentSp || 'okhttp/3.12.0',
24 | };
25 | let uri = new Uri(reqUrl);
26 | let res = await req(uri.toString(), {
27 | headers: header,
28 | timeout: 10000,
29 | });
30 |
31 | let content = res.content;
32 | return content;
33 | }
34 |
35 | function getHeader() {
36 | let header = {};
37 | header['User-Agent'] = UA;
38 | return header;
39 | }
40 |
41 | async function getString(url) {
42 | let res = await req(url, {
43 | headers: getHeader(),
44 | });
45 | return res.content;
46 | }
47 |
48 | let classes = [
49 | { type_id: 1, type_name: '电影' },
50 | { type_id: 2, type_name: '电视剧' },
51 | { type_id: 3, type_name: '动漫' },
52 | { type_id: 4, type_name: '综艺' },
53 | { type_id: 5, type_name: '音乐' },
54 | { type_id: 6, type_name: '短剧' },
55 | ];
56 | let filterObj = {};
57 | async function home(filter) {
58 | return JSON.stringify({
59 | class: classes,
60 | filters: filterObj,
61 | });
62 | }
63 |
64 | async function homeVod() {
65 | return '{}';
66 | }
67 |
68 | async function category(tid, pg, filter, extend) {
69 | let reqUrl = siteUrl + '/index.php/vodshow/' + tid + '--------' + pg + '---.html';
70 | let con = await request(reqUrl, UA);
71 | const $ = load(con);
72 | let items = $('.module:eq(0) > .module-list > .module-items > .module-item');
73 | let videos = [];
74 | for (var item of items) {
75 | let oneA = $(item).find('.module-item-cover .module-item-pic a').first();
76 | let href = oneA.attr('href');
77 | let name = oneA.attr('title');
78 | let oneImg = $(item).find('.module-item-cover .module-item-pic img').first();
79 | let pic = oneImg.attr('data-src');
80 | let remark = $(item).find('.module-item-text').first().text();
81 | videos.push({
82 | vod_id: href,
83 | vod_name: name,
84 | vod_pic: pic,
85 | vod_remarks: remark,
86 | });
87 | }
88 |
89 | const hasMore = $('#page > a:contains(下一页)').length > 0;
90 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
91 | return JSON.stringify({
92 | page: parseInt(pg),
93 | pagecount: pgCount,
94 | limit: 72,
95 | total: 72 * pgCount,
96 | list: videos,
97 | });
98 | }
99 |
100 | async function detail(id) {
101 | try {
102 | await log('detail:id:---' + id);
103 | let preMatches = id.match(patternAli);
104 | if (!_.isEmpty(preMatches)) return await detailContent(preMatches[1]);
105 | let url = siteUrl + id;
106 | let aliUrl = await getString(url);
107 | let matches = aliUrl.match(patternAli);
108 | console.log('detailmatche---');
109 | console.log(matches[1]);
110 | if (!_.isEmpty(matches)) return await detailContent(matches[1]);
111 | return '';
112 | } catch (e) {
113 | await log('detail:' + e.message + ' line:' + e.lineNumber);
114 | }
115 | }
116 |
117 | async function play(flag, id, flags) {
118 | try {
119 | return await playContent(flag, id, flags);
120 | } catch (e) {
121 | await log('play:' + e.message + ' line:' + e.lineNumber);
122 | }
123 | }
124 |
125 | async function search(wd, quick) {
126 | await log('search---' + wd);
127 | let searchUrl = siteUrl + '/index.php/vodsearch/-------------.html?wd=' + wd;
128 | let html = await getString(searchUrl);
129 | let $ = load(html);
130 | let items = $('.module-search-item');
131 | let videos = [];
132 | for (var item of items) {
133 | let vodId = $(item).find('.video-serial')[0].attribs.href;
134 | let name = $(item).find('.video-serial')[0].attribs.title;
135 | let pic = $(item).find('.module-item-pic > img')[0].attribs['data-src'];
136 | let remark = '';
137 | videos.push({
138 | vod_id: vodId,
139 | vod_name: name,
140 | vod_pic: pic,
141 | vod_remarks: remark,
142 | });
143 | }
144 | return JSON.stringify({
145 | list: videos,
146 | });
147 | }
148 |
149 | export function __jsEvalReturn() {
150 | return {
151 | init: init,
152 | home: home,
153 | homeVod: homeVod,
154 | category: category,
155 | detail: detail,
156 | play: play,
157 | search: search,
158 | };
159 | }
160 |
--------------------------------------------------------------------------------
/server/source/douyu_bytecode.js:
--------------------------------------------------------------------------------
1 | //bbQ0FUT1CjARpkb3V5dV9vcGVuLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4CXwZrZXkISE9TVA5zaXRlS2V5EHNpdGVUeXBlBFVBDnJlcXVlc3QIcG9zdAhpbml0CGhvbWUOaG9tZVZvZBBjYXRlZ29yeQxkZXRhaWwIcGxheQxzZWFyY2gaZGVjb2RlVW5pY29kZQpkb3V5dSZodHRwczovL20uZG91eXUuY29t8gFNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xNV83KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvOTEuMC40NDcyLjExNCBTYWZhcmkvNTM3LjM2DHJlcVVybAR1YQxidWZmZXIGcmVzBnJlcQxtZXRob2QUVXNlci1BZ2VudA5oZWFkZXJzDmNvbnRlbnQQcG9zdERhdGEQcG9zdHR5cGUIZGF0YRBwb3N0VHlwZQZjZmcIc2tleQpzdHlwZQxmaWx0ZXIOY2xhc3NlcxJmaWx0ZXJPYmoIdHlwZRB0eXBlTmFtZQx0eXBlSWQUZmlsdGVyRGF0YQh0YWdzAmUKcGFyc2UcL2FwaS9jYXRlL2xpc3QSY2F0ZTFJbmZvEmNhdGUxTmFtZQcfZr9Sm1ISc2hvcnROYW1lCHB1c2gOdHlwZV9pZBJ0eXBlX25hbWUSY2F0ZTJJbmZvDGNhdGVJZAUGUnt8Bm1hcAJ2DmNvbnNvbGUKZGVidWceZmlsdGVyT2JqID09PT4gEnN0cmluZ2lmeQ5maWx0ZXJzAngOY2F0ZTFJZAJuEmNhdGUyTmFtZQZjbHMIbGFuZApyYXRpbwRKbwx2aWRlb3MaL2FwaS9ob21lL21peAhsaXN0BGl0BnJpZAx2b2RfaWQQcm9vbU5hbWUQdm9kX25hbWUOcm9vbVNyYw52b2RfcGljBT3YQdwEaG4DADAFPNiZ3RBuaWNrbmFtZRZ2b2RfcmVtYXJrcwZ0aWQEcGcMZXh0ZW5kCGxpbmsoL2FwaS9yb29tL2xpc3Q/cGFnZT0MJnR5cGU9EHBhcnNlSW50CHBhZ2UScGFnZUNvdW50EnBhZ2Vjb3VudApsaW1pdAp0b3RhbARpZAZ2b2QOcGxheXVybBJwbGF5TGlzdHOGAWh0dHA6Ly9saXZlLnlqMTIxMS53b3JrL2FwaS9saXZlL2dldFJvb21JbmZvP3BsYXRmb3JtPWRvdXl1JnJvb21JZD0Mcm9vbUlkDnJvb21QaWMHPdgf3CAAGGNhdGVnb3J5TmFtZRB2b2RfdHlwZRM92DDdcgBvAG8AbQBJAGQAIAAPPdhl3ChXv366TnBlIAAMb25saW5lEnZvZF9hY3Rvcgc82JndIAASb3duZXJOYW1lGHZvZF9kaXJlY3Rvcgs82PfftnIBYCAADGlzTGl2ZQljayhX9HatZAcqZwBfrWQWdm9kX2NvbnRlbnRqaHR0cDovL2xpdmUueWoxMjExLndvcmsvYXBpL2xpdmUvZ2V0UmVhbFVybD9wbGF0Zm9ybT0QcGxhdEZvcm0QJnJvb21JZD0Ia2V5cw5mb3JFYWNoC5dlfJzjiZBnMQAKdGl0bGU4aHR0cDovL2VwZy4xMTIxMTQueHl6L2RvdXl1LwZ1cmwLl2V8nOOJkGcyAEZodHRwczovL3d3dy5hb2lzLmV1Lm9yZy9saXZlL2RvdXl1LwuXZXyc44mQZzMAQGh0dHBzOi8vd3d3Lmdvb2RpcHR2LmNsdWIvZG91eXUvC5dlfJzjiZBnNABSaHR0cDovL21hb21hby5rYW5kaWFudHYuY24vZG91eXUxLnBocD9pZD0Ll2V8nOOJkGc1AHRodHRwczovL2dldHBsYXl1cmwubG10ZWFtLnJlcGwuY28vbGl2ZT9wbGF0Zm9ybT1kb3V5dSZyaWQ9CVOQf5UoV79+GnZvZF9wbGF5X2Zyb20CIxh2b2RfcGxheV91cmwIdGVzdBBKdXN0TGl2ZQIkCGZsYWcEd2QKcXVpY2sQZGF0YVBvc3QIanNvbigvYXBpL3NlYXJjaC9saXZlUm9vbUAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUwMQZkaWQMb2Zmc2V0BHNrCGZvcm0Gc3RyDnJlcGxhY2UCJRB1bmVzY2FwZQ+kAwGmAwEAEKgDAAEAqgMADgAGAaABAAAAARELVgCqAwAMrAMACa4DAQmwAwIJsgMDCbQDBA22AwUBuAMGAboDBwG8AwgBvgMJAcADCgHCAwsBxAMMAcYDDQHIAw4BqAMPAQjoOb4AXwYAvgFfBwC+Al8IAL4DXwkA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
--------------------------------------------------------------------------------
/server/source/kuqimv_open.js:
--------------------------------------------------------------------------------
1 | // 修正:分类改静态 (网站频繁变动分类)
2 | import { load, _ } from "assets://js/lib/cat.js";
3 |
4 | let key = "酷奇MV";
5 | let HOST = "https://www.kuqimv.com";
6 | let siteKey = "";
7 | let siteType = 0;
8 | const PC_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36";
9 |
10 | async function request(reqUrl, referer, mth, data, hd) {
11 | const headers = {
12 | "User-Agent": PC_UA,
13 | };
14 | if (referer) headers.referer = encodeURIComponent(referer);
15 | let res = await req(reqUrl, {
16 | method: mth || "get",
17 | headers: headers,
18 | data: data,
19 | postType: mth === "post" ? "form" : "",
20 | });
21 | return res.content;
22 | }
23 |
24 | async function init(cfg) {
25 | siteKey = cfg.skey;
26 | siteType = cfg.stype;
27 | }
28 |
29 | async function home(filter) {
30 | var classes = [{ "type_id": "1", "type_name": "华语高清" }, { "type_id": "2", "type_name": "日韩精选" }, { "type_id": "3", "type_name": "欧美MV" }, { "type_id": "4", "type_name": "高清现场" }, { "type_id": "5", "type_name": "影视MV" }, { "type_id": "6", "type_name": "夜店视频" }, { "type_id": "7", "type_name": "车模视频" }, { "type_id": "8", "type_name": "热舞视频" }, { "type_id": "9", "type_name": "美女写真" }, { "type_id": "10", "type_name": "美女打碟" }];
31 | // const html = await request(HOST);
32 | // const $ = load(html);
33 | // const class_parse = $(".lei_fl > a[href*=play]");
34 | // const classes = [];
35 | // classes = _.map(class_parse, (cls) => {
36 | // const typeId = cls.attribs["href"];
37 | // typeId = typeId.substring(typeId.lastIndexOf("/") + 1).replace(".html", "");
38 | // return {
39 | // type_id: typeId,
40 | // type_name: cls.children[0].data,
41 | // };
42 | // });
43 | const filterObj = {};
44 | return JSON.stringify({
45 | class: _.map(classes, (cls) => {
46 | cls.land = 1;
47 | cls.ratio = 1.78;
48 | return cls;
49 | }),
50 | filters: filterObj,
51 | });
52 | }
53 |
54 | async function homeVod() {
55 | const link = HOST + "/play/9_1.html";
56 | const html = await request(link);
57 | const $ = load(html);
58 | const items = $("div.mv_list > li");
59 | let videos = _.map(items, (it) => {
60 | const a = $(it).find("a:first")[0];
61 | const img = $(it).find("img:first")[0];
62 | const singer = $($(it).find("div.singer")[0]).text().trim();
63 | const remarks = $($(it).find("span.lei_03")[0]).text().trim();
64 | return {
65 | vod_id: a.attribs.href.replace(/.*?\/play\/(.*).html/g, "$1"),
66 | vod_name: a.attribs.title,
67 | vod_pic: img.attribs["src"],
68 | vod_remarks: "🎤" + singer + "|" + remarks || "",
69 | };
70 | });
71 | return JSON.stringify({
72 | list: videos,
73 | });
74 | }
75 |
76 | async function category(tid, pg, filter, extend) {
77 | if (pg <= 0 || typeof pg == "undefined") pg = 1;
78 | const link = HOST + "/play/" + tid + "_" + pg + ".html";
79 | const html = await request(link);
80 | const $ = load(html);
81 | const items = $("div.mv_list > li");
82 | let videos = _.map(items, (it) => {
83 | const a = $(it).find("a:first")[0];
84 | const img = $(it).find("img:first")[0];
85 | const singer = $($(it).find("div.singer")[0]).text().trim();
86 | const remarks = $($(it).find("span.lei_03")[0]).text().trim();
87 | return {
88 | vod_id: a.attribs.href.replace(/.*?\/play\/(.*).html/g, "$1"),
89 | vod_name: a.attribs.title,
90 | vod_pic: img.attribs["src"],
91 | vod_remarks: "🎤" + singer + "|" + remarks || "",
92 | };
93 | });
94 | const hasMore = $("div.lei_page > a:contains(下一页)").length > 0;
95 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
96 | return JSON.stringify({
97 | page: parseInt(pg),
98 | pagecount: pgCount,
99 | limit: 24,
100 | total: 24 * pgCount,
101 | list: videos,
102 | });
103 | }
104 |
105 | async function detail(id) {
106 | const vod = {
107 | vod_id: id,
108 | vod_remarks: "",
109 | };
110 | const playlist = ["观看视频" + "$" + id];
111 | vod.vod_play_from = "道长在线";
112 | vod.vod_play_url = playlist.join("#");
113 | return JSON.stringify({
114 | list: [vod],
115 | });
116 | }
117 |
118 | async function play(flag, id, flags) {
119 | const link = HOST + "/skin/kuqimv/play.php";
120 | const ref = HOST + "/play/" + id + ".html";
121 | const pdata = { id: id };
122 | const playUrl = JSON.parse(await request(link, ref, "post", pdata)).url;
123 | const headers = {
124 | Referer: HOST,
125 | };
126 | return JSON.stringify({
127 | parse: 0,
128 | url: playUrl,
129 | header: headers,
130 | });
131 | }
132 |
133 | async function search(wd, quick, pg) {
134 | if (pg <= 0 || typeof pg == "undefined") pg = 1;
135 | const link = HOST + "/search.php?key=" + wd + "&pages=" + pg;
136 | const html = await request(link);
137 | const $ = load(html);
138 | const items = $("div.video_list > li");
139 | let videos = _.map(items, (it) => {
140 | const a = $(it).find("a:first")[0];
141 | const singer = $($(it).find("div.singer")[0]).text().trim();
142 | const remarks = $($(it).find("span.lei_04")[0]).text().trim();
143 | return {
144 | vod_id: a.attribs.href.replace(/.*?\/play\/(.*).html/g, "$1"),
145 | vod_name: a.attribs.title,
146 | vod_pic: "https://www.kuqimv.com/static/images/cover/singer.jpg",
147 | vod_remarks: "🎤" + singer + "|" + remarks || "",
148 | };
149 | });
150 | const hasMore = $("div.lei_page > a:contains(>)").length > 0;
151 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
152 | return JSON.stringify({
153 | page: parseInt(pg),
154 | pagecount: pgCount,
155 | limit: 20,
156 | total: 20 * pgCount,
157 | list: videos,
158 | land: 1,
159 | ratio: 1.78,
160 | });
161 | }
162 |
163 | export function __jsEvalReturn() {
164 | return {
165 | init: init,
166 | home: home,
167 | homeVod: homeVod,
168 | category: category,
169 | detail: detail,
170 | play: play,
171 | search: search,
172 | };
173 | }
--------------------------------------------------------------------------------
/server/source/dj0898_book_open.js:
--------------------------------------------------------------------------------
1 | import { load, _ } from "./lib/cat.js";
2 |
3 | let key = "世纪DJ音乐网_book";
4 | let HOST = "http://m.dj0898.com";
5 | let siteKey = "";
6 | let siteType = 0;
7 |
8 | const MOBILE_UA = "Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36";
9 |
10 | async function request(reqUrl, agentSp) {
11 | let res = await req(reqUrl, {
12 | method: "get",
13 | headers: {
14 | "User-Agent": agentSp || MOBILE_UA,
15 | Referer: HOST,
16 | },
17 | });
18 | return res.content;
19 | }
20 |
21 | async function init(cfg) {
22 | siteKey = cfg.skey;
23 | siteType = cfg.stype;
24 | }
25 |
26 | async function home(filter) {
27 | const classes = [{ type_id: 1, type_name: "🎧串烧舞曲" }, { type_id: 2, type_name: "🎧外文舞曲" }, { type_id: 3, type_name: "🎧早场暖场" }, { type_id: 4, type_name: "🎧中文舞曲" }, { type_id: 5, type_name: "🎧其他舞曲" }, { type_id: 6, type_name: "🎧国外电音" }, { type_id: 8, type_name: "🎧慢歌连版" }, { type_id: 9, type_name: "🎧酒吧潮歌" }, { type_id: 10, type_name: "🎧中文串烧" }, { type_id: 11, type_name: "🎧外文串烧" }, { type_id: 12, type_name: "🎧中外串烧" }, { type_id: 13, type_name: "🎧车载串烧" }, { type_id: 14, type_name: "🎧越鼓串烧" }, { type_id: 40, type_name: "🎧3D/环绕" }, { type_id: 45, type_name: "🎧口水旋律" }, { type_id: 46, type_name: "🎧精品收藏" }, { type_id: 47, type_name: "🎧开场舞曲" }, { type_id: 48, type_name: "🎧印度舞曲" }, { type_id: 49, type_name: "🎧编排套曲" }, { type_id: 20, type_name: "🎧DuTch" }, { type_id: 21, type_name: "🎧Mash up" }, { type_id: 22, type_name: "🎧ClubHouse" }, { type_id: 23, type_name: "🎧ElectroHouse" }, { type_id: 24, type_name: "🎧越南鼓Dj" }, { type_id: 30, type_name: "🎧Funky" }, { type_id: 31, type_name: "🎧Reggae" }, { type_id: 32, type_name: "🎧Rnb" }, { type_id: 33, type_name: "🎧Hip Hop" }, { type_id: 34, type_name: "🎧Dubstep" }, { type_id: 8017, type_name: "🎧Hardstyle" }, { type_id: 8018, type_name: "🎧Hands Up" }];
28 | const filterObj = {};
29 | return JSON.stringify({
30 | class: _.map(classes, (cls) => {
31 | cls.land = 1;
32 | cls.ratio = 1.78;
33 | return cls;
34 | }),
35 | filters: filterObj,
36 | });
37 | }
38 |
39 | async function homeVod() {
40 | const link = HOST + "/dance/lists/id/10/1";
41 | const html = await request(link);
42 | const $ = load(html);
43 | const list = $("ul.djddv_djList > li");
44 | let videos = _.map(list, (it) => {
45 | const a = $(it).find("a")[1];
46 | const img = $(it).find("img:first")[0];
47 | const tt = $(it).find("strong:first")[0];
48 | const remarks = $(it).find("font")[5];
49 | return {
50 | vod_id: a.attribs.href,
51 | vod_name: tt.children[0].data,
52 | vod_pic: img.attribs["src"],
53 | vod_remarks: "🎵" + remarks.children[0].data || "",
54 | };
55 | });
56 | return JSON.stringify({
57 | list: videos,
58 | });
59 | }
60 |
61 | async function category(tid, pg, filter, extend) {
62 | if (pg <= 0 || typeof pg == "undefined") pg = 1;
63 | const link = HOST + "/dance/lists/id/" + tid + "/" + pg;
64 | const html = await request(link);
65 | const $ = load(html);
66 | const list = $("ul.djddv_djList > li");
67 | let videos = _.map(list, (it) => {
68 | const a = $(it).find("a")[1];
69 | const img = $(it).find("img:first")[0];
70 | const tt = $(it).find("strong:first")[0];
71 | const remarks = $(it).find("font")[5];
72 | return {
73 | book_id: a.attribs.href,
74 | book_name: tt.children[0].data,
75 | book_pic: img.attribs["src"],
76 | book_remarks: "🎵" + remarks.children[0].data || "",
77 | };
78 | });
79 | const hasMore = $("ul.page_link > li > a:contains(\u00a0)").length > 0;
80 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
81 | return JSON.stringify({
82 | page: parseInt(pg),
83 | pagecount: pgCount,
84 | limit: 60,
85 | total: 60 * pgCount,
86 | list: videos,
87 | });
88 | }
89 |
90 | async function detail(id) {
91 | const vod = {
92 | book_id: id,
93 | type_name: '',
94 | book_year: '',
95 | book_area: '',
96 | book_remarks: '',
97 | book_actor: '',
98 | book_director: '',
99 | book_content: '',
100 | };
101 | const playlist = ["点击播放" + "$" + vod.book_id];
102 | vod.volumes = "道长在线";
103 | vod.urls = playlist.join("#");
104 | return JSON.stringify({
105 | list: [vod],
106 | });
107 | }
108 |
109 | async function play(flag, id, flags) {
110 | const html = await request(id);
111 | const $ = load(html);
112 | const audio = $("body audio[src*=http]");
113 | const audioUrl = audio[0].attribs.src;
114 | // console.debug('世纪DJ音乐网 audioUrl =====>' + audioUrl); // js_debug.log
115 | return JSON.stringify({
116 | parse: 0,
117 | url: audioUrl,
118 | });
119 | }
120 |
121 | async function search(wd, quick, pg) {
122 | if (pg <= 0 || typeof pg == "undefined") pg = 1;
123 | const link = HOST + "/index.php/dance/so/key?key=" + wd + "&cid=0&p=" + pg;
124 | const html = await request(link);
125 | const $ = load(html);
126 | const list = $("ul.djddv_djList > li");
127 | let videos = _.map(list, (it) => {
128 | const a = $(it).find("a")[1];
129 | const img = $(it).find("img:first")[0];
130 | const tt = $(it).find("strong:first")[0];
131 | const remarks = $(it).find("font:first")[0];
132 | return {
133 | book_id: a.attribs.href,
134 | book_name: tt.children[0].data,
135 | book_pic: img.attribs["src"],
136 | book_remarks: "🎵" + remarks.children[0].data || "",
137 | };
138 | });
139 | const hasMore = $("ul.page_link > li > a:contains(\u00a0)").length > 0;
140 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
141 | return JSON.stringify({
142 | page: parseInt(pg),
143 | pagecount: pgCount,
144 | limit: 60,
145 | total: 60 * pgCount,
146 | list: videos,
147 | land: 1,
148 | ratio: 1.78,
149 | });
150 | }
151 |
152 | export function __jsEvalReturn() {
153 | return {
154 | init: init,
155 | home: home,
156 | homeVod: homeVod,
157 | category: category,
158 | detail: detail,
159 | play: play,
160 | search: search,
161 | };
162 | }
--------------------------------------------------------------------------------
/server/source/kkys_open.js:
--------------------------------------------------------------------------------
1 | import{Crypto,dayjs,jinja2,_}from"assets://js/lib/cat.js";let key="kkys",url="https://api1.baibaipei.com:8899",device={},siteKey="",siteType=0;async function request(reqUrl,postData,agentSp,get){var ts=dayjs().valueOf().toString(),rand=randStr(32),sign=Crypto.MD5("abcdexxxdd2daklmn25129_"+ts+"_"+rand).toString().toLowerCase(),agentSp={"user-agent":agentSp||device.ua},sign=(reqUrl.includes("baibaipei")&&(agentSp["device-id"]=device.id,agentSp["push-token"]="",agentSp.sign=sign,agentSp.time=ts,agentSp.md5=rand,agentSp.version="2.1.3",agentSp["system-model"]=device.model,agentSp["system-brand"]=device.brand,agentSp["system-version"]=device.release),await req(reqUrl,{method:get?"get":"post",headers:agentSp,data:postData||{},postType:get?"":"form"}));return sign.content}async function init(cfg){siteKey=cfg.skey,siteType=cfg.stype;cfg=await local.get(key,"device");if(0|《|》/g,"").replace(/\$|#/g," ").trim()}function jsonParse(input,json){try{let url=json.url??"";if(!(url=url.startsWith("//")?"https:"+url:url).startsWith("http"))return{};let headers=json.headers||{};var ua=(json["user-agent"]||"").trim(),referer=(0{headers[hk]||delete headers[hk]}),{header:headers,url:url}}catch(error){console.log(error)}return{}}function __jsEvalReturn(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export{__jsEvalReturn};
--------------------------------------------------------------------------------
/server/source/huya_bytecode.js:
--------------------------------------------------------------------------------
1 | //bbQ0FUT1CvARhodXlhX29wZW4uanMsYXNzZXRzOi8vanMvbGliL2NhdC5qcxxfX2pzRXZhbFJldHVybgxDcnlwdG8CXwZrZXkISE9TVA5zaXRlS2V5EHNpdGVUeXBlBFVBDnJlcXVlc3QIaW5pdAhob21lDmhvbWVWb2QQY2F0ZWdvcnkMZGV0YWlsCHBsYXkMc2VhcmNoFHJlbW92ZVRhZ3MYYmFzZTY0RW5jb2RlGGJhc2U2NERlY29kZRRnZXRSZWFsVXJsGmRlY29kZVVuaWNvZGUIaHV5YShodHRwczovL3d3dy5odXlhLmNvbfIBTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzkxLjAuNDQ3Mi4xMTQgU2FmYXJpLzUzNy4zNgxyZXFVcmwEdWEMYnVmZmVyBnJlcwZyZXEMbWV0aG9kFFVzZXItQWdlbnQOaGVhZGVycw5jb250ZW50BmNmZwhza2V5CnN0eXBlDGZpbHRlcg5jbGFzc2VzEmZpbHRlck9iagh0eXBlDHR5cGVJZAhsaW5rFGZpbHRlckRhdGEIdGFncwJlDnR5cGVfaWQFMVpQThJ0eXBlX25hbWUFUX84bgVVUzpnBUtiOG54aHR0cHM6Ly9saXZlLmNkbi5odXlhLmNvbS9saXZlY29uZmlnL2dhbWUvYnVzc0xpdmU/YnVzc1R5cGU9CnBhcnNlCGRhdGEMY2F0ZUlkBQZSe3wGbWFwAnYOY29uc29sZQpkZWJ1Zx5maWx0ZXJPYmogPT09PiASc3RyaW5naWZ5DmZpbHRlcnMCbhhnYW1lRnVsbE5hbWUGZ2lkBmNscwhsYW5kCnJhdGlvDHZpZGVvc4wBL2NhY2hlLnBocD9tPUxpdmVMaXN0JmRvPWdldExpdmVMaXN0QnlQYWdlJmdhbWVJZD0yMTY4JnRhZ0FsbD0wJnBhZ2U9MQpkYXRhcwhsaXN0BGl0BnBpYxRzY3JlZW5zaG90FHN0YXJ0c1dpdGgELy8MaHR0cHM6FnByb2ZpbGVSb29tDHZvZF9pZBhpbnRyb2R1Y3Rpb24Qdm9kX25hbWUOdm9kX3BpYwU92EHcFHRvdGFsQ291bnQJIAAgADzYmd0IbmljaxZ2b2RfcmVtYXJrcwZ0aWQEcGcMZXh0ZW5kZC9jYWNoZS5waHA/bT1MaXZlTGlzdCZkbz1nZXRMaXZlTGlzdEJ5UGFnZSZnYW1lSWQ9HiZ0YWdBbGw9MCZwYWdlPQhwYWdlEnRvdGFsUGFnZRJwYWdlY291bnQQcGFnZVNpemUKbGltaXQKdG90YWwEaWQGdm9kEHBsYXlsaXN0Cblw+1GtZD5lAiQJU5B/lShXv34adm9kX3BsYXlfZnJvbQIjGHZvZF9wbGF5X3VybAhmbGFnCGpzb24IcHVybHZodHRwczovL21wLmh1eWEuY29tL2NhY2hlLnBocD9tPUxpdmUmZG89cHJvZmlsZVJvb20mcm9vbWlkPQxzdHJlYW0GZmx2Em11bHRpTGluZQZ1cmwWTW96aWxsYS81LjAMaGVhZGVyBHdkCnF1aWNreGh0dHBzOi8vc2VhcmNoLmNkbi5odXlhLmNvbS8/bT1TZWFyY2gmZG89Z2V0U2VhcmNoQ29udGVudCZxPVomdWlkPTAmdj00JnR5cD0tNSZsaXZlc3RhdGU9MCZyb3dzPTQwJnN0YXJ0PTAQcmVzcG9uc2UIZG9jcx5nYW1lX3NjcmVlbnNob3QOcm9vbV9pZCJnYW1lX2ludHJvZHVjdGlvbiBnYW1lX3RvdGFsX2NvdW50EmdhbWVfbmljaw5yZXBsYWNlCHRleHQGZW5jDEJhc2U2NAhVdGY4EGxpdmVfdXJsAmkCYgJyAnMKY190bXAMY190bXAyCHRtcDIEZm0CdQJwAmYEbGwCdAJoAm0CPwIvBnBvcAImDmZvckVhY2gCPSRkZWNvZGVVUklDb21wb25lbnQOZ2V0VGltZQgwMDAwDHdzVGltZQZNRDUUP3dzU2VjcmV0PRAmd3NUaW1lPQYmdT0OJnNlcWlkPQZobHMIbTN1OAZ0bXAIcHVzaAZzdHICJRB1bmVzY2FwZQ+kAwGmAwEAFKgDAAIAqgMAAawDAA4ABgGgAQAAAAEVDmcAqgMADKwDAQyuAwAJsAMBCbIDAgm0AwMJtgMEDbgDBQG6AwYBvAMHAb4DCAHAAwkBwgMKAcQDCwHGAwwByAMNAcoDDgHMAw8BzgMQAdADEQGoAxIBCOhIvgBfBwC+AV8IAL4CXwkAvgNfCgC+BF8LAL4FXwwA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
--------------------------------------------------------------------------------
/server/source/boosj_open.js:
--------------------------------------------------------------------------------
1 | import { load, _ } from './lib/cat.js';
2 |
3 | let key = '童趣';
4 | let HOST = 'https://www.boosj.com';
5 | let siteKey = '';
6 | let siteType = 0;
7 |
8 | const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36';
9 |
10 | async function request(reqUrl, agentSp) {
11 | let res = await req(reqUrl, {
12 | method: 'get',
13 | headers: {
14 | 'User-Agent': agentSp || MOBILE_UA,
15 | 'Referer': HOST
16 | },
17 | });
18 | return res.content;
19 | }
20 |
21 | // cfg = {skey: siteKey, ext: extend}
22 | async function init(cfg) {
23 | siteKey = cfg.skey;
24 | siteType = cfg.stype;
25 | }
26 |
27 | async function home(filter) {
28 | const classes = [{ type_id: '', type_name: '全部' }, { type_id: 28, type_name: '辅食' }, { type_id: 582, type_name: '动画' }, { type_id: 3364, type_name: '儿童舞蹈' }, { type_id: 3366, type_name: '少儿英语' }, { type_id: 3367, type_name: '儿童歌曲' }, { type_id: 3622, type_name: '才艺' }, { type_id: 3782, type_name: '播视自制' }, { type_id: 3822, type_name: '故事' }, { type_id: 3842, type_name: '亲子教育' }, { type_id: 4402, type_name: '美术' }, { type_id: 4583, type_name: '其他' }, { type_id: 4762, type_name: '儿童游戏' }, { type_id: 4842, type_name: '识物' }, { type_id: 4843, type_name: '绘本' }, { type_id: 4844, type_name: '古诗' }, { type_id: 4845, type_name: '科普' }, { type_id: 5102, type_name: '儿童玩具' }, { type_id: 5142, type_name: '播视童趣儿童玩具' }];
29 | const filterObj = {};
30 | const jsonData = [
31 | {
32 | key: 'age',
33 | name: '年龄段',
34 | value: [
35 | { n: '全部', v: '' },
36 | { n: '6岁以上', v: '?p367=370' },
37 | { n: '3~6岁', v: '?p367=369' },
38 | { n: '0~3岁', v: '?p367=368' },
39 | ],
40 | init: '',
41 | },
42 | {
43 | key: 'by',
44 | name: '排序',
45 | value: [
46 | { n: '全部', v: '' },
47 | { n: '最新发布', v: 'lately' },
48 | { n: '最多播放', v: 'pop' },
49 | { n: '最多评论', v: 'view' },
50 | ],
51 | init: '',
52 | },
53 | ];
54 | return JSON.stringify({
55 | class: _.map(classes, (cls) => {
56 | cls.land = 1;
57 | cls.ratio = 1.78;
58 | filterObj[cls.type_id] = jsonData;
59 | return cls;
60 | }),
61 | filters: filterObj,
62 | });
63 | }
64 |
65 | async function homeVod() {
66 | const link = HOST + '/search_res_3362__3364_1_.html';
67 | const html = await request(link);
68 | const $ = load(html);
69 | const items = $('body div.bj-col4:has(h3)');
70 | let videos = _.map(items, (it) => {
71 | const a = $(it).find('a:first')[0];
72 | const img = $(it).find('img:first')[0];
73 | const remarks = $(it).find('span.played')[0];
74 | return {
75 | vod_id: a.attribs.href,
76 | vod_name: a.attribs.title,
77 | vod_pic: img.attribs['data-original'],
78 | vod_remarks: remarks.children[0].data || '',
79 | };
80 | });
81 | return JSON.stringify({
82 | list: videos,
83 | });
84 | }
85 |
86 | async function category(tid, pg, filter, extend) {
87 | if (pg <= 0 || typeof (pg) == 'undefined') pg = 1;
88 | const link = HOST + '/search_res_3362__' + tid + '_' + pg + '_' + (extend.by || '') + '.html' + (extend.age || '');
89 | const html = await request(link);
90 | const $ = load(html);
91 | const items = $('body div.bj-col4:has(h3)');
92 | let videos = _.map(items, (it) => {
93 | const a = $(it).find('a:first')[0];
94 | const img = $(it).find('img:first')[0];
95 | const remarks = $(it).find('span.played')[0];
96 | return {
97 | vod_id: a.attribs.href,
98 | vod_name: a.attribs.title,
99 | vod_pic: img.attribs['data-original'],
100 | vod_remarks: remarks.children[0].data || '',
101 | };
102 | });
103 | const hasMore = $('div.pub_paging > a:contains(下一页)').length > 0;
104 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
105 | return JSON.stringify({
106 | page: parseInt(pg),
107 | pagecount: pgCount,
108 | limit: 30,
109 | total: 30 * pgCount,
110 | list: videos,
111 | });
112 | }
113 |
114 | async function detail(id) {
115 | const vod = {
116 | vod_id: id,
117 | vod_remarks: "",
118 | };
119 | const playlist = ["点击播放" + "$" + vod.vod_id];
120 | vod.vod_play_from = "道长在线";
121 | vod.vod_play_url = playlist.join("#");
122 | return JSON.stringify({
123 | list: [vod],
124 | });
125 | }
126 |
127 | async function play(flag, id, flags) {
128 | const body = JSON.parse(await request('https://gslb.boosj.com/ipv2.json'));
129 | body._id = id.match(/\d+/)[0];
130 | const json = JSON.parse(await request(buildUrl(body.gslb, body)));
131 | const purl = json.url + '?' + json.t
132 | // console.debug('童趣purl =====>' + purl); // js_debug.log
133 | let headers = {
134 | 'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 9; 22081212C Build/PQ3B.190801.002)',
135 | };
136 | return JSON.stringify({
137 | parse: 0,
138 | url: purl,
139 | header: headers,
140 | });
141 | }
142 |
143 | async function search(wd, quick) {
144 | var data = JSON.parse(await request('https://search.boosj.com/m_ajax?q=' + wd + '&p=' + pg + '&typeId=3362')).body;
145 | let videos = _.map(data.result, (it) => {
146 | return {
147 | vod_id: it.playUrl,
148 | vod_name: it.resourceName,
149 | vod_pic: it.imageUrl,
150 | vod_remarks: it.clickNumStr || '',
151 | }
152 | });
153 | return JSON.stringify({
154 | page: parseInt(pg),
155 | pagecount: data.pageCount,
156 | limit: 30,
157 | total: data.rowCount,
158 | list: videos,
159 | });
160 | }
161 |
162 | function buildUrl(url, obj) {
163 | obj = obj || {};
164 | if (url.indexOf('?') < 0) {
165 | url += '?'
166 | }
167 | let param_list = [];
168 | let keys = Object.keys(obj);
169 | keys.forEach(it => {
170 | param_list.push(it + '=' + obj[it])
171 | });
172 | let prs = param_list.join('&');
173 | if (keys.length > 0 && !url.endsWith('?')) {
174 | url += '&'
175 | }
176 | url += prs;
177 | return url
178 | }
179 |
180 | export function __jsEvalReturn() {
181 | return {
182 | init: init,
183 | home: home,
184 | homeVod: homeVod,
185 | category: category,
186 | detail: detail,
187 | play: play,
188 | search: search,
189 | };
190 | }
--------------------------------------------------------------------------------
/server/source/shuyinfm_bytecode.js:
--------------------------------------------------------------------------------
1 | //bbQ0FUT1CqASBzaHV5aW5mbV9vcGVuLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4IbG9hZAJfBmtleQhIT1NUDnNpdGVLZXkQc2l0ZVR5cGUSTU9CSUxFX1VBDGNvb2tpZQxNWV9VUkwOcmVxdWVzdAhwb3N0FGdldEhlYWRlcnMSZ2V0Q29va2llCGluaXQIaG9tZRBjYXRlZ29yeQxkZXRhaWwIcGxheQxzZWFyY2gaZGVjb2RlVW5pY29kZQlmTvOXRgBNACxodHRwczovL20uc2h1eWluZm0uY29ttAJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgOTsgQVNVU19aMDFRRCBCdWlsZC9QUTNCLjE5MDgwMS4wMDI7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvOTEuMC40NDcyLjExNCBTYWZhcmkvNTM3LjM2DHJlcVVybAR1YQxidWZmZXIGcmVzBnJlcQxtZXRob2QUVXNlci1BZ2VudA5oZWFkZXJzDmNvbnNvbGUKZGVidWcicmVzLmNvbnRlbnQgPT09PiAOY29udGVudBBwb3N0RGF0YRBwb3N0dHlwZQhkYXRhDnRpbWVvdXQQcG9zdFR5cGUOaXNFbXB0eQxyZXN1bHQgc2V0Q29va2llSGVhZGVycxRzZXQtY29va2llBm1hcARrawI7BmNmZwhza2V5CnN0eXBlDGZpbHRlcghodG1sAiQOY2xhc3NlcxJmaWx0ZXJPYmoEaXQQdHlwZU5hbWUMdHlwZUlkCmZpbEJ5EC9zZWFyY2gvSGRsLnBkLWNsYXNzID4gZGQgPiBhW2hyZWYqPWxpc3RpbmZvXQU82KffEGNoaWxkcmVuDmF0dHJpYnMIaHJlZgptYXRjaAhwdXNoDnR5cGVfaWQSdHlwZV9uYW1lBGJ5BZJjj14FAGewZQJuEG5ld3N0aW1lAnYFuk4UbA5vbmNsaWNrEnN0cmluZ2lmeQ5maWx0ZXJzBmNscwZ0aWQEcGcMZXh0ZW5kCmJvb2tzDmhhc01vcmUOcGdDb3VudDgvZS9hY3Rpb24vTGlzdEluZm8ucGhwP3BhZ2U9EHBhcnNlSW50HiZtaWQ9NSZjbGFzc2lkPTQmbGluZT0yNCZ0ZW1waWQ9NSZvcmRlcmJ5PRQmbXlvcmRlcj0wLnVsLmJvb2stb2wgPiBsaS5ib29rLWxpOWQAaQB2AC4AcABhAGcAaQBuAGcAIAA+ACAAYQA6AGMAbwBuAHQAYQBpAG4AcwAoAAtOAE51mCkACHBhZ2UScGFnZWNvdW50CmxpbWl0CnRvdGFsCGxpc3QIYm9vawJhCmJuYW1lBmltZw5yZW1hcmtzEHJlbWFya3MyCGZpbmQOYTpmaXJzdBpoNC5ib29rLXRpdGxlCHRleHQSaW1nOmZpcnN0GmRpdi5ib29rLW1ldGEWcC5ib29rLWRlc2MOYm9va19pZBJib29rX25hbWUaZGF0YS1vcmlnaW5hbEZodHRwczovL20uc2h1eWluZm0uY29tL2Nzcy9kZW1vLmpwZxBib29rX3BpYwU82KTfBT3YMN0YYm9va19yZW1hcmtzBGlkEHBsYXlsaXN0BHVzEkhPU1QgKyBpZC5kaXYuYm9vay1yYW5kLWE6ZXEoMCkgYQh0cmltEmJvb2tfdHlwZSpkaXYuYm9vay1yYW5kLWE6ZXEoMikSYm9va195ZWFyEmJvb2tfYXJlYS5kaXYuYm9vay1yYW5kLWE6ZXEoMykgYRRib29rX2FjdG9yGmJvb2tfZGlyZWN0b3IYZGl2LmJvb2stZGVzGGJvb2tfY29udGVudDZkaXYucGxheS1saXN0ID4gdWwgPiBsaSA+IGECIwlTkH+VKFe/fg52b2x1bWVzCHVybHMCYg5yZXBsYWNlBCQxEHNlZ21lbnRzCGZsYWcIY29kZQZ1cmwIcHVybBwjanAtbGluZXMgPiBsaRJkYXRhLWNvZGUKcGFyc2UEd2QKcXVpY2sIbGluawpzZGF0YQRqbyYvZS9zZWFyY2gvaW5kZXgucGhwEHdkID09PT4gDE9yaWdpbi5odHRwczovL20uc2h1eWluZm0uY29tLw5SZWZlcmVyEGtleWJvYXJkbnRpdGxlLCBuZXdzdGV4dCwgcGxheWVyLCBwbGF5YWRtaW4sIG1vdmlldGltZSwgZmlsZXR5cGUIc2hvdwhmb3JtBnN0cgIlEHVuZXNjYXBlD6QDAaYDAQAVqAMAAgCqAwABrAMADgAGAaABAAAAARYNagCqAwAMrAMBDK4DAAmwAwEJsgMCCbQD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
--------------------------------------------------------------------------------
/server/source/jojo_bytecode.js:
--------------------------------------------------------------------------------
1 | //bbQ0FUT1CkARhqb2pvX29wZW4uanMYLi9saWIvY2F0LmpzHF9fanNFdmFsUmV0dXJuDENyeXB0bwhsb2FkAl8KZGF5anMGa2V5BnVybA5zaXRlS2V5EHNpdGVUeXBlBFVBDGNvb2tpZQ5yZXF1ZXN0CGluaXQIaG9tZQ5ob21lVm9kEGNhdGVnb3J5GHN0cmlwSHRtbFRhZwxkZXRhaWwOcGxheVBpZAhwbGF5DHNlYXJjaAxqaW9odWIkaHR0cHM6Ly9qaW9odWIudG9wlgJNb3ppbGxhLzUuMCAoaVBob25lOyBDUFUgaVBob25lIE9TIDEzXzJfMyBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC82MDUuMS4xNSAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vMTMuMC4zIE1vYmlsZS8xNUUxNDggU2FmYXJpLzYwNC4xDHJlcVVybA5yZWZlcmVyBm10aAhkYXRhBGhkDmhlYWRlcnMGcmVzFFVzZXItQWdlbnQGbWFwAjsMQ29va2llJGVuY29kZVVSSUNvbXBvbmVudAZyZXEMbWV0aG9kCHBvc3QIZm9ybRBwb3N0VHlwZQ5jb250ZW50Aj0GY2ZnCHNrZXkKc3R5cGUMZmlsdGVyCGh0bWwCJAxzZXJpZXMOY2xhc3NlczIubmF2LWxpc3QgYVtocmVmKj0vdmlkZW9dEnN0cmluZ2lmeQJzDHR5cGVJZBB0eXBlTmFtZQ5hdHRyaWJzCGhyZWYKbWF0Y2gkZGVjb2RlVVJJQ29tcG9uZW50DnR5cGVfaWQSdHlwZV9uYW1lBHt9BnRpZARwZwxleHRlbmQIcGFnZQhsaW5rCml0ZW1zDHZpZGVvcwp0b3RhbAZwYWcKZXJyb3IOL3ZpZGVvLww/cGFnZT0QJnNpemU9MTgoZGl2LmNvbnRlbnQtYm9keSA+IGEadWktcGFnaW5hdGlvbhBwYXJzZUludAhjZWlsEnBhZ2Vjb3VudAhsaXN0CGl0ZW0GaW1nAmECbgpzcGVlZApzY29yZQhmaW5kEmltZzpmaXJzdAZzcmMYcC5jYXJkLXRpdGxlEGNoaWxkcmVuGHAuaXRlbS1zcGVlZA5wLnNjb3JlDHZvZF9pZBB2b2RfbmFtZQ52b2RfcGljFnZvZF9yZW1hcmtzDnJlcGxhY2UCIARpZAZ2b2QIaW5mbwJpCHVybHMQcGxheWxpc3QOL3dhdGNoLyxkaXYuY29udGVudC1kZXRhaWwgPiBwSmRpdi5jb250ZW50LWRldGFpbCBzcGFuLmRldGFpbC1za2V0Y2gIdHJpbRZ2b2RfY29udGVudAh0ZXh0FHN0YXJ0c1dpdGgHMFc6Uxr/EnN1YnN0cmluZxB2b2RfYXJlYQd0Xv1OGv8Qdm9kX3llYXIHe3yLVxr/EHZvZF90eXBlB/xbFG8a/xh2b2RfZGlyZWN0b3IHO04Ubxr/EnZvZF9hY3RvcgftiwCKGv8Qdm9kX2xhbmcCLwIrBmVuYwhVdGY4CnBhcnNlIGNmMmQxYS02YTRkLTllZjgGQUVTDmRlY3J5cHQEaXYGcGFkClBrY3M3DnBhZGRpbmcCCghKT0pPGnZvZF9wbGF5X2Zyb20CIxh2b2RfcGxheV91cmwGcGlkEFZTbUpUUlJFDGZvcm1hdBBZWVlZTU1ERAZIZXhAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAOZW5jcnlwdCBZWVlZLU1NLUREIEhIOm1tAi0IZmxhZwo/cGlkPQxoZWFkZXIEd2QKcXVpY2sgL3ZpZGVvL3NlYXJjaD9xPQwmcGFnZT0aJnNpemU9MTgmcGlkPQU1dXFfD6QDAaYDAQAUqAMABACqAwABrAMAAq4DAAOwAwAOAAYBoAEAAAABFQtgAKoDAAysAwEMrgMCDLADAwyyAwAJtAMBCbYDAgm4AwMJugMEDbwDBQ2+AwYBwAMHAcIDCAHEAwkBxgMKAcgDCwHKAwwBzAMNAc4DDgHQAw8BqAMQAQjoOb4AXwoAvgFfCwC+Al8MAL4DXw0AvgRfDgC+BV8PAL4GXxAAvgdfEQC+CF8SAL4JXxMAvgpfFAApBOkAAABfBAAE6gAAAF8FAL9fBgCzXwcABOsAAABfCAALXwkAKaQDAQ0BADsGKysXGCwABIoDDmIGAb4DBQIFBQMBigEH2AMAAQDaAwABANwDAAEA3gMAAQDgAwABAOIDAQAw5AMBASC6AwgMrgMCDLwDCQxhAQBhAAALZQAATPMAAABlAQBC9AAAAGUCAL4AJAIAQlsAAAAE9QAAACQBAEz2AAAAx9DoEGIAADj3AAAA0O1D7QAAADj4AAAAzwvREekHDgRBAAAATPkAAABiAABM8QAAANJM7wAAANEE+gAAAKvoCAT7AAAA6gK/TPwAAADui8hiAQBB/QAAAC6kAwwNIQgrO3YIXSZOKyFxEg5CBgEAAgACBQAAEAKAAQABALIDAAEAv0JcAAAA0AT+AAAAzyUDAKQDDwEDDmIGAcADAQABAgIAGAH+AwABALYDBgi4AwcIz0EAAQAAEWYAAA7PQQEBAAARZgEADgYupAMeAwM6Og5iBgHCAwEEAQQEAU0FhAQAAQCGBAEAMIgEAQEwigQBAjCMBAEDIL4DCgC0AwUIrAMBDK4DAgxhAwBhAgBhAQBhAADbZQEA7YvHZQIAYgAA7chiAQAEBwEAAO3JZQMAQvQAAABiAgC+ACQCAMo4mAAAAEIIAQAAC2IDAEweAAAAJAEALqQDIwo/Jis1AAsQITorDkIGAQABAgEEAAJGA5IEAAEAlAQBACCWBAEBIGEBAGEAAM9BDAEAAAQNAQAAR8diAABCDgEAAL0AvQEzJAEAtEfIOA8BAABiAQDtEWMBAA4LYgEATBABAABiAQBMEQEAACikAycHIURiSQgrKwceXC92aWRlb1wvKC4qKVw/B4wBAAIAPwAAAAgGAAAABAf1////CwABLwABdgABaQABZAABZQABbwABLwALARwCAAAAAAAAAP///38BAAAAAwoMAQE/AAwACg5iBgHEAwAAAAEAAAYABBIBAAAupAM1AQMOYgYBxgMECQQHBAHuAQ2mBAABQKgEAAEAhAQAAQCqBAABAKwEAQAgrgQBATCGBAECMIgEAQNwsAQBBDCyBAEFILQEAQYgtgQBBzC4BAYIA7QDBQi+AwoArAMBDK4DAgxhBwBhBgBhBQBhBABhAwBhAgBhAQBhAADQEekDDrTHYgAAs6noB7QRYwAADmUAAAQdAQAAnc+dBB4BAACdYgAAnQQfAQAAncjcYgEA7YvJZQIAYgIA7cpiAwAEIAEAAO3BBGUDAEL0AAAAYgQAvgAkAgDBBbsSwQZiAwAEIQEAAO3BB2IHAOezpegvbCIAAAA4IgEAAGIHALNHQQwBAAAEGgEAAEftEWMGAA4O6gzBCGwHAAAADuoCLziYAAAAQggBAAALYgAATBYBAABlAwBCIwEAAGIGALsSmyQBAEwkAQAAYgUATCUBAAAkAQAupAM5FnsmRI8mKzoACxonFzorHIo2GTorcSsOQgYBAAEFAQQCAvQBBswEAAEAzgQBADDQBAEBMNIEAQIw1AQBAyDWBAEEMIgEAw2mBAADYQQAYQMAYQIAYQEAYQAAZQAAz+1CLAEAAAQtAQAAJAEAs0dBDAEAAAQuAQAAR8fPQQwBAAAEDQEAAEdCDgEAAL0AvQEzJAEAtEfIZQAAz+1CLAEAAAQvAQAAJAEAs0dBMAEAALNHQe8AAADJZQAAz+1CLAEAAAQxAQAAJAEAs0dBMAEAALNHQe8AAAAR6QMOv8plAADP7UIsAQAABDIBAAAkAQCzR0EwAQAAs0dB7wAAABHpAw6/wQRiAwDcqegHvxFjAwAOC2IBAEwzAQAAYgIATDQBAABiAABMNQEAAGIDABHpCg5iBAAR6QMOv0w2AQAAKKQDQAxOo4+owcZECCsrK2cHGlwvd2F0Y2hcLyguKikHhgEAAgA8AAAACAYAAAAEB/X///8LAAEvAAF3AAFhAAF0AAFjAAFoAAEvAAsBHAIAAAAAAAAA////fwEAAAADCgwBDAAKDkMGAcgDAQABBAAGLwHcBAABAM9CNwEAAL0AvQEzvyQCAEI3AQAAvQK9AzO/JAIAQjcBAAC9BL0FMwQ4AQAAJQIApANgBAMISUkHHDxcLz9bXj5dKyg+fCQpB7wBAQIAVwAAAAgGAAAABAf1////CwABPAAcBAAAAAAAAAABAAAAAQAAAAEvAAocDAAAAAEAAAD///9/AQAAABUCAAAAPQA/AP//CgsBCQgAAAABPgAHAQAAAAYMAQwACgcQJi57MSw1fTsHYAEBACkAAAAIBgAAAAQH9f///wsAASYAHAIAAAABAAAABQAAAAEAAAADCgE7AAwACgcMXHN7Mix9B6gBAQEATQAAAAgGAAAABAf1////CwAcLAAAAAIAAAD///9/AQAAABUKAAkADQAgACAAoACgAIAWgBYAIAogKCApIC8gLyBfIF8gADAAMP/+//4KDAAKDmIGAcoDAQkBBwUG4gQK8gQAAQCGBAEAMIgEAQEwygMBAjD0BAEDIPYEAgcw+AQDBTD6BAEEMLIDAAAA/AQACAC+AwoAtAMFCKwDAQzIAw8AqgMADGEGAGEDAGECAGEBAGEAANtlAQAEPwEAAJ3Pne2Lx2UCAGIAAO3IYgEABEABAADtyQvPTDMBAADeYgEABEEBAADtQgMBAAAkAADtQkIBAAAkAABMQwEAAMphBABiAgB96xABwQRhBQBiAQBiBADtQkQBAAAkAABCQgEAACQAAMEFYgUAQkUBAAAERgEAACQBAOgYYgMAYgUAQkcBAAC2JAEAQ0gBAADryQBiBQBCRQEAAARJAQAAJAEA6BhiAwBiBQBCRwEAALYkAQBDSgEAAOugAGIFAEJFAQAABEsBAAAkAQDoF2IDAGIFAEJHAQAAtiQBAENMAQAA6ndiBQBCRQEAAARNAQAAJAEA6BdiAwBiBQBCRwEAALYkAQBDTgEAAOpPYgUAQkUBAAAETwEAACQBAOgXYgMAYgUAQkcBAAC2JAEAQ1ABAADqJ2IFAEJFAQAABFEBAAAkAQDoFWIDAGIFAEJHAQAAtiQBAENSAQAAgABp7/7//w6DYgAAQg4BAAC9AL0BMyQBALRHQjcBAAC9Ar0DMwRTAQAAJAIAQjcBAAC9BL0FMwRUAQAAJAIAwQZlBABBVQEAAEFWAQAAQlcBAAAEWAEAACQBAMEHZQQAQVkBAABCWgEAAGIGAMAHC8AHTFsBAABlBABBXAEAAEFdAQAATF4BAAAkAwDBCGUEAEFVAQAAQVYBAABCCAEAAMAIJAEAQl0AAAAEXwEAACQBAMEIYgMABGABAABDYQEAAGIDAMAIQlsAAAAEYgEAACQBAENjAQAAOJgAAABCCAEAAAtiAwAmAQBMJQEAACQBAC6kA2chTk4rNQghowhOgF1nbGdsZ2dnZ2dnaDEAOAKP+MFEdjo6ByhsZXQgdXJscyA9IFwiKC4qKVwiOwewAQACAFEAAAAIBgAAAAQH9f///wsAAWwAAWUAAXQAASAAAXUAAXIAAWwAAXMAASAAAT0AASAAASIACwEcAgAAAAAAAAD///9/AQAAAAMKDAEBIgABOwAMAAoHAl8HNAEBABMAAAAIBgAAAAQH9f///wsAAV8ADAAKBwItBzQBAQATAAAACAYAAAAEB/X///8LAAEtAAwACg5DBgHMAwADAAYCAqABA7IDAAAAtgUAAQDIBQACAKoDAAywAwMMZQAAQVUBAABBVgEAAEJXAQAABGUBAABlAQDsQmYBAAAEZwEAACQBAJ0kAQDHZQAAQVUBAABBaAEAAEJXAQAABGkBAAAkAQDIZQAAQVkBAABCagEAAGUBAOxCZgEAAARrAQAAJAEAwwvETFsBAABlAABBXAEAAEFdAQAATF4BAAAkAwDNQjcAAAAkAABCNwEAAL0AvQEzBGwBAAAkAgDNKKQDiwEHBOSKADsCjwcEXCsHNAEBABMAAAAIBgAAAAQH9f///wsAASsADAAKDmIGAc4DAwADBQIAMgPaBQABAPIEAAEA2gEAAQDMAxEAugMIDDiYAAAAQggBAAALs0xXAQAA0ARuAQAAndvsnUzaAAAAC2UBAEzzAAAATG8BAAAkAQAupAOUAQcDOiFOCCscDmIGAdADAwkDBwUB8QEM4AUAAQDiBQABAKgEAAEArAQBACCuBAEBMIYEAQIwiAQBA3CwBAEEMLIEAQUgtAQBBiC2BAEHMLgEBggDtAMFCMwDEQC+AwoArAMBDK4DAgxhBwBhBgBhBQBhBABhAwBhAgBhAQBhAADREekDDrTHYgAAs6noB7QRYwAADmUAAARyAQAAnc+dBHMBAACdYgAAnQR0AQAAndzsncjdYgEA7YvJZQMAYgIA7cpiAwAEIAEAAO3BBGUEAEL0AAAAYgQAvgAkAgDBBbsSwQZiAwAEIQEAAO3BB2IHAOezpegvbCIAAAA4IgEAAGIHALNHQQwBAAAEGgEAAEftEWMGAA4O6gzBCGwHAAAADuoCLziYAAAAQggBAAALYgAATBYBAABlBABCIwEAAGIGALsSmyQBAEwkAQAAYgUATCUBAAAkAQAupAOeARZ7JkSeJis6AAsaJxc6KxyKNhk6K3ErDkIGAQABBQEEAQL4AQbMBAABAM4EAQAw0AQBATDSBAECMNQEAQMg1gQBBDCIBAMNYQQAYQMAYQIAYQEAYQAAZQAAz+1CLAEAAAQtAQAAJAEAs0dBDAEAAAQuAQAAR8fPQQwBAAAEDQEAAEdCDgEAAL0AvQEzJAEAtEfIZQAAz+1CLAEAAAQvAQAAJAEAs0dBMAEAALNHQe8AAADJZQAAz+1CLAEAAAQxAQAAJAEAs0dBMAEAALNHQe8AAAAR6QMOv8plAADP7UIsAQAABDIBAAAkAQCzR0EwAQAAs0dB7wAAABHpAw6/wQRiAwAEdQEAAKnoB78RYwMADgtiAQBMMwEAAGICAEw0AQAAYgAATDUBAABiAwAR6QoOYgQAEekDDr9MNgEAACikA6UBDE6jj6jBxlgIKysrZwcaXC93YXRjaFwvKC4qKQeGAQACADwAAAAIBgAAAAQH9f///wsAAS8AAXcAAWEAAXQAAWMAAWgAAS8ACwEcAgAAAAAAAAD///9/AQAAAAMKDAEMAAoOQwYBqAMAAAACBwAyAMADCwDCAwwAxAMNAMYDDgDKAxAAzgMSANADEwAL20zgAAAA3EzhAAAA3UziAAAA3kzjAAAAXgQATOUAAABeBQBM5wAAAF4GAEzoAAAAKKQDxQEJAwghISEhKysr
--------------------------------------------------------------------------------
/server/source/hula8_bytecode.js:
--------------------------------------------------------------------------------
1 | //bbQ0FUT1C/ARpodWxhOF9vcGVuLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4MQ3J5cHRvCGxvYWQCXwZrZXkISE9TVA5zaXRlS2V5EHNpdGVUeXBlClBDX1VBDnJlcXVlc3QIaW5pdAhob21lDmhvbWVWb2QQY2F0ZWdvcnkMZGV0YWlsCHBsYXkMc2VhcmNoGGJhc2U2NEVuY29kZRhiYXNlNjREZWNvZGUHZmurTidUKmh0dHBzOi8vd3d3Lmh1bGE4Lm5ldN4BTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExNi4wLjAuMCBTYWZhcmkvNTM3LjM2DHJlcVVybA5hZ2VudFNwBnJlcwZyZXEMbWV0aG9kFFVzZXItQWdlbnQsaHR0cHM6Ly93d3cuaHVsYTgubmV0Lw5yZWZlcmVyPmVzY19zZWFyY2hfY2FwdGNoYT0xO3Jlc3VsdD0xMjsMQ29va2llDmhlYWRlcnMOY29udGVudAZjZmcIc2tleQpzdHlwZQxmaWx0ZXIOY2xhc3NlcxJmaWx0ZXJPYmoIbW1hLw50eXBlX2lkC00ATQBBAFuNi04SdHlwZV9uYW1lPHVmYy1maWdodGluZy1jaGFtcGlvbnNoaXAuaHRtbBFVAEYAQwDIfoFnPGiXZVuNKHVmYy1maWdodC1uaWdodC5odG1sD1UARgBDADxol2VLThxZRmJlbGxhdG9yLWZpZ2h0aW5nLWNoYW1waW9uc2hpcC5odG1sF0IAZQBsAGwAYQB0AG8AcgA8aJdlW41CcHJvZmVzc2lvbmFsLWZpZ2h0ZXJzLWxlYWd1ZS5odG1sDVAARgBMADxol2VbjUBsZWdhY3ktZmlnaHRpbmctYWxsaWFuY2VsZmEuaHRtbA1MAEYAQQA8aJdlW40Ob25lLWZjLw1PAE4ARQCgUZtRW40yb25lLWZjL29uZS1mcmlkYXktZmlnaHRzLxFPAE4ARQBoVJROPGiXZRxZEGpjay5odG1sDUoAQwBLABhiyYnOVxR3bGx6ZC5odG1sC2Zrl2c8ey1O+Vs6a29uZnJvbnRhY2phLXN6dHVrLXdhbGtpLmh0bWwRSwBTAFcA4mxwUTxol2VbjUBlYWdsZS1maWdodGluZy1jaGFtcGlvbnNoaXAuaHRtbBNFAGEAZwBsAGUAD1xwnluNi05CYWJzb2x1dGUtY2hhbXBpb25zaGlwLWFraG1hdC5odG1sEcRPV3+vZUEAQwBBAFuNi04KYm9qaS8J2XrLeg9k+1EQay0xLmh0bWweSy0xIEpBUEFOIEdST1VQFGtydXNoLmh0bWwZSwAtADEA12ULTksAcgB1AHMAaABbjYtOEnJpc2UuaHRtbA9SAEkAUwBFACKO82JbjRh3bGYyMDA0Lmh0bWwRZmuXZ86YIAAtAFcATABGABRrdW5sdW5qdWUvEQZm0U6zUSAALQBLAEwASgAUZ2xvcnkuaHRtbBVHAGwAbwByAHkAY4MAgDxol2VbjRZ0aGFpLWZpZ2h0LwXwbPNiQnRoYWktZmlnaHQta2luZy1vZi1tdWF5LXRoYWkuaHRtbAfwbEtOGGI8YXJ0aWNsZS90YWcvdGhhaS1maWdodC1sZWFndWUvIlRIQUkgRklHSFQgTEVBR1VFDnF1YW5qaS8F82L7USBkYXpuLWJveGluZy5odG1sFkRBWk4gQm94aW5nHnBiYy1ib3hpbmcuaHRtbBRQQkMgQm94aW5nKHRvcC1yYW5rLWJveGluZy5odG1sHlRvcCBSYW5rIEJveGluZzRkYXpuLW1hdGNocm9vbS1ib3hpbmcuaHRtbCBNYXRjaHJvb20gQm94aW5nTmJhcmUta251Y2tsZS1maWdodGluZy1jaGFtcGlvbnNoaXAuaHRtbBP4iPNiPGiXZVuNQgBLAEYAQwBGaGFyZGNvcmUtZmlnaHRpbmctY2hhbXBpb25zaGlwLmh0bWwb+IjzYkgAYQByAGQAYwBvAHIAZQAgAEYAQwBEdG9wLWRvZy1maWdodGluZy1jaGFtcGlvbnNoaXAuaHRtbBn4iPNiVABPAFAAIABEAE8ARwAgAEYAQwAMb3RoZXIvCXZR1k7Ua1uNEnN0cmluZ2lmeQZtYXAOZmlsdGVycwZjbHMIbGFuZApyYXRpbwR7fQZ0aWQEcGcMZXh0ZW5kCGxpbmsIaHRtbAIkDGpzQmFzZQppdGVtcwx2aWRlb3MOaGFzTW9yZQ5wZ0NvdW50Ai8ML3BhZ2UvDnJlcGxhY2UGLy9wBC9wEGpz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
--------------------------------------------------------------------------------
/server/source/duanju.js:
--------------------------------------------------------------------------------
1 | //bbQ0FUT1DIAR5kdWFuanU1X29wZW4uanMsYXNzZXRzOi8vanMvbGliL2NhdC5qcxxfX2pzRXZhbFJldHVybgxDcnlwdG8IbG9hZAJfBmtleQhIT1NUDnNpdGVLZXkQc2l0ZVR5cGUSTU9CSUxFX1VBDnJlcXVlc3QIaW5pdAhob21lDmhvbWVWb2QQY2F0ZWdvcnkMZGV0YWlsCHBsYXkMc2VhcmNoGGJhc2U2NERlY29kZRpkZWNvZGVVbmljb2RlB+13Z1JRfypodHRwczovL20uZHVhbmp1NS5jb22WAk1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhvbmUgT1MgMTNfMl8zIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwNS4xLjE1IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8xMy4wLjMgTW9iaWxlLzE1RTE0OCBTYWZhcmkvNjA0LjEMcmVxVXJsDmFnZW50U3AGcmVzBnJlcQxtZXRob2QUVXNlci1BZ2VudA5oZWFkZXJzDmNvbnNvbGUKZGVidWcYcmVxVXJsID09PT4gInJlcy5jb250ZW50ID09PT4gDmNvbnRlbnQGY2ZnCHNrZXkKc3R5cGUMZmlsdGVyDmNsYXNzZXMSZmlsdGVyT2JqDGZpbExldApmaWxCeQhuaXhpDnR5cGVfaWQFBpCtiBJ0eXBlX25hbWUSdGlhbmNob25nBRx1oFsObnVlbGlhbgVQhktgEGNodWFueXVlBX96io0UY2hvbmdzaGVuZwXNkR91DGxldHRlcgVXW81rBWhR6JACbgJ2AkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgRieQWSY49eBfZl9JUIdGltZQW6ThRsCGhpdHMFxIsGUgpzY29yZRJzdHJpbmdpZnkGbWFwDmZpbHRlcnMGY2xzAmkIcHVzaAR7fQZ0aWQEcGcMZXh0ZW5kCGxpbmsIaHRtbAIkCml0ZW1zDHZpZGVvcw5oYXNNb3JlDnBnQ291bnQSL3ZvZHNob3cvBC0tBi0tLRAtLS0uaHRtbDgubW9kdWxlLWl0ZW1zID4gLm1vZHVsZS1pdGVtNWQAaQB2ACMAcABhAGcAZQAgAD4AIABhADoAYwBvAG4AdABhAGkAbgBzACgAC04ATnWYKQAQcGFyc2VJbnQIcGFnZRJwYWdlY291bnQKbGltaXQKdG90YWwIbGlzdAhpdGVtAmEIdnBpYw5yZW1hcmtzCGZpbmQOYTpmaXJzdBJpbWc6Zmlyc3QOYXR0cmlicxBkYXRhLXNyYyhkaXYubW9kdWxlLWl0ZW0tdGV4dBBjaGlsZHJlbghkYXRhCGhyZWYOcmVwbGFjZQQkMQx2b2RfaWQKdGl0bGUQdm9kX25hbWUUc3RhcnRzV2l0aAQvLwxodHRwczoCLw52b2RfcGljFnZvZF9yZW1hcmtzBGlkCHRhZ3MGdm9kDnBsYXlNYXAIdGFicxJwbGF5bGlzdHMIdXJscxh2b2RfcGxheV91cmwWL3ZvZGRldGFpbC8KLmh0bWwyZGl2LnZpZGVvLWluZm8taXRlbTplcSgxKQh0ZXh0GmgxLnBhZ2UtdGl0bGUIdHJpbRJ2b2RfYWN0b3IYZGl2LnRhZy1saW5rEHZvZF90eXBlGGltZy5sYXp5bG9hZEJkaXYudmlkZW8taW5mby1jb250ZW50IHNwYW46Zmlyc3QWdm9kX2NvbnRlbnQSdm9kID09PT4gZmRpdi5tb2R1bGUtdGFiLWNvbnRlbnQ6Zmlyc3QgPiBkaXZbY2xhc3MqPXRhYi1pdGVtXQhzcGFuGmRpdi5zb3J0LWl0ZW0IZWFjaAhrZXlzBiQkJBp2b2RfcGxheV9mcm9tBnRhYgRpdA5wbGF5VXJsHGhhc093blByb3BlcnR5DHVybGlzdAIjCGZsYWcIcHVybApwYXJzZQptYXRjaAZ1cmwOZW5jcnlwdBB1bmVzY2FwZQR3ZApxdWlja0IvaW5kZXgucGhwL2FqYXgvc3VnZ2VzdD9taWQ9MSZ3ZD0SJmxpbWl0PTUwBGVuBnBpYwZlbmMIVXRmOAxCYXNlNjQGc3RyAiUPpAMBpgMBABKoAwADAKoDAAGsAwACrgMADgAGAaABAAAAARMLWgCqAwAMrAMBDK4DAgywAwAJsgMBCbQDAgm2AwMJuAMEDboDBQG8AwYBvgMHAcADCAHCAwkBxAMKAcYDCwHIAwwBygMNAcwDDgGoAw8BCOg5vgBfCAC+AV8JAL4CXwoAvgNfCwC+BF8MAL4FXw0AvgZfDgC+B18PAL4IXxAAvglfEQC+Cl8SACkE5wAAAOIE6AAAAF8EAL9fBQCzXwYABOkAAABfBwAppAMBDAEAOwYhKxcYAAjWAg5iBgG6AwIBAgYCAGYD1AMAAQDWAwABANgDAQAguAMHDMwDEQBhAAA47QAAAM8LBEEAAABM7gAAAAvQEekFDmUAAEzvAAAATPAAAADui8c48QAAAELyAAAABPMAAADPnSQBAA448QAAAELyAAAABPQAAADcYgAAQfUAAADtnSQBAA5iAABB9QAAAC6kAwoJEiY1CEQcEmyZDmIGAbwDAQABAgIAGAHsAwABALQDBQi2AwYIz0H3AAAAEWYAAA7PQfgAAAARZgEADgYupAMXAwM6Og5iBgG+AwEEAR0BAdUGBfIDAAEA9AMBADD2AwEBcPgDAQJg+gMBA2CuAwIMYQMAYQIAYQEAYQAACwT+AAAATP8AAAAEAAEAAEwBAQAACwQCAQAATP8AAAAEAwEAAEwBAQAACwQEAQAATP8AAAAEBQEAAEwBAQAACwQGAQAATP8AAAAEBwEAAEwBAQAACwQIAQAATP8AAAAECQEAAEwBAQAAJgUAxwvICwQKAQAATNgAAAAECwEAAEw2AAAACwQMAQAATA0BAAC/TA4BAAALBA8BAABMDQEAAAQPAQAATA4BAAALBBABAABMDQEAAAQQAQAATA4BAAALBBEBAABMDQEAAAQRAQAATA4BAAALBBIBAABMDQEAAAQSAQAATA4BAAALBBMBAABMDQEAAAQTAQAATA4BAAALBBQBAABMDQEAAAQUAQAATA4BAAALBBUBAABMDQEAAAQVAQAATA4BAAALBBYBAABMDQEAAAQWAQAATA4BAAALBBcBAABMDQEAAAQXAQAATA4BAAALBBgBAABMDQEAAAQYAQAATA4BAAALBBkBAABMDQEAAAQZAQAATA4BAAALBBoBAABMDQEAAAQaAQAATA4BAAALBBsBAABMDQEAAAQbAQAATA4BAAALBBwBAABMDQEAAAQcAQAATA4BAAALBB0BAABMDQEAAAQdAQAATA4BAAALBB4BAABMDQEAAAQeAQAATA4BAAALBB8BAABMDQEAAAQfAQAATA4BAAALBCABAABMDQEAAAQgAQAATA4BAAALBCEBAABMDQEAAAQhAQAATA4BAAALBCIBAABMDQEAAAQiAQAATA4BAAALBCMBAABMDQEAAAQjAQAATA4BAAALBCQBAABMDQEAAAQkAQAATA4BAAALBCUBAABMDQEAAAQlAQAATA4BAAALBCYBAABMDQEAAAQmAQAATA4BAAALBCcBAABMDQEAAAQnAQAATA4BAAALBCgBAABMDQEAAAQoAQAATA4BAAAmGwBMQAAAAMkLBCkBAABM2AAAAAQqAQAATDYAAAALBCsBAABMDQEAAAQsAQAATA4BAAALBC0BAABMDQEAAAQuAQAATA4BAAALBC8BAABMDQEAAAQwAQAATA4BAAAmAwBMQAAAAMo4mAAAAEIxAQAAC2UAAEIyAQAAYgAAvgAkAgBMHgAAAGIBAEwzAQAAJAEALqQDHBI/AG0CDQDRBAIAXQI6AAsONSsOQgYBAAEBAQQDAGkC6AQAAQDqBAAAAPYDAQ34AwIJ+gMDCWUAAM9B/wAAAHEmAABJZQAAz0H/AAAAR0I2AQAAZQEAZQIAJAIADrPHw2UAAM9B/wAAAEfno+gwZQAAz0H/AAAAR8NHBN4AAABxZQAAz0H/AAAAR8NHQUAAAACzR0EOAQAASZMA6sPPKKQDIgYDSYBY2hcOYgYBwAMAAAABAAAGAAQ3AQAALqQDLgEDDmIGAcIDBAcEDAQB7wEL8AQAAQDyBAABAPIDAAEA9AQAAQD2BAEAMPgEAQEw+gQBAnD8BAEDMP4EAQQggAUBBTCCBQEGMLIDBAi6AwgArAMBDK4DAgxhBgBhBQBhBABhAwBhAgBhAQBhAADQs6QR6QQO0PLoA7TUv0JcAAAAZQAABEIBAADPBEMBAADSQSkBAAAR6QMOvwREAQAA0kEKAQAAEekDDr8ERAEAANAERQEAACQKAMfcYgAA7YvIZQIAYgEA7cliAgAERgEAAO3KZQMAQjIBAABiAwC+ACQCAMEEYgIABEcBAADt57OlwQViBQDoDDhIAQAA0O20neoIOEgBAADQ7cEGOJgAAABCMQEAAAs4SAEAANDtTEkBAABiBgBMSgEAALtITEsBAAC7SGIGAJpMTAEAAGIEAExNAQAAJAEALqQDMhRsRAA+AiYrNQALFCZJgDo/KyY6Kw5CBgEAAQMBBQIC5AEEnAUAAQCeBQEAMKAFAQEwogUBAjD6BAINsgMACGECAGEBAGEAAGUAAM/tQlIBAAAEUwEAACQBALNHx2UAAM/tQlIBAAAEVAEAACQBALNHQVUBAAAEVgEAAEfIZQAAz+1CUgEAAARXAQAAJAEAs0dBWAEAALNHQVkBAADJC2IAAEFVAQAAQVoBAABCWwEAAL0AvQEzBFwBAAAkAgBMXQEAAGIAAEFVAQAAQV4BAABMXwEAAGIBAEJgAQAABGEBAAAkAQDoDARiAQAAYgEAneofYgEAQmABAAAEYwEAACQBAOgKZQEAYgEAneoEYgEATGQBAABiAgAR6QMOv0xlAQAAKKQDOAswbKOoCLddAEACRAcyLio/XC92b2RkZXRhaWxcLyguKikuaHRtbAfOAQECAGAAAAAIBgAAAAQH9f///wsACAYAAAADB/X///8BLwABdgABbwABZAABZAABZQABdAABYQABaQABbAABLwALARwCAAAAAAAAAP///38BAAAAAwoMAQMBaAABdAABbQABbAAMAAoOYgYBxAMBCgEGBAKvAwvMBQABAPYEAQAw+AQBATD6BAECcM4FAQMw0AUBBDDSBQEFYNQFAQYw1gUBB3DYBQEIMNoFAQkgrgMCDLIDBAi6AwgArAMBDGEJAGEIAGEHAGEGAGEFAGEEAGEDAGECAGEBAGEAAL9CXAAAAGUBAARuAQAAzwRvAQAAJAQAx91iAADti8hlAwBiAQDtyWICAARwAQAA7UJxAQAAJAAAygvPTF0BAABiAgAEcgEAAO1CcQEAACQAAEJzAQAAJAAATF8BAABiAwBMdAEAAGICAAR1AQAA7UJxAQAAJAAAQnMBAAAkAABMdgEAAGICAAR3AQAA7bNHQVUBAAAEVgEAAEdMZAEAAGICAAR4AQAA7UJxAQAAJAAAQnMBAAAkAABMeQEAAMEEOPEAAABC8gAAAAR6AQAAOJgAAABCMQEAAGIEACQBAJ0kAQAOC8EFYgIABHsBAADtQlIBAAAEfAEAACQBAMEGYgIABH0BAADtwQdlAABCfgEAAGIGAL4AJAIADmIEAGUAAEJ/AQAAYgUAJAEAQlsAAAAEgAEAACQBAEOBAQAAZQAAQmsAAABiBQAkAQDBCGUAAEIyAQAAYggAvgEkAgDBCWIEAGIJAEJbAAAABIABAAAkAQBDbQEAADiYAAAAQjEBAAALYgQAJgEATE0BAAAkAQAupANOHpl7JiwAEggIIZormYqZDbcSezoACxohslM7Jnw6Og5CBgEAAgICBAQBRASEBgABAOoEAAEA9AEBAHCaBQEBINIFBQnWBQcN+gQCDa4DAAxhAQBhAADPQVgBAACzR0FZAQAAx2UBANBHyGUCAGIBAO1CUgEAAARPAQAAJAEAEWMBAA5lAwBCfgEAAGIBAL4AJAIAKaQDZAghSSGAAAsQHA5CBgEAAQIBBAICeAOGBgABALwFAQAwiAYBATDSBQAI9AEADWEBAGEAAM9BVQEAAAReAQAAR0JbAQAAvQC9ATMEXAEAACQCAMfPQVUBAABBWgEAAMhiAADns6noBzBeAQAAAGUAAEKFAQAAZQEAJAEAlugMZQAAZQEAcSYAAEllAABlAQBHQjYBAABiAAAEPQEAAJ1iAQCdJAEAKaQDaAchnj9JWDuPBxcuACoAPwAoAFwAZAArACkAxpYuACoAB6oBAAIATgAAAAgGAAAABAf1////CwAIBgAAAAMH9f///wsBHAgAAAABAAAA////fwEAAAAVAQAwADkACgwBAcaWHAIAAAAAAAAA////fwEAAAADCgwACg5CBgEAAQABAwAADgGMBgABAM9CWwAAAASHAQAAJQEApAN0AQMOYgYBxgMDAwMGAwSBAQaQBgABAMwFAAEA2gEAAQD2BAEAMPgEAAAAkgYAAgCyAwQIugMIAMoDEABhAAC/QlwAAABlAADQJAIAx9xiAADti8g4mAAAAEKKAQAAxEKLAQAAvQC9ATMkAQC0RyQBAMxBjAEAAMnEQY0BAAC9AqnoCziOAQAAxe3J6hbEQY0BAAC9A6noCziOAQAA3cXt7ck4mAAAAEIxAQAAC7NMigEAAMVMjAEAACQBAC6kA34MEkkmmSE6K0Q2OiEhByZyIHBsYXllcl8uKj89KC4qPyk8B6QBAAIASwAAAAgGAAAABAf1////CwABcgABIAABcAABbAABYQABeQABZQABcgABXwAIBgAAAAMH9f///wE9AAsBCAYAAAADB/X///8MAQE8AAwACgcCMQcCMg5iBgHIAwIEAgcCAKEBBp4GAAEAoAYAAQD2BAEAMLIFAAAA/gQAAgDQBQIBMLIDBAi6AwgAYQAAv0JcAAAAZQAABJEBAADPBJIBAAAkBADHOJgAAABCigEAANxiAADtiyQBAEFNAQAAyCYAAMlhAwDEfepBysVCNgEAAAtiAwBBkwEAAExdAQAAYgMAQTYAAABMXwEAAGIDAEGUAQAATGQBAABiAwBBkwEAAExlAQAAJAEADoAA6L0OgziYAAAAQjEBAAALxUxNAQAAuzJMSwEAACQBAC6kA44BDxJ7gBcrJkREREQXITohJg5DBgHKAwEAAQUBACsB4gUAAQCqAwAMZQAAQZUBAABBlgEAAEIxAQAAZQAAQZUBAABBlwEAAEKKAQAAzyQBACUBAKQDoAEBAw5DBgHMAwEAAQQAAh0BsAYAAQDPQlsBAAC9AL0BMwSZAQAAJAIA0ziOAQAAzyMBAKQDpAECA2cHBFxcBzQBAQATAAAACAYAAAAEB/X///8LAAFcAAwACg5DBgGoAwAAAAIHADIAvAMJAL4DCgDAAwsAwgMMAMQDDQDGAw4AyAMPAAvbTN4AAADcTN8AAADdTOAAAADeTOEAAABeBABM4gAAAF4FAEzjAAAAXgYATOQAAAAopAOpAQkDCCEhISErKys=
--------------------------------------------------------------------------------
/server/source/ting13_bytecode.js:
--------------------------------------------------------------------------------
1 | //bbQ0FUT1CyARx0aW5nMTNfb3Blbi5qcyxhc3NldHM6Ly9qcy9saWIvY2F0LmpzHF9fanNFdmFsUmV0dXJuCGxvYWQCXwZrZXkISE9TVA5zaXRlS2V5EHNpdGVUeXBlEk1PQklMRV9VQQxjb29raWUMTVlfVVJMDnJlcXVlc3QIcG9zdBRnZXRIZWFkZXJzEmdldENvb2tpZQhpbml0CGhvbWUQY2F0ZWdvcnkMZGV0YWlsCHBsYXkMc2VhcmNoGmRlY29kZVVuaWNvZGUJMQAzACxUZk4oaHR0cHM6Ly9tLnRpbmcxMy5jb220Ak1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCA5OyBBU1VTX1owMVFEIEJ1aWxkL1BRM0IuMTkwODAxLjAwMjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS85MS4wLjQ0NzIuMTE0IFNhZmFyaS81MzcuMzYMcmVxVXJsBHVhDGJ1ZmZlcgZyZXMGcmVxDG1ldGhvZBRVc2VyLUFnZW50DmhlYWRlcnMOdGltZW91dA5jb250ZW50EHBvc3REYXRhEHBvc3R0eXBlCGRhdGEQcG9zdFR5cGUOaXNFbXB0eQxyZXN1bHQgc2V0Q29va2llSGVhZGVycxRzZXQtY29va2llBm1hcARrawI7BmNmZwhza2V5CnN0eXBlDGZpbHRlcghodG1sAiQOY2xhc3NlcxJmaWx0ZXJPYmoEaXQQdHlwZU5hbWUMdHlwZUlkCmZpbEJ5DC9ib29rL0hkbC5wZC1jbGFzcyA+IGRkID4gYVtocmVmKj15b3VzaGVuZ10FPNin3xBjaGlsZHJlbg5hdHRyaWJzCGhyZWYKbWF0Y2gIcHVzaA50eXBlX2lkEnR5cGVfbmFtZQRieQWSY49eBbBlZk4CbhBwb3N0ZGF0ZQJ2BQBnsGUUbGFzdHVwZGF0ZQW6ThRsEGFsbHZpc2l0EnN0cmluZ2lmeQ5maWx0ZXJzBmNscwZ0aWQEcGcMZXh0ZW5kCmJvb2tzFC95b3VzaGVuZy8CLwouaHRtbC51bC5ib29rLW9sID4gbGkuYm9vay1saRBwYXJzZUludAhwYWdlEnBhZ2Vjb3VudApsaW1pdAp0b3RhbAhsaXN0CGJvb2sCYQZpbWcOcmVtYXJrcxByZW1hcmtzMhByZW1hcmtzMxByZW1hcmtzNAhmaW5kDmE6Zmlyc3QSaW1nOmZpcnN0GmRhdGEtb3JpZ2luYWwUc3Bhbi5zY29yZRpkaXYuYm9vay1tZXRhCHRleHQOcmVwbGFjZQQkMSJkaXYucGxheUNvdW50VGV4dCZkaXYuYm9vay1tZXRhOmVxKDEpDmJvb2tfaWQKdGl0bGUJCWfwWA9c9IsSYm9va19uYW1lEGJvb2tfcGljBT3YMN0DZCcFPNik3xhib29rX3JlbWFya3MEaWQKcGFnZXMQYm9va2xpc3QGdm9sBGJrCHRpbmcIbGluawQkJApkYXRhMi5kaXYuYm9vay1yYW5kLWE6ZXEoMCkgYQh0cmltEmJvb2tfdHlwZSpkaXYuYm9vay1yYW5kLWE6ZXEoNCkSYm9va195ZWFyNGRpdi5ib29rLXJhbmQtYTplcSgxKSBmb250EmJvb2tfYXJlYS5kaXYuYm9vay1yYW5kLWE6ZXEoMykgYRRib29rX2FjdG9yLmRpdi5ib29rLXJhbmQtYTplcSgyKSBhGmJvb2tfZGlyZWN0b3IYZGl2LmVsbGlwc2lzGGJvb2tfY29udGVudB5zZWxlY3QgPiBvcHRpb242ZGl2LnBsYXktbGlzdCA+IHVsID4gbGkgPiBhAiMGJCQkDnZvbHVtZXMIdXJscwJiEHNlZ21lbnRzCGZsYWcGbmlkBmNpZApwZGF0YQhwdXJsHm1ldGFbbmFtZT0iX2MiXURodHRwczovL20udGluZzEzLmNvbS9hcGkvbWFwaS9wbGF5BHNjDENvb2tpZQpwYXJzZQhmb3JtBnVybAR3ZApxdWljaw5wZ0NvdW50LC9hcGkvYWpheC9zb2xpc3Q/d29yZD0gJnR5cGU9bmFtZSZwYWdlPRAmb3JkZXI9MQpub3ZlbApjb3ZlchBsYXN0bmFtZQhjbnVtBnN0cgIlEHVuZXNjYXBlD6QDAaYDAQAVqAMAAgCqAwABrAMADgAGAaABAAAAARYNagCqAwAMrAMBDK4DAAmwAwEJsgMCCbQDAwm2AwQNuAMFCboDBgm8AwcBvgMIAcADCQHCAwoBxAMLAcYDDAHIAw0BygMOAYYCDwHMAxABzgMRAdADEgGoAxMBCOhDvgBfCQC+AV8KAL4CXwsA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
--------------------------------------------------------------------------------
/pages/Play.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
13 |
14 |
15 |
16 |
17 |
18 | {{ flag }}
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | {{ card.name }}
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
218 |
219 |
250 |
--------------------------------------------------------------------------------
/server/source/cntv_open.js:
--------------------------------------------------------------------------------
1 | // 无搜索功能
2 | import { _ } from './lib/cat.js';
3 | let key = '视聚场';
4 | let HOST = 'http://api.cntv.cn';
5 | let siteKey = '';
6 | let siteType = 0;
7 | const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36';
8 |
9 | async function request(reqUrl, agentSp) {
10 | let res = await req(reqUrl, {
11 | method: 'get',
12 | headers: {
13 | 'User-Agent': agentSp || MOBILE_UA,
14 | },
15 | });
16 | return res.content
17 | }
18 |
19 | async function init(cfg) {
20 | siteKey = cfg.skey;
21 | siteType = cfg.stype
22 | }
23 |
24 | async function home(filter) {
25 | const classes = [
26 | { type_id: "TOPC1451559025546574", type_name: "动画大放映" },
27 | { type_id: "TOPC1451378857272262", type_name: "第一动画乐园" },
28 | { type_id: "TOPC1451557646802924", type_name: "健康之路" },
29 | { type_id: "TOPC1451558190239536", type_name: "走进科学" },
30 | { type_id: "TOPC1451557893544236", type_name: "探索·发现" },
31 | { type_id: "TOPC1451378967257534", type_name: "动物世界" },
32 | { type_id: "TOPC1451525103989666", type_name: "人与自然" },
33 | { type_id: "TOPC1451558150787467", type_name: "自然传奇" },
34 | { type_id: "TOPC1451557421544786", type_name: "地理·中国" },
35 | { type_id: "TOPC1451541349400938", type_name: "远方的家" },
36 | { type_id: "TOPC1575253587571324", type_name: "跟着书本去旅行" },
37 | { type_id: "TOPC1451557052519584", type_name: "百家讲坛" },
38 | { type_id: "TOPC1451558856402351", type_name: "空中剧院" },
39 | { type_id: "TOPC1451550970356385", type_name: "体坛快讯" },
40 | { type_id: "TOPC1451528971114112", type_name: "新闻联播" },
41 | { type_id: "TOPC1451558976694518", type_name: "焦点访谈" },
42 | { type_id: "TOPC1451464665008914", type_name: "今日说法" },
43 | { type_id: "TOPC1451378757637200", type_name: "等着我" },
44 | { type_id: "TOPC1451559129520755", type_name: "新闻直播间" },
45 | { type_id: "TOPC1451540328102649", type_name: "海峡两岸" },
46 | { type_id: "TOPC1451530382483536", type_name: "天网" },
47 | { type_id: "TOPC1451540389082713", type_name: "今日关注" },
48 | { type_id: "TOPC1665739007799851", type_name: "高端访谈" },
49 | { type_id: "TOPC1451464884159276", type_name: "开讲啦" },
50 | { type_id: "TOPC1451464884159276", type_name: "故事里的中国" },
51 | { type_id: "TOPC1514182710380601", type_name: "对话" },
52 | { type_id: "TOPC1451559038345600", type_name: "面对面" },
53 | { type_id: "TOPC1451534366388377", type_name: "是真的吗" },
54 | { type_id: "TOPC1451467630488780", type_name: "星光大道" },
55 | { type_id: "TOPC1451541414450906", type_name: "精彩音乐汇" },
56 | { type_id: "TOPC1451534421925242", type_name: "音乐厅" },
57 | { type_id: "TOPC1451541994820527", type_name: "民歌·中国" },
58 | { type_id: "TOPC1451354597100320", type_name: "中国电影报道" },
59 | { type_id: "TOPC1451469943519994", type_name: "星推荐" },
60 | { type_id: "TOPC1571217727564820", type_name: "方圆剧阵" },
61 | { type_id: "TOPC1650782829200997", type_name: "正大综艺" },
62 | { type_id: "TOPC1451530259915198", type_name: "第一时间" },
63 | { type_id: "TOPC1451465894294259", type_name: "开门大吉" },
64 | { type_id: "TOPC1451464884159276", type_name: "开讲啦" },
65 | { type_id: "TOPC1451558858788377", type_name: "共同关注" },
66 | { type_id: "TOPC1451527941788652", type_name: "军事报道" },
67 | { type_id: "TOPC1451558819463311", type_name: "新闻调查" },
68 | { type_id: "TOPC1451559097947700", type_name: "新闻30分" },
69 | { type_id: "TOPC1451559066181661", type_name: "新闻1+1" },
70 | { type_id: "TOPC1451540448405749", type_name: "今日亚洲" },
71 | { type_id: "TOPC1451559129520755", type_name: "新闻直播间" },
72 | { type_id: "TOPC1451558428005729", type_name: "24小时" },
73 | { type_id: "TOPC1451539894330405", type_name: "中国新闻" },
74 | { type_id: "TOPC1451558779639282", type_name: "午夜新闻" },
75 | { type_id: "TOPC1451558496100826", type_name: "朝闻天下" },
76 | { type_id: "TOPC1451528792881669", type_name: "晚间新闻" },
77 | { type_id: "TOPC1451559180488841", type_name: "新闻周刊" },
78 | { type_id: "TOPC1601362002656197", type_name: "经济半小时" },
79 | { type_id: "TOPC1451533652476962", type_name: "经济大讲堂" },
80 | { type_id: "TOPC1453100395512779", type_name: "正点财经" },
81 | { type_id: "TOPC1451546588784893", type_name: "生活圈" },
82 | { type_id: "TOPC1451526037568184", type_name: "生活提示" },
83 | { type_id: "TOPC1451558532019883", type_name: "东方时空" },
84 | { type_id: "TOPC1451533782742171", type_name: "经济信息联播" },
85 | { type_id: "TOPC1571034705435323", type_name: "今日环球" },
86 | { type_id: "TOPC1451543462858283", type_name: "一线" }
87 | ];
88 | const filterObj = {};
89 | return JSON.stringify({
90 | class: _.map(classes, (cls) => {
91 | cls.land = 1;
92 | cls.ratio = 1.78;
93 | return cls;
94 | }),
95 | filters: filterObj,
96 | })
97 | }
98 |
99 | async function homeVod() {
100 | const data = JSON.parse(await request(HOST + '/NewVideo/getVideoListByColumn?id=TOPC1451558856402351&n=10&sort=desc&p=1&mode=0&serviceId=tvcctv'));
101 | let videos = _.map(data.data.list, (it) => {
102 | return {
103 | vod_id: it.guid,
104 | vod_name: it.title,
105 | vod_pic: it.image,
106 | vod_remarks: it.time || '',
107 | }
108 | });
109 | return JSON.stringify({
110 | list: videos,
111 | })
112 | }
113 |
114 | async function category(tid, pg, filter, extend) {
115 | if (pg <= 0 || typeof pg == 'undefined') pg = 1;
116 | const data = JSON.parse(await request(HOST + '/NewVideo/getVideoListByColumn?id=' + tid + '&n=10&sort=desc&p=' + pg + '&mode=0&serviceId=tvcctv'));
117 | let videos = _.map(data.data.list, (it) => {
118 | return {
119 | vod_id: it.guid,
120 | vod_name: it.title,
121 | vod_pic: it.image,
122 | vod_remarks: it.time || '',
123 | }
124 | });
125 | const pgChk = JSON.parse(await request(HOST + '/NewVideo/getVideoListByColumn?id=' + tid + '&n=10&sort=desc&p=' + (parseInt(pg) + 1) + '&mode=0&serviceId=tvcctv')).data.list;
126 | const pgCount = pgChk.length > 0 ? parseInt(pg) + 1 : parseInt(pg);
127 | return JSON.stringify({
128 | page: parseInt(pg),
129 | pagecount: parseInt(pgCount),
130 | limit: 10,
131 | total: parseInt(data.total),
132 | list: videos,
133 | })
134 | }
135 |
136 | async function detail(id) {
137 | const vod = {
138 | vod_id: id,
139 | vod_remarks: '',
140 | };
141 | const playlist = ['点击播放' + '$' + 'https://hls.cntv.myhwcdn.cn/asp/hls/2000/0303000a/3/default/' + id + '/2000.m3u8'];
142 | vod.vod_play_from = key;
143 | vod.vod_play_url = playlist.join('#');
144 | return JSON.stringify({
145 | list: [vod],
146 | });
147 | }
148 |
149 | async function play(flag, id, flags) {
150 | // console.debug('视聚场 id =====>' + id); // js_debug.log
151 | return JSON.stringify({
152 | parse: 0,
153 | url: id,
154 | })
155 | }
156 |
157 | async function search(wd, quick, pg) {
158 | return '{}'
159 | }
160 |
161 | export function __jsEvalReturn() {
162 | return {
163 | init: init,
164 | home: home,
165 | homeVod: homeVod,
166 | category: category,
167 | detail: detail,
168 | play: play,
169 | search: search,
170 | }
171 | }
--------------------------------------------------------------------------------
/server/source/bililive_bytecode.js:
--------------------------------------------------------------------------------
1 | //bbQ0FUT1C0ASBiaWxpbGl2ZV9vcGVuLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4CXw5zaXRlS2V5EHNpdGVUeXBlDGNvb2tpZQpsb2dpbgZ2aXAQYmlsaV9qY3QEVUEOcmVxdWVzdBRnZXRIZWFkZXJzEmdldENvb2tpZQhpbml0CGhvbWUOaG9tZVZvZBBjYXRlZ29yeQxkZXRhaWwIcGxheQxzZWFyY2gUcmVtb3ZlVGFnc/IBTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzkxLjAuNDQ3Mi4xMTQgU2FmYXJpLzUzNy4zNgxyZXFVcmwEdWEMYnVmZmVyBnJlcwZyZXEMbWV0aG9kFFVzZXItQWdlbnQOaGVhZGVycw50aW1lb3V0DmNvbnRlbnQOaXNFbXB0eQxyZXN1bHQgc2V0Q29va2llSGVhZGVyczBodHRwczovL3d3dy5iaWxpYmlsaS5jb20Uc2V0LWNvb2tpZQZtYXAEa2sCOwZjZmcOY29va2llcwhza2V5CnN0eXBlBmV4dBxoYXNPd25Qcm9wZXJ0eRRzdGFydHNXaXRoCGh0dHAOZm9yRWFjaApwYXJzZVhodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL25hdghkYXRhDmlzTG9naW4SdmlwU3RhdHVzEGluY2x1ZGVzAj0MZmlsdGVyCGxpbmsOY2xhc3NlcxJmaWx0ZXJPYmoQc29ydE5hbWWqAWh0dHBzOi8vYXBpLmxpdmUuYmlsaWJpbGkuY29tL3hsaXZlL3dlYi1pbnRlcmZhY2UvdjEvaW5kZXgvZ2V0V2ViQXJlYUxpc3Q/c291cmNlX2lkPTIIZWFjaAUfdTttDHNvcnRCeRJzdHJpbmdpZnkOZmlsdGVycwRpdBJmaWx0ZXJBbGwQdHlwZU5hbWUMdHlwZUlkFGZpbHRlckRhdGEIYXJlYRRhcmVhVmFsdWVzBGlkCHB1c2gOdHlwZV9pZBJ0eXBlX25hbWUIbGFuZApyYXRpbwhsaXN0BmtleQUGUjpTBWhR6JACbgJ2BGV4AmMOaW5kZXhPZghodG1sDHZpZGVvc6IBaHR0cHM6Ly9hcGkubGl2ZS5iaWxpYmlsaS5jb20vcm9vbS92MS9yb29tL2dldF91c2VyX3JlY29tbWVuZD9wYWdlPTEmcGFnZV9zaXplPTIwBnBpYxhzeXN0ZW1fY292ZXIELy8MaHR0cHM6DHJvb21pZAx2b2RfaWQKdGl0bGUQdm9kX25hbWUOdm9kX3BpYwU92EHcGHdhdGNoZWRfc2hvdxR0ZXh0X3NtYWxsCSAAIAA82JndCnVuYW1lFnZvZF9yZW1hcmtzBnRpZARwZwxleHRlbmTAAWh0dHBzOi8vYXBpLmxpdmUuYmlsaWJpbGkuY29tL3hsaXZlL3dlYi1pbnRlcmZhY2UvdjEvc2Vjb25kL2dldExpc3Q/cGxhdGZvcm09d2ViJnBhcmVudF9hcmVhX2lkPRImYXJlYV9pZD0uJnNvcnRfdHlwZT1vbmxpbmUmcGFnZT0IcGFnZRBudW1QYWdlcxJwYWdlY291bnQQcGFnZXNpemUKbGltaXQUbnVtUmVzdWx0cwp0b3RhbBJkZXRhaWxVcmwUZGV0YWlsRGF0YQZyaWQWbGl2ZV9zdGF0dXMGdm9keGh0dHBzOi8vYXBpLmxpdmUuYmlsaWJpbGkuY29tL3Jvb20vdjEvUm9vbS9nZXRfaW5mbz9yb29tX2lkPQ5yb29tX2lkCwBfrWT2ZfSVGv8SbGl2ZV90aW1lDnJlcGxhY2UCLQIuBypnAF+tZBBrZXlmcmFtZSBwYXJlbnRfYXJlYV9uYW1lBC0tEmFyZWFfbmFtZRB2b2RfdHlwZQk/YvSV91Ma/wsAMFUASQBEABr/BnVpZAMAMBJ2b2RfYWN0b3IYdm9kX2RpcmVjdG9yFmRlc2NyaXB0aW9uFnZvZF9jb250ZW50CVOQf5UoV79+GnZvZF9wbGF5X2Zyb20/ZgBsAHYAv37vjZ9TO3UkAHAAbABhAHQAZgBvAHIAbQA9AHcAZQBiACYAcQB1AGEAbABpAHQAeQA9ADQAXwBBIwBmAGwAdgC/fu+N2JoFbiQAcABsAGEAdABmAG8AcgBtAD0AdwBlAGIAJgBxAHUAYQBsAGkAdAB5AD0AMwBfAD0jAGgANQC/fu+Nn1M7dSQAcABsAGEAdABmAG8AcgBtAD0AaAA1ACYAcQB1AGEAbABpAHQA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
--------------------------------------------------------------------------------
/server/source/lbgs_book_open.js:
--------------------------------------------------------------------------------
1 | //bbQ0FUT1CiARhsYmdzX29wZW4uanMsYXNzZXRzOi8vanMvbGliL2NhdC5qcxxfX2pzRXZhbFJldHVybgxDcnlwdG8KZGF5anMCXwZrZXkMZGV2aWNlDnNpdGVLZXkQc2l0ZVR5cGUUYXBwVmVyc2lvbgphcHBVQQ5hcHBEYXRhGG5hdGl2ZUVuY29kZQRwawp4bmFtZRhiYXNlNjRFbmNvZGUYYmFzZTY0RGVjb2RlGmZvcm1hdFBsYXlVcmwOY2hhclN0cg5yYW5kU3RyFHJhbmREZXZpY2UOcmVxdWVzdAhpbml0CGhvbWUOaG9tZVZvZAxpbWdVcmwQY2F0ZWdvcnkMZGV0YWlsCHBsYXkMc2VhcmNoDGxhb2JhaQoxLjEuN7AJSEJrWkZCdDZkMzU5ZHhGa1lYdDZjWEVaZjN4b0dSa1VHeFU0ZEgxd2MzMWVlSGg2VlZKRlVWcGRjd0JCQ0hCNFpYeDNkWFYyZFhsakFYVjBlSDEyZWxGemNYaGxmSEJBWjA1WlRGQk1BMngwVzFwc2RVSnhTbjVoWVQ1blNXOTNRRkpCZEY5RVRWSUVER0o3WlVwYVgxZE9iMkpCYkdCT1Uxd01ZQTlPZWt4a2NGUkdYQXAzWG1oakJWVkVjbUlBVDJoeEN3d0xTVjE2WVIwWE9CSjllRXRqZkc1eERuOFNVRzVjZmxwOVQwRlFYR0Z2WlZ3RGNRRmhaSFFIQ0ZSblpnQmlmbVlOWW5oaVJnTjNVRXhWZWtJT1dWSm5DMXR1ZkhVRVNraytaa3Q3YTJKcWJGZ0haMVpUWFhGWGJnQitaVVJ0U1dGelYxRi9YMUJGUmw1eVQyUmZjbnBFQWdOV1VYUUxjM2h3VlhCTVQyRk1XbkJSRFFOQllYUllRamdOZlhBQUcwUmRSR2hHYm1aTUFYZHdVMWRBUkVwNFF3TUNZVjE3ZjJGMUIxNTNjVmhXVjNKYVNRQnlSSDFrY2dKcVhuQk1FZ2hBQmdGK0NBSVNCM0JCUGxGdlgwcGZVRlZBZFcxK2FGTUpVVk5kZlhwYmNXdGxVMzVNVm5OamNBWkFYQTFxQ2tCTGRsbFRZVk5BQVdoZldtTkFUQXhqZG1wZ1gzVjBRWEYwZUg4NFVFTndkWFZsZUhReUh4UVpGQnh4ZW4wV2FHZDdlSEJ5Rkg5OGJ4VWZGQmtVemFiYWNkZWZnaGprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODkCZQJhAnQCchhmcm9tQ2hhckNvZGUUY2hhckNvZGVBdAZlbmMMQmFzZTY0EnN0cmluZ2lmeQhVdGY4CnBhcnNlCHRyaW0UcmVwbGFjZUFsbA5yZXBsYWNlAiACbgxyYW5kb20MSHVhd2VpCmJyYW5kHEhVQVdFSSBNYXRlIDIwCm1vZGVsDnJlbGVhc2UWdG9VcHBlckNhc2UOYnVpbGRJZAZyZXEMbWV0aG9kFFVzZXItQWdlbnQYaHR0cF9yZWZlcmVyDlJlZmVyZXIOaGVhZGVycwhkYXRhCHBvc3QIZm9ybRBwb3N0VHlwZQ5jb250ZW50CHNrZXkKc3R5cGUKbG9jYWwOaXNFbXB0eRZ0b0xvd2VyQ2FzZQRpZEBEYWx2aWsvMi4xLjAgKExpbnV4OyBVOyBBbmRyb2lkIAQ7IA4gQnVpbGQvAikEdWE6KE1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCDEATsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS82OC4wLjM0NDAuNzAgTW9iaWxlIFNhZmFyaS81MzcuMzYpVGh0dHBzOi8vbGFncy5vc3MtY24taGFuZ3pob3UuYWxpeXVuY3MuY29tLwouanNvbhgkNmMxY2VmNzhhZT0IcnNhWBJSU0EvUEtDUzECLwJvAmkCcxBqc29uX3VybBxjYXQvaW5kZXguanNvbgp0aXRsZQUGUnt8CHR5cGUFe3yLVwxyZWR1Y2UKdHlwZXMCdghzb3J0BZJjj14GaG90CHB1c2gF2J6kiwXtcOiVBd6PfY8Mc2VyaWFsBYxb034OdHlwZV9pZBJ0eXBlX25hbWUOZmlsdGVycxRzdGFydHNXaXRoCGh0dHAOaW1nX3VybAJwEmNhdF9saXN0Lwpib29rcw5ib29rX2lkEmJvb2tfbmFtZQZwaWMQYm9va19waWMYYm9va19yZW1hcmtzCHBhZ2UMc2Nyb2xsEnBhZ2Vjb3VudApsaW1pdAp0b3RhbAhsaXN0CmNvbnQvCmF1ZGlvCHRpbWUSYm9va195ZWFyEmJvb2tfYXJlYQx0ZWxsZXIUYm9va19hY3Rvchpib29rX2RpcmVjdG9yEHN5bm9wc2lzGGJvb2tfY29udGVudAZtYXAScGxheV9kYXRhAiMFZk53Uw52b2x1bWVzCHVybHMCJAItDnBsYXlfaWQIdW5peAJtCG1kNVgGYWlkBnBpZA5hcGlfdXJsJGVuY29kZVVSSUNvbXBvbmVudAxwYXJhbXMOdmVyc2lvbgZ1cmwOcmVmZXJlcgxoZWFkZXIQc2VhcmNoMDAPpAMBpgMBAB2oAwADAKoDAAGsAwACrgMADgAGAaABAAAAAR4SlgEAqgMADKwDAQyuAwIMsAMACbIDAQm0AwIJtgMDCbgDBAm6AwUJvAMGCb4DBwnAAwgJwgMJAcQDCgHGAwsByAMMAcoDDQ3MAw4BzgMPAdADEAHSAxEB1AMSAdYDEwHYAxQB2gMVAdwDFgGGAhcB3gMYAeADGQGoAxoBCOhSvgJfDQC+A18OAL4EXw8AvgVfEQC+Bl8SAL4HXxMAvghfFAC+CV8VAL4KXxYAvgtfFwC+DF8YAL4NXxkAvg5fGgC+D18bAL4QXxwAvhFfHQApBPEAAADiC18EAL9fBQCzXwYABPIAAABfBwC/XwgAC18JAL0AXwoABPMAAABfCwC+AU3hAAAAXwwABPQAAABfEAAppAMBBAEAVAIHFDE0NDk2ODI5NDkOQwYBAAICAggAAFIE6gMAAQDsAwABAO4DAQAg8AMCASBhAAC/x2EBALPIYgEAz+ej6D1iAAA4kwAAAEL5AAAAz0L6AAAAYgEAJAEA0EL6AAAAYgEA0OecJAEAriQBAJ0RYwAADmIBAJFjAQAO6r1iAAAopAMBAA5DBgHEAwEAAQUBACsB6gMAAQCqAwAMZQAAQfsAAABB/AAAAEL9AAAAZQAAQfsAAABB/gAAAEL/AAAAzyQBACUBAKQDAQAOQwYBxgMBAAEGAwAyAeoDAAEAwgMMAKoDAAy+AwoI22UBAEH7AAAAQf4AAABC/QAAAGUBAEH7AAAAQfwAAABC/wAAAM8kAQAkAQBlAgAjAgCkAwEADkMGAcgDAgACBAAEOwLqAwABAOwDAAEA0EIAAQAAJAAAQgEBAADPvyQCAEICAQAAvQC9ATO/JAIAQgIBAAC9Ar0DMwQDAQAAJAIAQgABAAAlAACkAwEABw88AHwAPgB8AAowfAALMAeCAQEBADoAAAAIBgAAAAQH9f///wsACSIAAAAJFQAAAAkIAAAAATwABwMAAAABPgAHAwAAAAEKMAcDAAAAAQswDAAKBwhcJHwjB04BAQAgAAAACAYAAAAEB/X///8LAAkIAAAAASQABwMAAAABIwAMAAoOQwYBzAMCBAIFAgBJBuoDAAEA7AMAAQDuAwAAAPADAQAgiAQAAQDqAwMCIK4DAgzKAxAMYQEAv8cG0KsR6QMO0MizycXPo+gzYQMAZQAAQgUBAACzYgEA6AllAQDntJ7qCGUBAOe7C54kAgDKw2UBAGIDAEedx5MC6srDKKQDAQAOQwYBzgMAAAAGAgFNAMwDEQCuAwIMCwQGAQAATAcBAAAECAEAAEwJAQAAvQBMCgEAANu2tJbuQgsBAAAkAABlAQBCBQEAALsLu2MkAgCd27S0lu5CCwEAACQAAJ1MDAEAACikAwEABwQxMA5iBgHQAwMAAwUCAFED6gMAAQDsAwABAO4DAAEAugMICLwDCQg4DQEAANALz0wOAQAAC2UAAEwPAQAAZQEAQRABAABMEQEAAEwSAQAA0RHpAw4LTBMBAAAEFAEAAM+p6AgEFQEAAOoCv0wWAQAA7otBFwEAAC6kAwEADmIGAdIDAQgBDQ0A2gMJ6gMAAQDsAwAAAO4DAAEA6gMEAAPqAwYAIPADAAIAiAQABQDqAwcEMOoDCAADtAMFCLYDBgiwAwMIsgMECK4DAgzOAxIAzAMRALoDCAjQAxMAuAMHCMYDDgDAAwsIvAMJCM9BGAEAABFmAAAOz0EZAQAAEWYBAA4E2QAAAMc4GgEAAEJBAAAAZQIAwyQCAIvM57Ol6CZsGgAAADiYAAAAQv8AAADEJAEAEWYDAA4O6gvJbAcAAAAO6gIvZQQAQhsBAABlAwAkAQAR6H0OXgUA7BFmAwAOZQMAXgYAuyDtQhwBAAAkAABDHQEAAGUDAAQeAQAAZQMAQQoBAACdBB8BAACdZQMAQQkBAACdBCABAACdZQMAQQwBAACdBCEBAACdQyIBAAA4GgEAAEJCAAAAZQIAwziYAAAAQv0AAABlAwAkAQAkAwCLDgQjAQAAZQMAQQoBAACdBB8BAACdZQMAQQkBAACdBCABAACdZQMAQQwBAACdBCQBAACdEWYHAA5srgAAAGEDAF4IAARBAAAABCUBAABlCQCdBCYBAACd7ovKOJgAAABC/wAAAGIDACQBAEETAQAAQl0AAAAEJwEAACQBAMEEv8EFYQYAwAR96ifBBsAFOCgBAAAEKQEAALOWtJZiBgCzll4KAGULAO20liIHAJ3BBYAA6NcOgziYAAAAQv8AAADABSQBABFmDAAOZQwAQSIBAAAEKgEAAJ1lCQCdZQcAnRFmBwAODuoMwQdsBwAAAA7qAi8GLqQDAQAOYgYB1AMBCgEIAwHQAwvqAwABAOwDAQAg7gMBASDwAwECIIgEAQMg6gMCBDDsAwMFIO4DAwYg1gQAAADYBAMHINoEAwkg0AMTALwDCQiuAwIMYQMAYQIAYQEAYQAA2wRBAAAAZQEAQS4BAAAELwEAAJ3ui8c4mAAAAEL/AAAAYgAAJAEAQRMBAADIJgAAyQvKYQQAYgEAfethAcEEYQkAYQgAYQYAYQUAYgQAQTABAABCAgEAAAQxAQAAvyQCAMEFCwQyAQAATNgAAAAEMwEAAEw2AAAAwQZlAgBCNAEAAGIEAEE1AQAAvgAmAAAkAwDBB2IGAMAHs0dBNgEAAEPpAAAAYgYAwAdDQAAAAAsENwEAAEzYAAAABDgBAABMNgAAAAQ5AQAATOkAAADBCCYAAMEJYgkAQjoBAAALBDsBAABMBAEAAARXAAAATDYBAAAkAQAOYgkAQjoBAAALBDwBAABMBAEAAAQ5AQAATDYBAAAkAQAOYgkAQjoBAAALBD0BAABMBAEAAAQ+AQAATDYBAAAkAQAOYgkAQjoBAAALBD8BAABMBAEAAARpAAAATDYBAAAkAQAOYggAYgkAQ0AAAABiAwBiBgBB6QAAAHFiBgBiCAAmAgBJYgIAQjoBAAALYgYAQekAAABMQAEAAGIFAExBAQAAJAEADoAAaZ7+//8OgziYAAAAQv0AAAALYgIATB4AAABiAwBMQgEAACQBAC6kAwEADkIGAQACAAIEAAAjAuoDAAEA7AMAAQDPQjoBAAAL0EE2AAAATAQBAADQQUABAABMNgEAACQBAA7PKKQDAQAOYgYB1gMAAAABAAACAAYupAMBAA5DBgHYAwEAAQMBAB0B6gMAAQC8AwkIz0JDAQAABEQBAAAkAQDoA88oZQAAQUUBAADPnSikAwEADmIGAdoDBAYECAMAogIK6gMAAQDsAwABAO4DAAEA8AMAAQCIBAEAINYEAQEg2AQBAiDaBAEDIIwFAQQg6gMCBTDQAxMAvAMJCNgDFwBhBABhAwBhAgBhAQBhAACz0KkR6AQOtNgO0kEyAQAAEekDDs/H0kE3AQAAEekHDgQ5AQAAyNsEQQAAAGUBAEEuAQAABEcBAACdYgAAnQQqAQAAnWIBAJ0EKgEAAJ3QnQQmAQAAne6LyTiYAAAAQv8AAABiAgAkAQBBEwEAAMomAADBBGEFAGIDAEFIAQAAfepGwQViBABCOgEAAAtiBQBBSQEAAExJAQAAYgUAQTYAAABMSgEAAN1iBQBBSwEAAO1MTAEAAGIFAEGIAAAATE0BAAAkAQAOgADouA6DOJgAAABC/QAAAAvQTE4BAAC0YgMAQU8BAACp6AbQtJ3qAtBMUAEAALznA0xRAQAAAf/g9QVMUgEAAGIEAExTAQAAJAEALqQDAQAOYgYB3AMBBAEEBQGNAgXqAwABAOwDAQAg7gMBAWDwAwECYIgEAQMgyAMPANADEwC8AwkI2AMXAK4DAgxhAwBhAgBhAQBhAADcBEEAAABlAgBBLgEAAARUAQAAnc+dBCYBAACd7ovHOJgAAABC/wAAAGIAACQBAEETAQAAyAu0TFUBAABiAQBBSQEAAExJAQAAYgEAQTYAAABMSgEAAN5iAQBBSwEAAO1MTAEAAL9MQQEAAGIBAEFWAQAATFcBAAC/TFgBAABiAQBBiAAAAExNAQAAYgEAQVkBAABMWgEAAL9MWwEAAGIBAEFcAQAATF0BAADJZQQAQl4BAABiAQBBXwEAAL4AJAIAQlsAAAAEYAEAACQBAMpiAgAEYQEAAENiAQAAYgIAYgMAQ2MBAAA4mAAAAEL9AAAAC2ICACYBAExTAQAAJAEALqQDAQAOQwYBAAEAAQMDAC0B6gMAAQDIAwAA8AMCCe4DAQnbZQEAQUoBAADPQTYAAADuBGQBAACdZQIAQUkBAACdBGUBAACdz0FmAQAAnSikAwEADmIGAYYCAgACAQAAAgLqAwABAOwDAAEABi6kAwEADmIGAd4DAwcDCQgAwQIK6gMAAQDsAwABAO4DAAEA8AMAAADqAwIAIO4DAgIgiAQAAQDYBAIDINYEAAQA6gMDAAOsAwEMvgMKCMYDDgDAAwsI0AMTALwDCQi4AwcIugMICGwiAQAAYQQAYQIAYQEA0EJdAAAABGUBAAAkAQDHZQAA7EJnAQAAJAAAyGIBAGIBALs8nJ4RYwEADgsE7wAAAExoAQAAOGkBAAA4aQEAAATvAAAAw7NHncO0R53tZQEAnWIBAJ3tTPcAAADDs0dMagEAAMO0R0xrAQAAyTgoAQAABCkBAACzlrOWOJgAAABC/QAAAGICACQBALSW3WUDAO2zliIHAMpeBAAEFAEAAGUFAEFsAQAACzhtAQAAxu1MbgEAADhtAQAAZQYA7UxvAQAA74vBBDiYAAAAQv8AAABiBAAkAQBBEwEAAMEFOJgAAABC/QAAAAvABUFwAQAATHABAAALZQcATA8BAABlBQBBcQEAAEwRAQAATHIBAAAkAQAPLsEGbBoAAAA4mAAAAEL9AAAAC9BMcAEAACQBAA8uL6QDAQAOYgYB4AMDBwMICADKAgrqAwABAOwDAAEA7gMAAQDwAwEAIIgEAQEg1gQAAADYBAECINoEAAMAjAUBBCDqAwIGMKwDAQy+AwoIxgMOAMADCwjQAxMAvAMJCLgDBwjYAxcAYQUAYQMAYQEAYQAAZQAA7EJnAQAAJAAAx2IAAGIAALs8nJ4RYwAADgsE8AAAAExoAQAAOGkBAAA4aQEAAARzAQAA7WUBAJ1iAACd7Uz3AAAAs0xqAQAAs0xrAQAAz0zYAAAAyDgoAQAABCkBAACzlrOWOJgAAABC/QAAAGIBACQBALSW3WUDAO2zliIHAMleBAAEFAEAAGUFAEFsAQAACzhtAQAAxe1MbgEAADhtAQAAZQYA7UxvAQAA74vKOJgAAABC/wAAAGIDACQBAEETAQAAwQQmAADBBWEGAMAEQUgBAAB96kjBBmIFAEI6AQAAC2IGAEFJAQAATEkBAABiBgBBNgAAAExKAQAAXgcAYgYAQUsBAADtTEwBAABiBgBBiAAAAExNAQAAJAEADoAA6LYOgziYAAAAQv0AAAALYgUATFMBAAAkAQAupAMBAA5DBgGoAwAAAAIHADIA0gMUANQDFQDWAxYA2gMYANwDGQDeAxsA4AMcAAvbTOkAAADcTOoAAADdTOsAAADeTO0AAABeBABM7gAAAF4FAEzvAAAAXgYATPAAAAAopAMBAA==
--------------------------------------------------------------------------------
/server/api/utils/douban_query_config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | hot_gaia: {
3 | area: '全部',
4 | sort: 'recommend',
5 | playable: 0,
6 | loc_id: 0,
7 | start: 0,
8 | count: 30,
9 | udid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
10 | rom: 'android',
11 | apikey: '0dad551ec0f84ed02907ff5c42e8ec70',
12 | s: 'rexxar_new',
13 | channel: 'Yingyongbao_Market',
14 | timezone: 'Asia/Shanghai',
15 | device_id: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
16 | os_rom: 'android',
17 | apple: 'c52fbb99b908be4d026954cc4374f16d',
18 | mooncake: '0f607264fc6318a92b9e13c65db7cd3c',
19 | sugar: 0,
20 | _sig: '3lJUfuP%2BtXop8VsJXZRVFSJQUy0%3D',
21 | _ts: 1705302414,
22 | },
23 | tv_hot: {
24 | area: '全部',
25 | sort: 'recommend',
26 | playable: 0,
27 | loc_id: 0,
28 | start: 0,
29 | count: 30,
30 | udid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
31 | uuid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
32 | rom: 'android',
33 | apikey: '0dad551ec0f84ed02907ff5c42e8ec70',
34 | s: 'rexxar_new',
35 | channel: 'Yingyongbao_Market',
36 | timezone: 'Asia/Shanghai',
37 | device_id: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
38 | os_rom: 'android',
39 | apple: 'c52fbb99b908be4d026954cc4374f16d',
40 | mooncake: '0f607264fc6318a92b9e13c65db7cd3c',
41 | sugar: 0,
42 | _sig: 'y2mdM4lEmm7%2FeQeOdIW8%2BHZ4z8A%3D',
43 | _ts: 1705302456,
44 | },
45 | tv_domestic: {
46 | area: '全部',
47 | sort: 'recommend',
48 | playable: 0,
49 | loc_id: 0,
50 | start: 0,
51 | count: 30,
52 | udid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
53 | uuid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
54 | rom: 'android',
55 | apikey: '0dad551ec0f84ed02907ff5c42e8ec70',
56 | s: 'rexxar_new',
57 | channel: 'Yingyongbao_Market',
58 | timezone: 'Asia/Shanghai',
59 | device_id: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
60 | os_rom: 'android',
61 | apple: 'c52fbb99b908be4d026954cc4374f16d',
62 | mooncake: '0f607264fc6318a92b9e13c65db7cd3c',
63 | sugar: 0,
64 | _sig: 'XlGMiSYUGQYMBCsl0sLoI8%2FSF20%3D',
65 | _ts: 1705302992,
66 | },
67 | tv_american: {
68 | area: '全部',
69 | sort: 'recommend',
70 | playable: '0',
71 | loc_id: '0',
72 | start: '0',
73 | count: '30',
74 | udid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
75 | uuid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
76 | rom: 'android',
77 | apikey: '0dad551ec0f84ed02907ff5c42e8ec70',
78 | s: 'rexxar_new',
79 | channel: 'Yingyongbao_Market',
80 | timezone: 'Asia/Shanghai',
81 | device_id: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
82 | os_rom: 'android',
83 | apple: 'c52fbb99b908be4d026954cc4374f16d',
84 | mooncake: '0f607264fc6318a92b9e13c65db7cd3c',
85 | sugar: '0',
86 | _sig: 'aIYuffW19sE0YTfQTU0WLpqze18=',
87 | _ts: '1705303029',
88 | },
89 | tv_japanese: {
90 | area: '全部',
91 | sort: 'recommend',
92 | playable: '0',
93 | loc_id: '0',
94 | start: '0',
95 | count: '30',
96 | udid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
97 | uuid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
98 | rom: 'android',
99 | apikey: '0dad551ec0f84ed02907ff5c42e8ec70',
100 | s: 'rexxar_new',
101 | channel: 'Yingyongbao_Market',
102 | timezone: 'Asia/Shanghai',
103 | device_id: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
104 | os_rom: 'android',
105 | apple: 'c52fbb99b908be4d026954cc4374f16d',
106 | mooncake: '0f607264fc6318a92b9e13c65db7cd3c',
107 | sugar: '0',
108 | _sig: '3qFWsGMO%2Ba3RZpExjOogeNeByVw%3D',
109 | _ts: '1705303100',
110 | },
111 | tv_korean: {
112 | area: '全部',
113 | sort: 'recommend',
114 | playable: '0',
115 | loc_id: '0',
116 | start: '0',
117 | count: '30',
118 | udid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
119 | uuid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
120 | rom: 'android',
121 | apikey: '0dad551ec0f84ed02907ff5c42e8ec70',
122 | s: 'rexxar_new',
123 | channel: 'Yingyongbao_Market',
124 | timezone: 'Asia/Shanghai',
125 | device_id: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
126 | os_rom: 'android',
127 | apple: 'c52fbb99b908be4d026954cc4374f16d',
128 | mooncake: '0f607264fc6318a92b9e13c65db7cd3c',
129 | sugar: '0',
130 | _sig: '3Y3FKIAfRKPzsEwx2uBrS477q2w=',
131 | _ts: '1705303354',
132 | },
133 | tv_animation: {
134 | area: '全部',
135 | sort: 'recommend',
136 | playable: '0',
137 | loc_id: '0',
138 | start: '0',
139 | count: '30',
140 | udid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
141 | uuid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
142 | rom: 'android',
143 | apikey: '0dad551ec0f84ed02907ff5c42e8ec70',
144 | s: 'rexxar_new',
145 | channel: 'Yingyongbao_Market',
146 | timezone: 'Asia/Shanghai',
147 | device_id: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
148 | os_rom: 'android',
149 | apple: 'c52fbb99b908be4d026954cc4374f16d',
150 | mooncake: '0f607264fc6318a92b9e13c65db7cd3c',
151 | sugar: '0',
152 | _sig: 'wonumurCi2SyYGlSTv0uKPSIVP8=',
153 | _ts: '1705303359',
154 | },
155 | show_hot: {
156 | area: '全部',
157 | sort: 'recommend',
158 | playable: '0',
159 | loc_id: '0',
160 | start: '0',
161 | count: '30',
162 | udid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
163 | uuid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
164 | rom: 'android',
165 | apikey: '0dad551ec0f84ed02907ff5c42e8ec70',
166 | s: 'rexxar_new',
167 | channel: 'Yingyongbao_Market',
168 | timezone: 'Asia/Shanghai',
169 | device_id: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
170 | os_rom: 'android',
171 | apple: 'c52fbb99b908be4d026954cc4374f16d',
172 | mooncake: '0f607264fc6318a92b9e13c65db7cd3c',
173 | sugar: '0',
174 | _sig: 'MDXMiUkiWeNJXrRyZdFK7HkoeTk=',
175 | _ts: '1705303361',
176 | },
177 | tag_movie: {
178 | sort: 'U',
179 | start: '0',
180 | count: '30',
181 | q: '全部形式,全部类型,全部地区,全部年代',
182 | score_rang: '0,10',
183 | udid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
184 | rom: 'android',
185 | apikey: '0dad551ec0f84ed02907ff5c42e8ec70',
186 | s: 'rexxar_new',
187 | channel: 'Yingyongbao_Market',
188 | timezone: 'Asia/Shanghai',
189 | device_id: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
190 | os_rom: 'android',
191 | apple: 'c52fbb99b908be4d026954cc4374f16d',
192 | mooncake: '0f607264fc6318a92b9e13c65db7cd3c',
193 | sugar: 0,
194 | _sig: 'FAnj6IZIGjeDZyO1qMVDI4Hf9mg%3D',
195 | _ts: 1705302555,
196 | },
197 | movie_top250: {
198 | area: '%E5%85%A8%E9%83%A8',
199 | sort: 'recommend',
200 | playable: 0,
201 | loc_id: 0,
202 | start: 0,
203 | count: 30,
204 | udid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
205 | rom: 'android',
206 | apikey: '0dad551ec0f84ed02907ff5c42e8ec70',
207 | s: 'rexxar_new',
208 | channel: 'Yingyongbao_Market',
209 | timezone: 'Asia/Shanghai',
210 | device_id: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
211 | os_rom: 'android',
212 | apple: 'c52fbb99b908be4d026954cc4374f16d',
213 | mooncake: '0f607264fc6318a92b9e13c65db7cd3c',
214 | sugar: 0,
215 | _sig: 'JR4xGUK82eIjBwBlDurmDcXEj1g%3D',
216 | _ts: 1705303613,
217 | },
218 | movie_rank: {
219 | count: 30,
220 | category: 'recent_hot',
221 | udid: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
222 | rom: 'android',
223 | apikey: '0dad551ec0f84ed02907ff5c42e8ec70',
224 | s: 'rexxar_new',
225 | channel: 'Yingyongbao_Market',
226 | timezone: 'Asia/Shanghai',
227 | device_id: 'pelgyyle5caas2ny2hkvsrjesbrvge7mdsazfg0n',
228 | os_rom: 'android',
229 | apple: 'c52fbb99b908be4d026954cc4374f16d',
230 | mooncake: '0f607264fc6318a92b9e13c65db7cd3c',
231 | sugar: 0,
232 | _sig: 'OwLtLjbIBEhgeiBijmOLid7QLlg%3D',
233 | _ts: 1705303573,
234 | },
235 | };
236 |
--------------------------------------------------------------------------------
/pages/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | 热播
12 | 片库
13 | top250
14 |
15 |
16 |
17 |
18 |
19 |
20 | {{ item.name }}
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | {{ it }}
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | {{ tag }}
45 |
46 |
47 |
48 |
49 |
50 |
53 |
54 |
55 |
56 |
57 |
58 |
61 |
62 |
63 |
64 |
65 |
66 |
187 |
188 |
266 |
--------------------------------------------------------------------------------
/server/source/230ts_book_open.js:
--------------------------------------------------------------------------------
1 | // 网站搜索异常
2 | import { load, _ } from './lib/cat.js';
3 |
4 | let key = '爱上你听书网';
5 | let HOST = 'https://wap.230ts.net';
6 | let siteKey = '';
7 | let siteType = 0;
8 | const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36';
9 |
10 | async function request(reqUrl, agentSp) {
11 | let res = await req(reqUrl, {
12 | method: 'get',
13 | headers: {
14 | 'User-Agent': agentSp || MOBILE_UA,
15 | 'Referer': HOST
16 | },
17 | });
18 | return res.content;
19 | }
20 |
21 | // cfg = {skey: siteKey, ext: extend}
22 | async function init(cfg) {
23 | siteKey = cfg.skey;
24 | siteType = cfg.stype;
25 | }
26 |
27 | async function home(filter) {
28 | const html = await request(HOST + '/sort/');
29 | const $ = load(html);
30 | let filterObj = {};
31 | const class_parse = $('dl.pd-class:first > dd > a[href*=sort]');
32 | let classes = [];
33 | classes = _.map(class_parse, (cls) => {
34 | let typeId = cls.attribs['href'];
35 | typeId = typeId.replace(/.*?\/sort\/(.*).html/g, '$1');
36 | return {
37 | type_id: typeId,
38 | type_name: cls.children[0].data,
39 | };
40 | });
41 | const sortName = ['玄幻有声', '灵异有声', '综艺娱乐', '长篇评书', '都市有声', '军事有声', '职场有声', '其他有声'];
42 | classes = _.sortBy(classes, (c) => {
43 | const index = sortName.indexOf(c.type_name);
44 | return index === -1 ? sortName.length : index;
45 | });
46 | return JSON.stringify({
47 | class: classes,
48 | filters: filterObj,
49 | });
50 | }
51 |
52 | async function homeVod() {
53 | const link = HOST + '/top/lastupdate/1.html';
54 | const html = await request(link);
55 | const $ = load(html);
56 | const items = $('ul.list-ul > li');
57 | let videos = _.map(items, (item) => {
58 | const it = $(item).find('a:first')[0];
59 | const img = $(item).find('img:first')[0];
60 | const remarks = $($(item).find('p.module-slide-author')[0]).text().trim();
61 | return {
62 | vod_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'),
63 | vod_name: it.attribs.title.replace('有声小说',''),
64 | vod_pic: HOST + img.attribs['data-original'],
65 | vod_remarks: remarks || '',
66 | };
67 | });
68 | return JSON.stringify({
69 | list: videos,
70 | });
71 | }
72 |
73 | async function category(tid, pg, filter, extend) {
74 | if (pg <= 0) pg = 1;
75 | const link = HOST + '/sort/' + tid +'/' + (`${pg}`) + '.html';
76 | const html = await request(link);
77 | const $ = load(html);
78 | const items = $('ul.book-ol > li');
79 | let videos = _.map(items, (item) => {
80 | const it = $(item).find('a:first')[0];
81 | const img = $(item).find('img:first')[0];
82 | const remarks = $($(item).find('div.book-meta')[0]).text().trim();
83 | return {
84 | book_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'),
85 | book_name: it.attribs.title.replace('有声小说',''),
86 | book_pic: HOST + img.attribs['data-original'],
87 | book_remarks: remarks.replace('佚名(著)','').replace('佚名(播)','').replace('未知(著)','').replace('未知(播)','') || '',
88 | };
89 | });
90 | const hasMore = $('div.paging > a:contains(下一页)').length > 0;
91 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
92 | return JSON.stringify({
93 | page: parseInt(pg),
94 | pagecount: pgCount,
95 | limit: 24,
96 | total: 24 * pgCount,
97 | list: videos,
98 | });
99 | }
100 |
101 | async function detail(id) {
102 | const html = await request(HOST + '/tingshu/' + id);
103 | const $ = load(html);
104 | const detail = $('div.book-cell:first > div');
105 | let vod = {
106 | book_id: id,
107 | type_name: $('h1:first').text().trim().replace('有声小说',''),
108 | // vod_pic: HOST + $('div.myui-content__thumb img:first').attr('data-original'),
109 | // vod_content: $('div.ellipsis').text().trim(),
110 | book_year: '',
111 | book_area: '',
112 | book_remarks: '',
113 | book_actor: '',
114 | book_director: '',
115 | book_content: '',
116 | };
117 | // for (const info of detail) {
118 | // const i = $(info).text().trim();
119 | // if (i.startsWith('类型:')) {
120 | // vod.vod_type = _.map($(info).find('a'), (a) => {
121 | // return a.children[0].data;
122 | // }).join('/');
123 | // } else if (i.startsWith('作者:')) {
124 | // vod.vod_director = _.map($(info).find('a'), (a) => {
125 | // return a.children[0].data;
126 | // }).join('/');
127 | // } else if (i.startsWith('演播:')) {
128 | // vod.vod_actor = _.map($(info).find('a'), (a) => {
129 | // return a.children[0].data;
130 | // }).join('/');
131 | // } else if (i.startsWith('连载中')) {
132 | // vod.vod_remarks = i.substring(3);
133 | // }
134 | // }
135 | const playlist = _.map($('#playlist > ul > li > a'), (it) => {
136 | return it.children[0].data + '$' + it.attribs.href.replace(/\/mp3\/(.*).html/g, '$1');
137 | }).join("#");
138 | vod.volumes = '道长在线';
139 | vod.urls = playlist;
140 | // vod.vod_play_from = '道长在线';
141 | // vod.vod_play_url = playlist.join('#');
142 | return JSON.stringify({
143 | list: [vod],
144 | });
145 | }
146 |
147 | async function play(flag, id, flags) {
148 | const link = HOST + '/mp3/' + id + '.html';
149 | const html = await request(link);
150 | const $ = load(html);
151 | const iframe = $('body iframe[src*=player]');
152 | const iframeHtml = (
153 | await req(HOST + iframe[0].attribs.src, {
154 | headers: {
155 | 'Referer': link,
156 | 'User-Agent': MOBILE_UA,
157 | },
158 | })
159 | ).content;
160 | const playUrl = iframeHtml.match(/mp3:'(.*?)'/)[1];
161 | if (playUrl.indexOf('m4a') >= 0 || playUrl.indexOf('mp3') >= 0 ) {
162 | return JSON.stringify({
163 | parse: 0,
164 | url: playUrl,
165 | });
166 | } else {
167 | try {
168 | const iframeHtml = (
169 | await req(HOST + iframe[0].attribs.src, {
170 | headers: {
171 | 'Referer': link,
172 | 'User-Agent': MOBILE_UA,
173 | },
174 | })
175 | ).content;
176 | const playUrl = playUrl + '.m4a' + iframeHtml.match(/(\?.*?)'/)[1];
177 | if (playUrl.indexOf('http') >= 0) {
178 | return JSON.stringify({
179 | parse: 0,
180 | url: playUrl,
181 | });
182 | } else {
183 | const iframeHtml = (
184 | await req(HOST + iframe[0].attribs.src, {
185 | headers: {
186 | 'Referer': link,
187 | 'User-Agent': MOBILE_UA,
188 | },
189 | })
190 | ).content;
191 | const playUrl2 = iframeHtml.match(/url[\s\S]*?(http.*?)'/)[1];
192 | if (playUrl2.indexOf('\?') >= 0) {
193 | return JSON.stringify({
194 | parse: 0,
195 | url: playUrl2,
196 | });
197 | } else {
198 | const playUrl3 = playUrl2 + playUrl
199 | return JSON.stringify({
200 | parse: 0,
201 | url: playUrl3,
202 | });
203 | }
204 | }
205 | } catch (e) {}
206 | if (playUrl.indexOf('http') >= 0) {
207 | const playUrl = playUrl + '.m4a';
208 | return JSON.stringify({
209 | parse: 0,
210 | url: playUrl,
211 | });
212 | } else {
213 | const iframeHtml = (
214 | await req(HOST + iframe[0].attribs.src, {
215 | headers: {
216 | 'Referer': link,
217 | 'User-Agent': MOBILE_UA,
218 | },
219 | })
220 | ).content;
221 | const playUrl4 = iframeHtml.match(/url[\s\S]*?(http.*?)'/)[1];
222 | return JSON.stringify({
223 | parse: 0,
224 | url: playUrl4 + '.m4a',
225 | });
226 | }
227 | }
228 | }
229 |
230 | async function search(wd, quick) {
231 | const link = HOST + '/search.html?searchtype=name&searchword=' + wd +'&page=1';
232 | const html = await request(link);
233 | const $ = load(html);
234 | const items = $('ul.book-ol > li');
235 | let videos = _.map(items, (item) => {
236 | const it = $(item).find('a:first')[0];
237 | const img = $(item).find('img:first')[0];
238 | const remarks = $($(item).find('div.book-meta')[0]).text().trim();
239 | return {
240 | book_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'),
241 | book_name: it.attribs.title.replace('有声小说',''),
242 | book_pic: img.attribs['data-original'],
243 | book_remarks: remarks.replace('佚名(著)','').replace('佚名(播)','').replace('未知(著)','').replace('未知(播)','') || '',
244 | };
245 | });
246 | return JSON.stringify({
247 | list: videos,
248 | });
249 | }
250 |
251 | export function __jsEvalReturn() {
252 | return {
253 | init: init,
254 | home: home,
255 | homeVod: homeVod,
256 | category: category,
257 | detail: detail,
258 | play: play,
259 | search: search,
260 | };
261 | }
262 |
--------------------------------------------------------------------------------
/server/source/yqktv_open2.js:
--------------------------------------------------------------------------------
1 | //bbQ0FUT1C/ARp5cWt0dl9vcGVuLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4MQ3J5cHRvCmRheWpzDGppbmphMgZVcmkCXwZrZXkGdXJsDGRldmljZQ5zaXRlS2V5EHNpdGVUeXBlDnJlcXVlc3QIaW5pdAhob21lDmhvbWVWb2QSbmV4dFZhbHVlDHdvcmtlchBjYXRlZ29yeQxkZXRhaWwIcGxheQxzZWFyY2gOY2hhclN0cg5yYW5kU3RyEHJhbmRVVUlEDnJhbmRNQUMUcmFuZERldmljZRpmb3JtYXRQbGF5VXJsEmpzb25QYXJzZQp5cWt0dnphYmFjZGVmZ2hqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5AmUCdAJyAmECbwJuAnMGcmVxGm9raHR0cC8zLjE0LjkUdXNlci1hZ2VudA5jb250ZW50JHd3dy5mdXdlbnR1dGVuZy5jbhJidW5kbGVySWQOcmVnQ29kZQhpbXNpGDEwMDFfZGVmYXVsdA4xLjAuMC4xDnZlcnNpb24KbW9kZWwUZGV2aWNlSW5mbwZtYWMWdmVyc2lvbkNvZGUOcmVsZWFzZQxvc0luZm8WaXNMb3dEZXZpY2UScmVxdWVzdElkQGQ2ZDUyMGVhOTA5MDRmMWJhNjgwZWQ2YzljOWY5MDA3CmFwcElkCGltZWkIdWRpZAxhc3NpZ24Ia2V5cwxzb3J0QnkIcHVzaAI9TmFwcEtleT03MGFmNjdkMmI2Y2Y0NzY3OWIzOTdlYTRjMTg4Njg3NwZNRDUCJhZ0b0xvd2VyQ2FzZQhzaWduDmhlYWRlcnMIcG9zdAxtZXRob2QIZGF0YQhza2V5CnN0eXBlCmxvY2FsCnBhcnNlDmlzRW1wdHkEaWQSc3RyaW5naWZ5RGh0dHBzOi8vY29uLmxicGNydy5jb20vY29uZmlnLmpzb248L3YxL2FwaS9zZWFyY2gvZ2V0U2VhcmNoRmlsdGVyFGZpbHRlckxpc3QeZmlsdGVyVmFsdWVMaXN0DnR5cGVfaWQSdHlwZV9uYW1lEHBhcnNlSW50BHt9MC92MS9hcGkvdm9kV29ya2VyL2RldGFpbBZ2b2RXb3JrZXJJZA52b2RMaXN0DHJlbWFyawh0cmltCnNjb3JlBjAuMAp2b2RJZAx2b2RfaWQOdm9kTmFtZRB2b2RfbmFtZRBjb3ZlckltZw52b2RfcGljAiAWdm9kX3JlbWFya3MIcGFnZRJwYWdlY291bnQIbGlzdAJpAmQCYwJsAnUUc3RhcnRzV2l0aA52X3dvcmtfDHN1YnN0chJjaGFubmVsSWQUZmlsdGVyTmFtZQxhcmVhSWQFMFc6Uwh5ZWFyBXRe/U4kY2hhbm5lbENoaWxkVHlwZUlkBXt8i1cFaFHokAJ2EHNvcnRMaXN0EHNvcnRUeXBlBZJjj14Qc29ydE5hbWUSZmlsZXJOYW1lFGZpbGVyVmFsdWUccXVlcnlWYWx1ZUpzb24ObmV4dFZhbC4vdjEvYXBpL3NlYXJjaC9xdWVyeU5vdw5oYXNOZXh0Cml0ZW1zDGZpbHRlciwvdjEvYXBpL3ZvZEluZm8vZGV0YWlsFmNoYW5uZWxOYW1lEHZvZF95ZWFyEGFyZWFOYW1lEHZvZF9hcmVhCmludHJvFnZvZF9jb250ZW50EmFjdG9yTGlzdAZtYXAELCASdm9kX2FjdG9yGGRpcmVjdG9yTGlzdBh2b2RfZGlyZWN0b3IUcGxheWVyTGlzdBRwbGF5ZXJOYW1lDGVwTGlzdAxlcE5hbWUCJAhlcElkAiMGJCQkGnZvZF9wbGF5X2Zyb20Ydm9kX3BsYXlfdXJsGnZvZFdvcmtlck5hbWUMW2E9Y3I6BC9dCFsvYV02L3YxL2FwaS92b2RJbmZvL2dldEVwRGV0YWlsHnJlc29sdXRpb25JdGVtcyJ2b2RSZXNvbHV0aW9uTmFtZTQvdjEvYXBpL3ZvZEluZm8vZ2V0UGxheVVybBp2b2RSZXNvbHV0aW9uDmtleXdvcmQGc2NfKi92MS9hcGkvc2VhcmNoL3NlYXJjaAxyYW5kb20CLRZ0b1VwcGVyQ2FzZQI6DEh1YXdlaQpicmFuZBxIVUFXRUkrTWF0ZSsyMA5idWlsZElkFHJlcGxhY2VBbGwOcmVwbGFjZQQvLwxodHRwczoIaHR0cBRVc2VyLUFnZW50DnJlZmVyZXIOUmVmZXJlcgxoZWFkZXIPpAMBpgMBABuoAwAFAKoDAAGsAwACrgMAA7ADAASyAwAOAAYBoAEAAAABHBB5AKoDAAysAwEMrgMCDLADAwyyAwQMtAMA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
--------------------------------------------------------------------------------