书源扩展
基于 APIs
我们可以编写书源扩展来获取需要的数据.
扩展库
一个包含扩展库描述文件和相关书源扩展的集合.
库文件结构:
├── repository.json // 描述文件
├── sources // 扩展文件夹
├ ├── book.com.js // 扩展文件
├ ├── ...
├ ├── ...
├ ├── ...
描述文件
描述扩展库信息.
{
// 开发者
"author": "Open Book Source",
// 开发者主页
"homepage": "https://github.com/open-source-scripts",
// 扩展
"sources": [
{
// 书源格式(必须)
"format": "javascript",
// 名称(必须)
"name": "示例",
// 域名(必须)
"domain": "example.com",
// 域名(必须)
"homepage": "http://example.com",
// 图标
"icon": "https://example/favicon.ico",
// 描述
"description": "enjoy!",
// 版本号
"version": "1.0.0",
// 更新日志
"changelog": "更新日志",
// 类型: novel(小说) | comic(漫画) | video(视频)
"type": "novel",
// 语言
"locale": "zh-cn"
},
...
]
}
扩展文件
它是一个 javascript 脚本. 脚本包含必须包含一个描述脚本信息的元数据块.
// ==UserScript==
// @name 示例
// @domain example.com
// @description 这是一个示例
// @version 1.0.0
// @icon https://example.com/favicon.ico
// @supportURL https://github.com/open-source-scripts/booksource/issues
// @require https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/crypto-js/4.1.1/crypto-js.min.js
// @function categories
// @function search
// @function detail
// @function toc
// @function chapter
// @function configure
// @function profile
// @function author
// @function schedules
// ==/UserScript==
/*
* 搜索
* @param keyword {String} 关键字
* @param opaque {Object} 透传数据
* @return {Object}
*/
async function search(keyword, opaque) {
...
return {
code: 0,
message: '',
// 分页数据
data: {
// 书籍数据
data: [
{
id: '书籍ID',
name: '书源宝典',
author: '作者',
authorId: '作者ID',
category: '武侠',
tags: ['教程', '宝典'],
intro: '简介',
cover: '封面链接',
words: 19800000,
updateTime: 1684061017355, // 更新日期
lastChapterName: '最后章节名',
status: 0, // 状态: 0: 连载; 1: 完本; 2: 断更;
},
...
],
// 是否有更多数据
hasMore: true,
// 如果 hasMore 为 true, 在请求下一页时, opaque 将会传入 search 方法
opaque: {
// 透传数据
},
},
};
}
元数据块
元数据块用来描述脚本信息. 它通常包含脚本名称, 命名空间, 描述以及包含和排除规则. 元数据块出现在 JavaScript 行注释中, 可能出现在脚本的顶级代码范围内的任何位置, 但通常位于文件顶部.
如果元数据块包含无法的属性, 它将被忽略.
语法
元数据必须遵循以下格式:
// ==UserScript==
// @key value
// ==/UserScript==
元数据必须使用双斜杠//
开头, 不得使用块注释/* */
. 请注意元数据必须放置于 // ==UserScript==
和 // ==/UserScript==
之间才会被认定为有效的元数据. 为了保持美观, 元数据名和值之间可以添加多个空格.
标签:
required
该元数据必需设置.multilingual
该元数据可以通过添加冒号和地区码来设置多国语言. 例如: @name:zh-CNmultiple
该元数据可以设置多次
元数据
@type
脚本类型, 非必须. 默认为小说类型. novel: 小说 comic: 漫画 video: 视频
Examples:
// @type novel
@name
multilingual
脚本名称.
Examples:
// @name Open book Script
// @name:zh-CN 开源小说脚本
@homepage
网站主页.
Examples:
// @homepage https://example.com
@domain
required
该脚本作用域名.
Examples:
// @domain example.com
@version
脚本的版本, 可用于检查脚本是否有新版本.
Note: 如果没有指定版本, 脚本将不会自动更新.
Examples:
// @version 0.10.1
@description
multilingual
描述脚本的简短摘要.
Example:
// @description This script rocks.
// @description:zh-CN 这个脚本很棒!
@icon
为脚本指定一个图标.
Examples:
// @icon https://my.cdn.com/icon.png
// @icon data:image/png;base64,xxxxxxxxxxxxxxxxxxxxxxxxxxxx
@require
multiple
需要在当前脚本之前执行另一个脚本. 该值是所需脚本的 URL, 所需的脚本将与安装一起下载并在脚本之前执行.
Examples:
// @require https://my.cdn.com/jquery.js
@function
multiple
指定功能脚本.
- search: 搜索功能
- categories: 分类功能
- configure: 配置功能
- profile: 个人信息功能, 获取用户相关信息
- author: 作者功能, 获取作者信息和书籍
- schedules: 定时任务
- synchronization: 同步功能, 将阅读记录同步到站点
- detail: 详情功能
- toc: 目录功能
- chapter: 章节功能
Examples:
// @function search
@supportURL
脚本支持链接. 脚本管理中的问题反馈图标将链接到这里.
@homepageURL
脚本主页链接. 脚本管理中的主页图标将 链接到这里.