{"id":13814512,"url":"https://github.com/JAVClub/core","last_synced_at":"2025-05-15T03:34:42.808Z","repository":{"id":40520873,"uuid":"245438989","full_name":"JAVClub/core","owner":"JAVClub","description":"🔞 JAVClub - 让你的大姐姐不再走丢","archived":true,"fork":false,"pushed_at":"2021-06-14T00:26:15.000Z","size":5601,"stargazers_count":2858,"open_issues_count":6,"forks_count":338,"subscribers_count":105,"default_branch":"master","last_synced_at":"2024-11-19T09:47:50.708Z","etag":null,"topics":["adult","adult-content","google-drive","japanese","jav","javbus","javiewer","magnet","porn","spider","video-streaming"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JAVClub.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-06T14:22:15.000Z","updated_at":"2024-11-15T08:17:37.000Z","dependencies_parsed_at":"2022-08-09T22:30:44.726Z","dependency_job_id":null,"html_url":"https://github.com/JAVClub/core","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JAVClub%2Fcore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JAVClub%2Fcore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JAVClub%2Fcore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JAVClub%2Fcore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JAVClub","download_url":"https://codeload.github.com/JAVClub/core/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254266521,"owners_count":22042123,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adult","adult-content","google-drive","japanese","jav","javbus","javiewer","magnet","porn","spider","video-streaming"],"created_at":"2024-08-04T04:02:05.405Z","updated_at":"2025-05-15T03:34:40.034Z","avatar_url":"https://github.com/JAVClub.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/JAVClub/core/raw/master/docs/logo.png\" alt=\"JAVClub\" width=\"200\"\u003e\n  \u003cbr\u003eJAVClub\u003c/br\u003e\n\u003c/h1\u003e\n\n❗ | **因架构调整，本项目已不再维护并将存档。新项目将支持泛媒体文件管理，相关开发工作将迁移至 [@UsagiHouse](https://github.com/UsagiHouse) 进行，请知悉**\n:---: | :---\n⚠️ | 因 Google Drive 相关服务近期进行转型升级，无限存储空间可能将不再对个人/教育提供，故本项目暂时停止更新。若后续 Google 仍决定以任意一种可承受的方式提供无限存储空间，项目可能将继续更新。若不会继续提供，则项目可能会 archive 或者支持 OneDrive 等其他网盘平台，敬请谅解\n\n\n## Features\n\n- 支持在线播放\n- 全自动爬取、下载、上传、处理\n- 视频、图片数据不占用本地空间\n- 代理后速度播放速度可观, 不代理亦可看\n- 多用户系统, 可以与的好基友一起穿越\n- 可从公开/私有站点下载数据, 多种选择\n- Docker 自动部署\n- 支持收藏夹\n- 支持公告系统\n- 支持用户系统\n- 支持邀请注册\n- ~~面熟的话大概可以直接白嫖~~\n\n## 简介\n\n这是一个涩情系列 Repos, 包含三个子项目, 分别是 [fetcher](https://github.com/JAVClub/fetcher)、[web](https://github.com/JAVClub/web) 还有这个项目\n\n稍微逛了一下 GitHub, 发现现有的 JAV 数据库都仅限于存储 Metadata(JAV 元数据[车牌号、cover 等等]) 及没啥用的种子信息, 没法做到在线观看, 所以这就是一个集搜集、下载、存储、观看、管理为一体的东西了\n\n项目应该已经差不多进入了稳定期, 各种 TODO 应该有空有兴趣了会填坑, bugfixs 正常, issues 回复期在一至两周左右, 还请见谅\n\n往下看之前请先确保你已满 18 周岁\n\n![Are you 18](https://github.com/JAVClub/core/raw/master/docs/are-you-18.jpg)\n\n## TODO\n\n- [x] 公告栏\n- [x] 用户系统\n  - [x] 邀请注册\n\n## DEMO\n\n\u003e 感谢某位 dalao 为项目提供非官方演示站, 站点地址[在这](https://fucklo.li), 目前开放注册, 数据继承自原演示站(70k+), 欢迎体验\n\u003e (附: 不提供在线时间保证, 有问题/赞助请联系[这里](mailto:contact@fucklol.li))\n\n~~因为项目的特殊性就不提供在线 DEMO 了, 仅放一些图片 #SFW~~\n\n\u003cdetails\u003e\n\n  \u003csummary\u003e页面截图 (点击展开)\u003c/summary\u003e\n\n  ![Home](https://github.com/JAVClub/core/raw/master/docs/Home.png)\n\n  ![Metadata List](https://github.com/JAVClub/core/raw/master/docs/MetadataList.png)\n\n  ![Metadata Info Top](https://github.com/JAVClub/core/raw/master/docs/MetadataInfoTop.png)\n\n  ![Metadata Info Bottom](https://github.com/JAVClub/core/raw/master/docs/MetadataInfoBottom.png)\n\n  ![Bookmark List](https://github.com/JAVClub/core/raw/master/docs/BookmarkList.png)\n\n  ![Bookmark Info](https://github.com/JAVClub/core/raw/master/docs/BookmarkInfo.png)\n\n  ![Tag List](https://github.com/JAVClub/core/raw/master/docs/TagList.png)\n\n  ![Star List](https://github.com/JAVClub/core/raw/master/docs/StarList.png)\n\n  ![Series List](https://github.com/JAVClub/core/raw/master/docs/SeriesList.png)\n\n  ![Profile](https://github.com/JAVClub/core/raw/master/docs/Profile.png)\n\n\u003c/details\u003e\n\n## 部署\n\n下面的信息可能有一些繁琐枯燥甚至还有错误, 希望还可见谅, 套用某位 dalao 的话来讲就是一劳永逸, 一旦理解了就没什么困难的了\n\n**Docker 部署方式请[看这里](https://github.com/JAVClub/docker)**\n\n部署之前请确保你拥有/完成以下能力/事情:\n- 一台有稳定国际互联网的服务器\n- Node.js / JavaScript 基础\n- 基本的报错阅读能力\n- Linux 基础\n- 阅读过《[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md)》\n- ~~可以克制住自己想把作者往死里揍心情的能力~~\n\n要正常工作的话总共需要部署几样东西, 它们之间关系是这样的:\n```\nfetcher: 抓取种子-\u003e推送 qBittorrent 下载-\u003e处理-\u003e上传 Google Drive\n↑\n| 通过 Google Drive 相互联系\n↓\ncore: 读取 Google Drive 文件列表-\u003e导入本地数据库\n↑\n| 通过 API 读取数据库中的内容\n↓\nweb: 展示信息\n↑\n| 用户请求\n|\nVercel: 为 Workers 提供 access token\n|\n| 302 跳转\n↓\nWorkers: 代理 Google Drive 文件及 JAVBus 封面\n```\n\n### Fetcher 部署\n\n参照 [JAVClub/fetcher](https://github.com/JAVClub/fetcher)\n\n### 代理部署\n\n参照 [JAVClub/proxy](https://github.com/JAVClub/proxy)\n\n### Core\u0026Web 部署\n\n#### Docker\n\n参照 [core - JAVClub/docker](https://github.com/JAVClub/docker/tree/master/core)\n\n#### 非 Docker\n\n##### 拉取\n\n请确保主机已安装 Node.js 环境 (版本 12.0+), 如未安装可使用 nvm 进行安装\n```bash\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash\nexport NVM_DIR=\"$HOME/.nvm\"\n[ -s \"$NVM_DIR/nvm.sh\" ] \u0026\u0026 \\. \"$NVM_DIR/nvm.sh\"  # This loads nvm\n[ -s \"$NVM_DIR/bash_completion\" ] \u0026\u0026 \\. \"$NVM_DIR/bash_completion\"  # This loads nvm bash_completion\nnvm install node # \"node\" is an alias for the latest version\n```\n\n拉取项目\n```bash\ngit clone https://github.com/JAVClub/core.git JAVClub_core\ncd JAVClub_core\ncp config/dev.example.json config/dev.json\nnpm i\n```\n\n##### 配置文件\n\n\u003cdetails\u003e\n\n  \u003csummary\u003e配置文件 (点击展开)\u003c/summary\u003e\n\n```json\n{\n    \"system\": {\n        \"logLevel\": \"debug\",\n        \"port\": 3000,\n        \"path\": \"/api\",\n        \"allowChangeUsername\": false,\n        \"userMaxBookmarkNum\": 10,\n        \"userMaxBookmarkItemNum\": 100,\n        \"corsDomain\": [\n            \"https://yourdomain.com\"\n        ],\n        \"searchParmaNum\": 3,\n        \"allowSignup\": false,\n        \"defaultGroup\": 2\n    },\n    \"database\": {\n        \"dialect\": \"mysql\",\n        \"connectionLimit\": 5,\n        \"host\": \"mysql\",\n        \"port\": 3306,\n        \"username\": \"javclub\",\n        \"password\": \"javclub\",\n        \"database\": \"javclub\"\n    },\n    \"importer\": {\n        \"settings\": {\n            \"googleDrive\": {\n                \"queueNum\": 1\n            }\n        },\n        \"cron\": [\n            {\n                \"driveId\": 1,\n                \"interval\": 36000000,\n                \"doFull\": true\n            }\n        ]\n    },\n    \"proxy\": [\n        \"https://proxy.xiaolin.in/\"\n    ]\n}\n```\n\u003c/details\u003e\n\n- **system**\n  - path: API 监听的路径\n  - corsDomain: cors 头允许的域名\n  - searchParmaNum: 搜索允许的关键词数量(以空格分隔)\n  - defaultGroup: 用户通过直接注册进入的权限组 ID (保持默认即可)\n- **importer**\n  - settings.googleDrive.queueNum: (Int) Importer 导入时队列并行数\n  - cron[].driverId: (Int) 数据库 `drivers` 表中条目的 ID\n  - cron[].interval: (Int) 每隔多少毫秒 扫描一次这个云端硬盘\n  - cron[].doFull: (Boolean) 启动程序后第一次运行时是否扫描云盘全部内容 (建议第一次导入完成后关闭)\n- **proxy** (Array) 用于代理 Metadata Cover 及 Star Cover 的反代 URL (请求格式: `https://your.img.proxy/https://url.to/imgage.png`)\n\n按照提示修改 `config/dev.json` 并更改相关配置即可\n  - `system` 部分若无需更改保持默认即可\n  - `database` 部分请修改 `host` `port` `username` `password` `database` 为你自己的信息\n  - `cron` 部分的相关设定可以**暂时不用填写**, 下文会有详细讲解\n  - `proxy` 字段, 如果不想部署图片代理的话也可以直接填写 `[\"\"]`\n\n##### 数据库\n\n~~因程序不打算弄太复杂, 所以没有安装界面, 请自行导入数据表~~\n\n在最新版本中终于用上了 migration, 所以现在数据表在启动时会自动创建, 默认的用户名 / 密码为 `admin` / `admin`, 请及时修改\n\n##### 配置 Google Drive 相关\n\ncore 中的数据来源是 fetcher 上传至 Google Drive 中的数据, 请在使用前 1-2 天部署好 fetcher 以获取足够的数据 (当然你要是想部署完 core 再部署 fetcher 也是没问题的)\n\n首先要做的是往数据库里添加有关 Google Drive 的信息, 样例 SQL 命令如下\n```sql\nINSERT INTO `drivers` (`id`, `name`, `driverType`, `driverData`, `isEnable`, `createTime`, `updateTime`) VALUES\n(1, 'My first drive', 'gd', '{\\\"oAuth\\\":{\\\"client_id\\\":\\\"【your_client_here】\\\",\\\"client_secret\\\":\\\"【your_client_secret_here】\\\",\\\"redirect_uri\\\":\\\"urn:ietf:wg:oauth:2.0:oob\\\",\\\"token\\\":{\\\"access_token\\\":\\\"【your_access_token_here_optional】\\\",\\\"refresh_token\\\":\\\"【your_refresh_token_here】\\\",\\\"scope\\\":\\\"https://www.googleapis.com/auth/drive\\\",\\\"token_type\\\":\\\"Bearer\\\",\\\"expiry_date\\\":1583679345619}},\\\"drive\\\":{\\\"driveId\\\":\\\"【your_drive_or_folder_id_here】\\\"},\\\"encryption\\\":{\\\"secret\\\":\\\"【path_ase_secret】\\\",\\\"server\\\":\\\"【your_gd_proxy_server_here】\"}}', 1, '1583679345619', '1583679345619');\n```\n\n`driverData` 是这部分的核心, 看起来挺乱的, 这里给一个格式化后的方便理解\n```json\n{\n    \"oAuth\":{\n        \"client_id\":\"xxx.apps.googleusercontent.com\",\n        \"client_secret\":\"\",\n        \"redirect_uri\":\"urn:ietf:wg:oauth:2.0:oob\",\n        \"token\":{\n            \"access_token\":\"\",\n            \"refresh_token\":\"\",\n            \"scope\":\"https://www.googleapis.com/auth/drive\",\n            \"token_type\":\"Bearer\",\n            \"expiry_date\":1583679345619\n        }\n    },\n    \"drive\":{\n        \"driveId\":\"987b3d98q7deuiedsr\",\n        \"type\": \"shared\"\n    },\n    \"encryption\":{\n        \"secret\":\"secret\",\n        \"server\":\"https://proxy.abc.workers.dev,https://proxy.def.workers.dev\"\n    }\n}\n```\n- oAuth 中的顾名思义就是 Google API 的鉴权信息, 按照你的凭证填写即可\n  - 凭证相关可使用 [GoIndex Code Builder](https://install.achirou.workers.dev/zh) 来方便地取得, 将生成代码中的 `client_id`、`client_secret`、`refresh_token` 复制到此处即可, 其余位置可留空\n- drive\n  - driveId 是你的云端硬盘 ID, 也就是云端硬盘根目录浏览器地址栏的那一长串东西\n  - type[optional] 可选 `user` 或 `shared`, 选择 `user` 时无需填写 `driveId`, 代表 `我的云端硬盘`\n- encryption 是给 Workers 使用的选项\n  - secret 请随便填写串字符, 部署 Workers 时使用的 `password` 请与此处的保持一致\n  - server 是你部署的 Workers 的地址, 多个地址用 `,` 隔开\n\n更改完后将上面一段 JSON 复制到[这里](json.cn)压缩后照本节开头格式插入数据表即可\n\n下一步就是要告诉程序你添加了这个硬盘并且希望扫描/导入这个硬盘中的内容\n\n还记得[上文](#配置文件)中提到的 `cron` 部分吗? 那里的 `id` 便是这里数据表中自动生成的 `id`\n\n那么就只需要在 `dev.json` 中的 `cron` 字段按中所述添加相应内容即可\n\n到现在 core 应该已经配置完成并可以工作了\n\n##### 配置 WebUI\n\n到现在只剩下 WebUI 程序就可以正常工作了, 为了正常工作需要将 core 的 `/api` 路径代理到你域名下的 `/api` 路径并将静态资源放置于该域名对应目录的根目录下, 请使用你熟悉的 HTTP 服务端软件来执行此操作(如 Nginx, Caddy 等)\n\n首先是拉取并构建 Web UI\n```bash\ngit clone https://github.com/JAVClub/web.git JAVClub_web\ncd JAVClub_web\ncp src/config.example.js src/config.js\nnpm i \u0026\u0026 npm run build\n```\n\n运行完成之后前端资源就已经构建完成了, 位于 `./dist` 目录下\n这时候只需要在服务端软件中将除 `/api` 以外的请求重定向至 `./dist` 目录即可\n\n##### 启动:\n\n```bash\nNODE_ENV=dev node src/app.js\n# 以及你服务端的启动命令\n```\n\n没有意外的话现在 Web UI 和 API 服务器应该已经启动并正常工作了, 可以观察一下输出日志中有没有错误 (如果有务必将错误日志提交至 Issue\n\n如果有任何不明白的欢迎开 issue 提问\n\n### 完成\n\n现在 JAVClub 已经成功运行起来了\n\n那么在这里祝你身体健康\n\n## 其余配置\n\n### 权限组\n\n新版本新增了权限系统, 数据库由 `id` `name` `rule` `time` 四个部分组成\n\n其中 `id` 是权限组 ID, `name` 是权限组名, `rule` 是权限组的权限列表, 为 JSON 格式, 如下所示\n```json\n{\n    \"admin\":true, // 是否为管理员\n    \"title\":\"Admin\",\n    \"banned\":false, // 是否被封禁\n    \"invitationNum\":-1, // 可以创建的邀请码数量\n    \"invitationGroup\":2 // 邀请码使用者注册到的权限组\n}\n```\n\n程序启动时会自动创建 `Admin Group` `User Group` `Banned Group` 三个组, 可按需调整参数\n\n## 后续\n\n先感谢看完这篇废话连篇的使用文档, 有很多东西可能没有说明白, 如果有问题请尽管开 IS 来轰炸我吧\n\n正常来讲现在整套系统应该已经在正常工作了, 如果没有请再次检查是否漏掉了任何一个步骤\n\n## FAQ\n\n- 遇到一大堆问题没办法解决\n\n可以先参考一下 [core#11](https://github.com/JAVClub/core/issues/11) [core#12](https://github.com/JAVClub/core/issues/12) [fetcher#3](https://github.com/JAVClub/fetcher/issues/3#issuecomment-623198549)\n这里是被踩的最多的坑, 可以看看有没有自己遇到的问题\n\n- Docker 部署的相关问题\n\n有关 Docker 部署的任何问题请提交 Issue 或者直接发送邮件询问\n\n- 没有 M-Team 的账号怎么办\n\n现在重写后的 fetcher 也已经支持 OneJAV 了, 所以不需要任何账号都可以正常使用了\n\n- 这玩意儿真的有人成功部署过吗\n\n说实话我也不知道, 我已经尽最大努力简化安装过程\u0026写说明文档了, 如果还是有不懂的可以提交 Issue\n\n## 免责声明\n\n本程序仅供学习了解, 请于下载后 24 小时内删除, 不得用作任何商业用途, 文字、数据及图片均有所属版权, 如转载须注明来源\n\n使用本程序必循遵守部署服务器所在地、所在国家和用户所在国家的法律法规, 程序作者不对使用者任何不当行为负责\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJAVClub%2Fcore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FJAVClub%2Fcore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJAVClub%2Fcore/lists"}