# uni-polymerize **Repository Path**: yangmain/uni-polymerize ## Basic Information - **Project Name**: uni-polymerize - **Description**: 基于uni-app 聚合资源的app - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 12 - **Created**: 2023-07-26 - **Last Updated**: 2023-07-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #应用介绍 * 1、该项目为聚合资源APP,暂只支持安卓APP * 2、聚合资源包括小说、漫画、视频、直播、文章、论坛、音乐等 * 3、该项目支持加载外部来源,也支持内置来源 * 4、如果想要自己制作来源,建议先以内置来源的方式制作来源,制作完成后在来源设置中选择导出来源 * 5、为了方便调试请求,可以在设置页面 => 通用设置 => 打开调试模式,会在全局生成一个调试按钮,点击可以查看请求信息 * 6、为避免版权问题,该项目已不提供内置源 * 7、有什么不懂的,可以加群 1087735942 聊 #免责声明 * 本免责声明(以下简称“免责声明”或“本声明”)适用于好用聚合项目(以下简称"好用聚合"),在使用人及组织(以下简称"使用者")阅读本声明后若不同意此声明中的任何条款,或对本声明存在质疑,请立刻停止使用此项目。若您已经开始或正在使用此项目,则表示您已阅读并同意本声明的所有条款之约定。 * 1.使用者通过任何形式或方式使用好用聚合即表示您已经同意本声明,本声明立即自动生效。 * 2.使用者使用好用聚合自行承担风险,作者不做任何形式的保证, 因代码质量、系统BUG等任何技术原因而引起的问题,作者也不承担任何法律责任。 * 3.使用者保证好用聚合不用于任何违法犯罪行为,如传播色情、赌博等。 * 4.使用者保证好用聚合所展示内容不涉及版权或隐私等问题。 * 5.使用者保证好用聚合不用于任何商业或盈利等行为。 * 6.使用者使用好用聚合违反上述任何行为所造成的一切后果均由使用者承担。 #添加内置来源 * 第一步、将写好的来源JS文件放在/assets/api/source/文件夹下,文件名不能为中文 (注意APP导出的来源文件为JSON文件,不能用来添加内置来源) * 第二步、在/assets/api/source.js文件中引入新添加来源JS文件即可 #添加外部来源 * 添加本地来源 - 将来源JSON文件放入手机存储 => 在来源设置页面点击右上角按钮 => 在选项列表中选择导入本地来源 => 找到手机存储中的来源JSON文件 => 单击选择单个文件/长按选择多个文件 => 等待来源导入完成 * 添加网络来源 - 在来源设置页面点击右上角按钮 => 在选项列表中选择导入网络来源 => 在弹出框中输入接口地址 => 点击确定 => 等待来源导入完成 - 网络来源接口地址返回数据结构如下: ```javascript { statusCode: 200, data: { list: [来源数据1,来源数据2,来源数据3]//来源JSON文件的文本内容集合 } } ``` #来源结构 * 请注意此处为大致结构,不代表实际效果 ```javascript { "id": "",//来源ID 必填 "title": "",//来源名称 必填 "logo": "",//来源图标 "href": "",//来源域名 必填 "interval": 0,//请求时间间隔(ms) "security": "",//防盗链域名,多个以逗号分割 "isAdult": false,//是否包含敏感内容 必填 "cover": "",//默认资源封面,多个以逗号分割 "custom": {//自定义方法,存放一些常用的方法,比如签名生成 "test": function (arg) {//演示 return arg } }, "request": {//来源请求 "getHotList": {//获取首页的推荐列表,实际方法名应该要加上横杠和类型 比如小说的首页推荐列表则是 getHotList_novel 请求类型参考资源类型、合集类型和用户类型 "label": "热门列表",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口,需要请求之后才能得到请求下一页需要的参数,通过该参数返回,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "getRankList": {//获取榜单列表,实际方法名应该要加上横杠和类型 比如小说的榜单列表则是 getRankList_novel 请求类型参考资源类型、合集类型和用户类型 "label": "榜单列表",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口,需要请求之后才能得到请求下一页需要的参数,通过该参数返回,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "getDynamicList": {//获取动态列表,实际方法名应该要加上横杠和类型 比如小说的动态列表则是 getDynamicList_novel 请求类型参考资源类型、合集类型和用户类型 "label": "动态列表",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口,需要请求之后才能得到请求下一页需要的参数,通过该参数返回,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "getFindList": {//获取发现列表,实际方法名应该要加上横杠和类型 比如短视频的发现列表则是 getFindList_short 请求类型参考资源类型、合集类型和用户类型 "label": "发现列表",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口,需要请求之后才能得到请求下一页需要的参数,通过该参数返回,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "search": {//搜索列表,实际方法名应该要加上横杠和类型 比如搜索小说则是 search_novel 请求类型参考资源类型、合集类型和用户类型 "label": "搜索列表",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口,需要请求之后才能得到请求下一页需要的参数,通过该参数返回,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "getKeyword": {//搜索关键词,实际方法名应该要加上横杠和类型 比如小说关键词则是 getKeyword_novel 请求类型参考来源类型 "label": "搜索关键词",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口,需要请求之后才能得到请求下一页需要的参数,通过该参数返回,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "getFilterList": {//筛选列表/分类列表,实际方法名应该要加上横杠和类型 比如小说分类列表则是 getFilterList_novel 请求类型参考资源类型、合集类型和用户类型 "label": "筛选列表",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口,需要请求之后才能得到请求下一页需要的参数,通过该参数返回,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "getFilterDetail": {//筛选详情/分类详情,实际方法名应该要加上横杠和类型 比如小说分类详情则是 getFilterDetail_novel 请求类型参考资源类型、合集类型和用户类型 "label": "筛选详情",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口,需要请求之后才能得到请求下一页需要的参数,通过该参数返回,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "getGatherDetail": {//合集详情,实际方法名应该要加上横杠和类型 比如书单详情则是 getGatherDetail_novels 请求类型参考合集类型表 "label": "合集详情",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效且value不会返回res 必填 "interval": 0,//请求时间间隔(ms) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回一个字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 data: res.data.info//详情信息 返回对象 } } }, "getGatherWorksList": {//合集详情,实际方法名应该要加上横杠和类型 比如书单详情则是 getGatherWorksList_novels 请求类型参考合集类型 "label": "合集作品列表",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "inherit": false,//是否继承getGatherDetail的请求结果(减少请求次数) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口,需要请求之后才能得到请求下一页需要的参数,通过该参数返回,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "getCharacterDetail": {//用户详情,实际方法名应该要加上横杠和类型 比如写手详情则是 getCharacterDetail_writer 请求类型参考用户类型 "label": "用户详情",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效且value不会返回res 必填 "interval": 0,//请求时间间隔(ms) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回一个字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 data: res.data.info//详情信息 返回对象 } } }, "getCharacterWorksList": {//用户作品列表,实际方法名应该要加上用户类型和作品类型 比如写手小说作品列表则是 getCharacterWorksList_writer_novel 请求类型参考资源类型、合集类型 "label": "用户作品列表",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "inherit": false,//是否继承getCharacterDetail的请求结果(减少请求次数) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口需要请求之后才能得到请求下一页需要的参数,通过该参数返回这些参数,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "getCharacterFolloweeList": {//用户关注列表,实际方法名应该要加上横杠和类型 比如写手关注列表则是 getCharacterFolloweeList_writer 请求类型参考用户类型 "label": "用户关注列表",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "inherit": false,//是否继承getCharacterDetail的请求结果(减少请求次数) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口需要请求之后才能得到请求下一页需要的参数,通过该参数返回这些参数,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "getCharacterFollowerList": {//用户粉丝列表,实际方法名应该要加上横杠和类型 比如写手粉丝列表则是 getCharacterFollowerList_writer 请求类型参考用户类型 "label": "用户粉丝列表",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "inherit": false,//是否继承getCharacterDetail的请求结果(减少请求次数) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口需要请求之后才能得到请求下一页需要的参数,通过该参数返回这些参数,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "getSingleDetail": {//资源详情,实际方法名应该要加上横杠和类型 比如小说详情则是 getSingleDetail_novel 请求类型参考资源类型 "label": "资源详情",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效且value不会返回res 必填 "interval": 0,//请求时间间隔(ms) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回一个字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 data: res.data.info,//详情信息 返回对象 sections: res.data.sections//分段列表,返回数组,部分资源会分段展示,比如小说、漫画会分章节,影视番剧会分集数,壁纸会存在分页 } } }, "getSectionDetail": {//资源分段详情,实际方法名应该要加上横杠和类型 比如小说章节详情则是 getSectionDetail_novel 请求类型参考资源类型 "label": "资源分段详情",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效且value不会返回res 必填 "interval": 0,//请求时间间隔(ms) "inherit": false,//是否继承getSingleDetail的请求结果(减少请求次数) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回一个字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 //模拟返回结果 资源为话题、文章或者资讯时返回数组 return { list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口需要请求之后才能得到请求下一页需要的参数,通过该参数返回这些参数,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } //模拟返回结果 资源为小说、漫画、壁纸、视频时返回对象 return { data: res.data.info//详情信息,返回对象 } } }, "getComment": {//评论列表,实际方法名应该要加上横杠和类型 比如小说评论列表则是 getComment_novel 请求类型参考资源类型、合集类型 "label": "评论列表",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "inherit": false,//是否继承getSingleDetail或者getGatherDetail的请求结果(减少请求次数) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口需要请求之后才能得到请求下一页需要的参数,通过该参数返回这些参数,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "getRecome": {//推荐列表,实际方法名应该要加上横杠和类型 比如小说推荐列表则是 getRecome_novel 请求类型参考资源类型、合集类型表 "label": "推荐列表",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效 必填 "interval": 0,//请求时间间隔(ms) "inherit": false,//是否继承getSingleDetail或者getGatherDetail的请求结果(减少请求次数) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 list: res.data.list,//列表数据,返回数组 paging: { nextPage: res.data.nextPage//模拟参数,你可以返回任意单一或多个参数 },//分页信息,返回对象,部分分页接口需要请求之后才能得到请求下一页需要的参数,通过该参数返回这些参数,可以在params中得到 isLastPage: true//是否是最后一页,返回布尔值,true表示已经请求完毕 } } }, "getSocketDetail": {//WebSocket信息,实际方法名应该要加上横杠和类型 比如直播WebSocket信息则是 getSocketDetail_live 请求类型参考资源类型 目前该方法仅支持直播 "label": "WebSocket信息",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效且value不会返回res 必填 "interval": 0,//请求时间间隔(ms) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回一个字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 data: res.data.info,//详情信息 返回对象 send: res.data.send,//第一次发送消息 WebSocket连接成功后,发送一次消息,不传则不发 heartbeat: res.data.heartbeat,//心跳任务消息 WebSocket连接成功后,开始心跳任务,不传则没有心跳任务 heartbeattime: res.data.heartbeattime//心跳任务间隔时间 单位为ms } } }, "handleSocketMessage": {//处理WebSocket接受到的信息,目前该方法仅支持处理直播弹幕 "label": "处理Websocket信息",//标题 必填 "charset": "utf8",//请求格式 支持utf8/gbk 必填 "method": "get",//请求类型 支持get/post/none 当请求类型为none时url、params和headers不会生效且value不会返回res 必填 "interval": 0,//请求时间间隔(ms) "url": function(context, params) { return 'https://www.baidu.com' },//请求链接, 返回一个字符串, context为内置方法和自定义方法集合,params为请求参数 不填默认返回href "params": function(context, params) { return {page: 1} },//请求参数, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数 "headers": function(context, params) { return {Referer: 'https://www.baidu.com'} },//请求头, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数 "value": function(context, params, res) {//处理回调, 返回一个对象, context为内置方法和自定义方法集合,params为请求参数,res为请求返回结果 必填 return {//模拟返回结果 barrages: res.data.barrages,//详情信息 返回对象 } } } } } ``` #资源类型 | 类型 | 名称 | | :----- | :----: | | novel | 小说 | | comic | 漫画 | | wallpaper | 壁纸 | | figure | 套图 | | portrait | 写真 | | movie | 影视 | | drama | 连续剧 | | anime | 番剧 | | variety | 综艺 | | short | 短视频 | | mv | MV | | song | 歌曲 | | program | 节目 | | article | 文章 | | news | 资讯 | | talk | 话题 | | live | 直播 | | broadcast | 广播 | #合集类型 | 类型 | 名称 | | :----- | :----: | | novels | 书单 | | comics | 漫集 | | audible | 有声书 | | songlist | 歌单 | | songalbum | 专辑 | | mvs | MV集 | | wallpapers | 壁纸集 | | figures | 套图集 | | portraits | 写真集 | | movies | 电影集 | | dramas | 连续剧集 | | animes | 番剧集 | | varietys | 综艺集 | | shorts | 短片集 | | lives | 直播集 | | broadcasts | 广播集 | | articles | 文章集 | | newss | 新闻集 | | talks | 话题集 | | rank | 榜单 | #用户类型 | 类型 | 名称 | | :----- | :----: | | singer | 歌手 | | writer | 写手 | | uploader | UP | | anchor | 主播 | | painter | 画师 | | blogger | 博主 | | actor | 演员 | | announcer | 播音员 | #context参数 * 来源custom中的自定义方法可通过该参数取到 | 方法名 | 参数 | 说明 | | :--- | :---: | -------: | | request | --- | 封装的请求,包含 http 和 xhr 2个属性 request.http.get(url);request.xhr.get(url); | | HTMLParser | HTML文本 | 解析HTML文本,用于获取HTML文本中的数据 详情[HTMLParser HTML 文本解析器](https://ext.dcloud.net.cn/plugin?id=263) | | gb2312 | UTF-8格式的字符串 | 将UTF-8的字符转化为GBK字符串 | | Base64 | --- | Base64方法 Base64.encode('dankogai'); Base64.decode('ZGFua29nYWk='); | | Single | --- | 封装的资源类 new Single({ singleId: '131231', title: '小说名称', type: 'novel', source: 'linovel' }) | | Gather | --- | 封装的合集类 new Gather({ gatherId: '131231', title: '书单名称', type: 'novels', source: 'linovel' }) | | Character | --- | 封装的用户类 new Character({ characterId: '131231', name: '用户名称', type: 'writer', source: 'linovel' }) | | Section | --- | 封装的资源分段类 new Section({ sectionId: '131231', title: '章节名称', chapter: 1, type: 'novel', source: 'linovel' }) | | Comment | --- | 封装的评论类 new Comment({ commentId: '131231', title: '评论标题', content: '评论内容', source: 'linovel' }) | | Barrage | --- | 封装的弹幕类 new Barrage({ barrageId: '131231', name: '发送人', text: '发送内容', color: '内容颜色', time: '发送时间', source: 'linovel' }) | | replaceHTML | --- | 替换HTML字符串中的特殊字符,该方法已弃用 | | htmlDecodeByRegExp | --- | 转义HTML字符串中的一些转义序列 | | uncode | --- | 将16进制转为字符 | | dateFormat | --- | 时间格式化工具 | | convertUrlQueryObject | --- | 获取href链接中的参数,返回对象 | | time2seconds | --- | 时间转秒数工具 | | CryptoJS | --- | CryptoJS工具 | | regmatchhtml | --- | 正则匹配HTML字符,该方法已弃用 | | regmatchstr | --- | 正则匹配字符,该方法已弃用 | #params参数 * 固定参数 | 属性名 | 类型 | 说明 | | :--- | :--: | --------: | | currentPage | Number | 请求页码,仅在分页请求中存在 | | sort | String | 排序方式,仅在部分接口中存在,包括{default: '默认排序', newest: '最近更新', most: '最多人看', hottest: '热度最高'},发现列表接口排序方式包括{recome: '推荐', samecity: '同城'} | | paging | Object | 分页信息,仅在分页请求中存在 | | baseUrl | String | 来源中的基础域名href | | source | String | 来源ID | * 非固定参数 - 不同请求类型及请求方法参数也会有所改变 - 比如请求小说详情的方法为 getSingleDetail_novel 则请求参数应该为固定参数加上小说详情 即 Object.assign({}, new Single(小说), {baseUrl: 'https://www.baiduc.com', source: 'linovel'}) - 比如请求书单详情的方法为 getGatherDetail_novels 则请求参数应该为固定参数加上书单详情 即 Object.assign({}, new Gather(书单), {baseUrl: 'https://www.baiduc.com', source: 'linovel'}) - 比如请求写手详情的方法为 getCharacterDetail_writer 则请求参数应该为固定参数加上写手详情 即 Object.assign({}, new Charater(写手), {baseUrl: 'https://www.baiduc.com', source: 'linovel'}) - 其余请求方法参数以此类推 #构造函数 ```javascript //资源类 class Single { this.id = id || ((singleId || '') + '_' + source)//资源唯一ID 必填 如果填了singleId 可以不填 this.title = title || ''//名称 this.singleId = singleId || ''//资源ID this.commentId = commentId || ''//评论ID this.lyricId = lyricId || ''//歌词ID this.barrageId = barrageId || ''//弹幕ID this.src = src || ''//路径 this.comments = comments || []//评论列表 this.characters = characters || []//相关用户列表 this.lyrics = lyrics || []//歌词 this.barrages = barrages || []//弹幕 this.list = list || []//相关作品列表(可以是图片链接,也可以是歌曲或者其它资源) this.sections = sections || []//分段内容(例如章节,分集等) this.downloadUrl = downloadUrl || ''//下载链接 this.shareUrl = shareUrl || ''//分享链接 this.cover = cover || ''//封面 this.creator = creator || ''//创作者 this.avatar = avatar || ''//创作者头像 this.desc = desc || ''//介绍 this.content = content || ''//内容 this.isPay = isPay || false//是否付费 this.isLiving = isLiving?.toString() == 'false' ? false : (isLiving || true)//正在直播 this.readnum = readnum || 0//阅读次数 this.popular = popular || 0//热度 this.collect = collect || 0//收藏数 this.comment = comment || 0//评论数 this.thumbs = thumbs || 0//点赞数 this.isEnd = isEnd || false//是否完结 this.latest = latest || ''//最新更新 this.duration = duration || 0//播放时长 this.size = size || ''//大小 this.style = style || ''//风格 this.vertical = vertical || false//是否竖屏 this.tag = tag || []//标签 this.isAdult = isAdult || false//是否青壮年内容 this.record = record || {}//记录 this.mark = mark || []//书签 this.extra = extra || {}//附加字段 this.formats = formats || 'auto'//视频格式 this.type = type//资源类型 this.createTime = createTime || dateFormat(new Date().getTime())//创建时间 this.updateTime = updateTime || ''//更新时间 this.source = source || 'local'//来源 } //合集类 class Gather { this.id = id || ((gatherId || '') + '_' + source)//资源唯一ID 必填 如果填了gatherId 可以不填 this.gatherId = gatherId || '' //集合ID this.commentId = commentId || '' //评论ID this.title = title || ''//名称 this.cover = cover || '' //封面 this.desc = desc || '' //介绍 this.list = list || [] //集合列表 this.characters = characters || []//相关用户列表 this.comments = comments || []//评论列表 this.creator = creator || '' //创建者 this.avatar = avatar || ''//创建者头像 this.isPay = isPay || false//是否支付观看 this.readnum = readnum || 0 //查看次数 this.popular = popular || 0//热度 this.collect = collect || 0//收藏数 this.comment = comment || 0//评论数 this.thumbs = thumbs || 0//点赞数 this.latest = latest || ''//最后更新 this.style = style || ''//风格 this.tag = tag || []//标签 this.isAdult = isAdult || false//是否青壮年内容 this.record = record || {} //历史记录 this.extra = extra || {} //附加字段 this.type = type//类型 this.createTime = createTime || dateFormat(new Date().getTime())//创建时间 this.updateTime = updateTime || ''//更新时间 this.source = source || 'local' //来源 } //分段类 class Section { this.id = id || ((sectionId || '') + '_' + source)//资源唯一ID 必填 如果填了sectionId 可以不填 this.sectionId = sectionId || ''//分段ID this.commentId = commentId || ''//评论ID this.barrageId = barrageId || ''//弹幕ID this.title = title || ''//标题 this.chapter = chapter//序号 this.creator = creator || ''//创建者 this.src = src || ''//链接 this.barrages = barrages || []//弹幕集合 this.cover = cover || ''//封面 this.size = size || ''//大小 this.desc = desc || ''//介绍 this.isStart = isStart || false this.isEnd = isEnd || false this.content = content || null this.vertical = vertical || false//是否竖屏 this.isPay = isPay || false//否需要支付观看 this.isAdult = isAdult || false//是否青壮年内容 this.formats = formats || 'auto'//视频格式 this.startTime = startTime || 0//开始时间 this.endTime = endTime || 0//结束时间 this.type = type || ''//类型 this.extra = extra || {}//附加字段 this.source = source//来源 } //用户类 class Character { this.id = id || ((characterId || '') + '_' + source)//资源唯一ID 必填 如果填了characterId 可以不填 this.characterId = characterId || ''//角色ID this.commentId = commentId || ''//评论ID this.followeeId = followeeId || ''//关注者列表ID this.followerId = followerId || ''//跟随者列表ID this.name = name || '佚名'//名称 this.avatar = avatar || ''//头像 this.cover = cover || ''//封面 this.desc = desc || ''//介绍 this.list = list || []//作品集合 this.followee = followee || 0//关注者数量 this.follower = follower || 0//跟随者数量 this.works = works || 0//作品数量 this.style = style || ''//风格 this.isAdult = isAdult || false//是否青壮年内容 this.tag = tag || []//标签 this.extra = extra || {}//附加字段 this.type = type//用户类型 this.createTime = createTime || dateFormat(new Date().getTime())//创建时间 this.updateTime = updateTime || ''//更新时间 this.source = source//来源 } //评论类 class Comment { this.id = id || ((commentId || '') + '_' + source)//资源唯一ID 必填 如果填了commentId 可以不填 this.commentId = commentId || ''//评论ID this.avatar = avatar || ''//评论人头像 this.title = title || ''//评论人姓名或者其它相关标题 this.subtitle = subtitle || ''//评论时间或者其它二级标题 this.content = content || ''//评论时内容 this.subComment = subComment || []//子评论合集 this.masterComment = masterComment || []//父评论合集 this.type = 'comment'//类型 this.extra = extra || {}//附加字段 this.source = source || 'local'//来源 } //弹幕类 class Barrage { this.id = id || ((barrageId || '') + '_' + source)//资源唯一ID 必填 如果填了barrageId 可以不填 this.barrageId = barrageId || ''//弹幕ID this.avatar = avatar || ''//发送人头像 this.name = name || ''//发送人名称 this.text = text || ''//内容 this.color = color || '#ffffff'//弹幕内容颜色 this.time = time || 0//弹幕显示时间(单位是s) this.type = type || 'user'//类型 this.extra = extra || {}//附加字段 this.source = source || 'local'//来源 } ``` #制作来源实际操作(只是模拟内置来源制作,不是真实请求) * 以请求小说为例,模拟进行内置来源制作,其余类型也会挑重点部分讲解 * 首先按照顶部提供的添加内置来源的方式添加好内置来源,然后在来源文件中填写各种信息,如下所示: ```javascript export default { "id": "testbook", "title": "测试小说网站", "logo": "https://www.book.com/favicon.ico", "href": "https://www.book.com", "interval": 100,//100毫秒的时间间隔 "security": "images.book.com,images2.book.com",//防盗链域名,多个以逗号分割 "isAdult": false, "cover": "https://images.book.com/upload/default.png",//默认资源封面,多个以逗号分割 "custom": { "userAvatar": function (id) {//模拟生成用户头像 return 'https://images.book.com/upload/' + id + '.png' } }, "request": {}//请求方法 } ``` * 填写好基础信息后开始填写请求方法 (不同类型的请求可以同时存在) * getHotList 获取首页推荐集合列表 因为是请求小说类型,所以实际应该是getHotList_novel,请求类型参考资源类型、合集类型和用户类型 * 假设有一个小说网站首页:https://www.book.com, 其HTML源代码如下: ```html
第一章 我穿越了
一觉醒来,我竟然穿越到了明朝
一觉醒来,我竟然穿越到了明朝
一觉醒来,我竟然穿越到了明朝
一觉醒来,我竟然穿越到了明朝
一觉醒来,我竟然穿越到了明朝
这叫什么事啊
这叫什么事啊
这叫什么事啊
这叫什么事啊
这叫什么事啊
这叫什么事啊
这叫什么事啊
这叫什么事啊
这叫什么事啊
这叫什么事啊
这叫什么事啊
这叫什么事啊
这叫什么事啊
这叫什么事啊
这叫什么事啊