几个重要但还没有被创建的节点
个人觉得重要但是还没有被创建的节点:
- 睡眠
- 动漫
有权限的、也认为重要/有流量的,可以创建了,这不大把的铜币。
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
个人觉得重要但是还没有被创建的节点:
有权限的、也认为重要/有流量的,可以创建了,这不大把的铜币。
断更后也没找到好看的代餐动漫了
在 github 等找到网易云自动刷量的都是好久之前的了,还有封号的风险
于是弄了这个方便网易云音乐人完成听歌任务
项目部署在 docker 里,借助浏览器播放网易云播放实现刷量
docker 的浏览器是通过 vnc 实现可用网页打开
脚本是用到油猴插件
推荐用小号收藏要刷的歌曲在一个歌单,浏览器打开这个歌单试一下播放
再设置脚本定时播放
注意:端口请改成自己合适的,还有 config 路径
Docker Compose
services: edge-browser: linuxserver/msedge:latest # Edge浏览器镜像 container_name: edge-browser # 容器名称 hostname: edge-browser # 容器主机名 environment: - PUID=1000 # 用户ID,请根据你的NAS实际用户ID修改 - PGID=1000 # 用户组ID,请根据你的NAS实际用户组ID修改 - TZ=Asia/Shanghai # 时区设置 - LC_ALL=zh_CN.UTF-8 #- CUSTOM_USER=admin #配置访问用户名 已注释 #- PASSWORD=password #配置访问密码 已注释 - EDGE_CLI=https://music.163.com/ # Edge启动时打开的默认网页 volumes: - ./config:/config # 核心数据持久化,浏览器配置、书签、历史记录等都存在这里 ports: - 3000:3000 # 内部 HTTP 端口。默认为 3000 - 3001:3001 # 内部 HTTPS 端口。默认为 3001,修改冒号左边的端口号。 shm_size: "1gb" # /dev/shm 大小,建议至少 1GB,避免浏览器崩溃 restart: unless-stopped # 除非手动停止,否则容器异常退出后自动重启 油猴脚本 js
// ==UserScript==
// @name 网易云音乐定时播放暂停(每日重复+无弹窗自动执行)
// @namespace https://shuffle.com/
// @version 3.0
// @description 适配.btns容器按钮,每日固定时间自动播放/暂停,无弹窗、任务持久化
// @author You
// @match *://music.163.com/*
// @grant none
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';
// ========== 核心配置 ==========
const PLAY_PAUSE_SELECTOR = '.btns [data-action="play"].ply.j-flag';
const BACKUP_SELECTOR = '.btns .ply.j-flag';
const STORAGE_KEY = 'neteaseMusicTimedTasks'; // 本地存储键名
// 全局变量:存储重复任务的定时器ID(key: 任务ID, value: intervalId)
let intervalTasks = {};
// ========== 工具函数 ==========
// 1. 等待播放按钮加载
function waitForPlayBtn() {
return new Promise(resolve => {
const findBtn = () => {
let btn = document.querySelector(PLAY_PAUSE_SELECTOR);
if (!btn) btn = document.querySelector(BACKUP_SELECTOR);
return btn;
};
const btn = findBtn();
if (btn) return resolve(btn);
const observer = new MutationObserver(() => {
const btn = findBtn();
if (btn) {
observer.disconnect();
resolve(btn);
}
});
observer.observe(document.body, { childList: true, subtree: true });
});
}
// 2. 无弹窗执行播放/暂停(仅控制台输出日志)
async function togglePlayPause(action) {
try {
const playBtn = await waitForPlayBtn();
if (!playBtn) {
console.error('[网易云定时] 未找到播放/暂停按钮');
return;
}
// 状态判断:data-action=pause → 播放中;data-action=play → 暂停中
const currentAction = playBtn.getAttribute('data-action');
const isPlaying = currentAction === 'pause';
const actionText = action === 'play' ? '播放' : '暂停';
// 自动执行点击,无弹窗
if (action === 'play' && !isPlaying) {
playBtn.click();
console.log(`[网易云定时] ${new Date().toLocaleTimeString()} → 自动${actionText}成功`);
} else if (action === 'pause' && isPlaying) {
playBtn.click();
console.log(`[网易云定时] ${new Date().toLocaleTimeString()} → 自动${actionText}成功`);
} else {
console.log(`[网易云定时] ${new Date().toLocaleTimeString()} → 无需执行${actionText}(当前:${isPlaying ? '播放中' : '已暂停'})`);
}
} catch (e) {
console.error('[网易云定时] 执行失败:', e);
}
}
// 3. 计算「首次执行延迟」和「每日重复间隔」
function getDelayAndInterval(targetHour, targetMinute) {
const now = new Date();
const target = new Date();
target.setHours(targetHour);
target.setMinutes(targetMinute);
target.setSeconds(0);
target.setMilliseconds(0);
// 首次执行延迟:若目标时间已过,延迟为「明天该时间 - 现在」
let delay = target.getTime() - now.getTime();
if (delay < 0) delay += 86400000; // 加24小时(86400000毫秒)
return {
firstDelay: delay, // 首次执行延迟(毫秒)
repeatInterval: 86400000 // 每日重复间隔(24小时)
};
}
// ========== 任务持久化(localStorage) ==========
// 1. 从本地存储加载任务
function loadTasks() {
const tasks = localStorage.getItem(STORAGE_KEY);
return tasks ? JSON.parse(tasks) : [];
}
// 2. 保存任务到本地存储
function saveTasks(tasks) {
localStorage.setItem(STORAGE_KEY, JSON.stringify(tasks));
}
// ========== 重复任务管理 ==========
// 1. 添加每日重复任务
function addDailyTask(hour, minute, action) {
// 验证时间格式
if (hour < 0 || hour > 23 || minute < 0 || minute > 59) {
alert('时间格式错误!小时(0-23),分钟(0-59)'); // 仅添加时提示,执行时无弹窗
return;
}
// 生成唯一任务ID
const taskId = Date.now().toString();
const { firstDelay, repeatInterval } = getDelayAndInterval(hour, minute);
// 首次执行 + 每日重复
const firstTimer = setTimeout(() => {
// 执行首次操作
togglePlayPause(action);
// 设置每日重复
const intervalId = setInterval(() => {
togglePlayPause(action);
}, repeatInterval);
intervalTasks[taskId] = intervalId;
}, firstDelay);
// 存储任务信息
const task = {
id: taskId,
time: `${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}`,
action: action === 'play' ? '播放' : '暂停',
firstTimerId: firstTimer // 首次执行的定时器ID
};
const tasks = loadTasks();
tasks.push(task);
saveTasks(tasks);
// 更新UI + 提示添加成功(仅一次)
updateTaskList();
alert(`✅ 每日重复任务已添加:每天${task.time}自动${task.action}音乐(页面刷新不丢失)`);
}
// 2. 取消单个每日任务
function cancelDailyTask(taskId) {
const tasks = loadTasks();
const taskIndex = tasks.findIndex(t => t.id === taskId);
if (taskIndex === -1) return;
// 清除定时器(首次执行+重复执行)
clearTimeout(tasks[taskIndex].firstTimerId);
if (intervalTasks[taskId]) clearInterval(intervalTasks[taskId]);
delete intervalTasks[taskId];
// 移除任务 + 保存
tasks.splice(taskIndex, 1);
saveTasks(tasks);
updateTaskList();
console.log(`[网易云定时] 已取消每日${tasks[taskIndex]?.time}的${tasks[taskIndex]?.action}任务`);
}
// 3. 取消所有每日任务
function cancelAllDailyTasks() {
const tasks = loadTasks();
// 清除所有定时器
tasks.forEach(task => {
clearTimeout(task.firstTimerId);
if (intervalTasks[task.id]) clearInterval(intervalTasks[task.id]);
});
intervalTasks = {};
// 清空存储
saveTasks([]);
updateTaskList();
alert('❌ 已取消所有每日重复任务');
}
// ========== UI面板(管理每日重复任务) ==========
function updateTaskList() {
const listEl = document.getElementById('taskList');
if (!listEl) return;
const tasks = loadTasks();
listEl.innerHTML = '';
if (tasks.length === 0) {
listEl.innerHTML = '<div style="color:#999; padding:5px;">暂无每日重复任务</div>';
return;
}
// 渲染所有重复任务
tasks.forEach(task => {
const item = document.createElement('div');
item.style.cssText = 'padding:4px 0; border-bottom:1px solid #eee; display:flex; justify-content:space-between; align-items:center;';
item.innerHTML = `
<span>🔁 每天${task.time}:自动${task.action}音乐</span>
<button class="cancelTaskBtn" data-id="${task.id}" style="padding:2px 6px; background:#f5222d; color:#fff; border:none; border-radius:3px; cursor:pointer;">取消</button>
`;
listEl.appendChild(item);
// 绑定取消事件
item.querySelector('.cancelTaskBtn').addEventListener('click', (e) => {
cancelDailyTask(e.target.dataset.id);
});
});
}
// 创建UI面板
function createUIPanel() {
const panel = document.createElement('div');
panel.style.cssText = `
position: fixed; top: 20px; right: 20px; z-index: 99999;
background: #fff; padding: 15px; border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.2);
font-size: 14px; color: #333; min-width: 300px;
`;
panel.innerHTML = `
<div style="margin-bottom: 10px; font-weight: bold; font-size:16px;">网易云每日定时</div>
<!-- 时间设置区域 -->
<div style="margin-bottom: 10px; padding-bottom:10px; border-bottom:1px solid #eee;">
<div style="margin-bottom: 8px; display:flex; align-items:center; gap:8px;">
<label>每日执行时间:</label>
<input type="number" id="taskHour" placeholder="小时(0-23)" min="0" max="23" style="padding:4px; width:60px;">
<span>:</span>
<input type="number" id="taskMinute" placeholder="分钟(0-59)" min="0" max="59" style="padding:4px; width:60px;">
</div>
<div style="margin-bottom: 8px;">
<label>执行操作:</label>
<select id="taskAction" style="padding:4px; width:120px;">
<option value="play">自动播放</option>
<option value="pause">自动暂停</option>
</select>
</div>
<button id="addTaskBtn" style="padding:4px 12px; background:#1890ff; color:#fff; border:none; border-radius:4px; cursor:pointer;">添加每日任务</button>
</div>
<!-- 任务列表区域 -->
<div>
<div style="margin-bottom:8px; font-weight:bold;">已添加的每日任务:</div>
<div id="taskList" style="max-height:200px; overflow-y:auto; padding:5px; border:1px solid #eee; border-radius:4px;">
<div style="color:#999; padding:5px;">暂无每日重复任务</div>
</div>
<button id="cancelAllBtn" style="margin-top:8px; padding:4px 12px; background:#666; color:#fff; border:none; border-radius:4px; cursor:pointer;">取消所有任务</button>
</div>
`;
document.body.appendChild(panel);
// 绑定添加任务事件
document.getElementById('addTaskBtn').addEventListener('click', () => {
const hour = Number(document.getElementById('taskHour').value);
const minute = Number(document.getElementById('taskMinute').value);
const action = document.getElementById('taskAction').value;
if (isNaN(hour) || isNaN(minute)) {
alert('请输入有效的小时和分钟!');
return;
}
addDailyTask(hour, minute, action);
// 清空输入框
document.getElementById('taskHour').value = '';
document.getElementById('taskMinute').value = '';
});
// 绑定取消所有任务事件
document.getElementById('cancelAllBtn').addEventListener('click', cancelAllDailyTasks);
}
// ========== 初始化:加载任务+创建UI ==========
function init() {
// 1. 创建UI面板
createUIPanel();
// 2. 加载本地存储的任务,重建定时器
const tasks = loadTasks();
tasks.forEach(task => {
const [hour, minute] = task.time.split(':').map(Number);
const action = task.action === '播放' ? 'play' : 'pause';
const { firstDelay, repeatInterval } = getDelayAndInterval(hour, minute);
// 重建首次执行+重复定时器
const firstTimer = setTimeout(() => {
togglePlayPause(action);
const intervalId = setInterval(() => {
togglePlayPause(action);
}, repeatInterval);
intervalTasks[task.id] = intervalId;
}, firstDelay);
// 更新任务的首次定时器ID(防止页面刷新后无法取消)
task.firstTimerId = firstTimer;
});
saveTasks(tasks);
// 3. 更新任务列表UI
updateTaskList();
}
// 页面加载完成后初始化
if (document.readyState === 'complete') {
init();
} else {
window.addEventListener('load', init);
}
})();
效果图:
飞牛也可以用应用市场的浏览器,方便在外面访问,但是谷歌安装油猴插件有点麻烦
可以在电脑保存好脚本,通过 vnc 的控制栏上传文件
1、找一部安卓机,下载 Apple Music
2、创建 Apple 账户,国家地区选择 “美国”
3、再找一台苹果设置,登录刚注册账户,爽用
全程无需梯子,自带应用商店就能下载 Apple Music
此方法注册苹果账号的优势在于:
你想注册哪个区的,就注册哪个区
一直注册到你满意为止
土区、尼区、日区、阿拉伯区
众所周知,目前国内想要看日漫的话,除了B站引进的动漫之外。其他的都是得自己去找途径。而在B站看番还得等过审。相对来说又是一个不足。所以很多人转向了其他网站或者通过磁力链接之类的。而这些没有国内资质的网站很容易倒闭,而且很多时候为了成本考虑他们会尽可能的压缩视频的画质,导致观看体验较差。而BT下载相对来说资源不用愁,但是得自己去下载。对于手机用户或者对BT不熟悉的人可能会有一定的门槛。
目前有一个开源追番系统——AutoBangumi
这个项目是基于 Mikan Project、qBittorrent 的全自动追番整理下载工具。只需要在 Mikan Project 上订阅番剧,就可以全自动追番。并且整理完成的名称和目录可以直接被 Plex、Jellyfin 等媒体库软件识别,无需二次刮削。所以我们可以通过一次搭建彻底解决看番烦恼。
一台服务器/NAS/电脑
一枚蜜柑账号(已被墙)CN站点:Mikan Project CN
服务器我这里选择的是腾讯云的轻量服务器。个人推荐是买海外地区的。比如新加坡、硅谷、东京这几个地区,这几个地区的服务器线路相对较好。当然如果对价格不敏感的话也可以选择香港地区或者买带宽超过7M的境内服务器

国内服务器带宽小但是胜在稳定。7M的带宽可以覆盖绝大部分的动漫的码率。
蜜柑账号就直接注册一个即可。然后在账号设置中打开高级订阅。


注册完成之后我们需要RSS订阅自己想要看的番剧。订阅可以选择订阅该番剧的全部资源/指定字幕组/指定语言。
下图为示例图:①代表订阅全部资源 ②订阅该发布组的资源可选③简中、繁中、全部
目前出种速度上大部分都是巴哈上播放之后10分钟以内就有内嵌繁中的web源,而简中资源一般会1-7天内出,冷门番剧的话可能没有中文字幕。我个人是喜欢先看繁中资源,剧情要是好看的话就等简中资源出来再看一遍。
订阅之后就会显示如下图标。
此时点击首页最上方菜单栏的订阅就可以看到订阅的番剧了,RSS订阅则是我们接下来要用到。格式如下
AutoBangumi中需要的token就是token=后面的一串字符
https://mikanani.me/RSS/MyBangumi?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# 或者
https://mikanime.tv/RSS/MyBangumi?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
部署程序非常简单,我这里以2c2g的硅谷debian服务器作为演示,进入控制台,先登录指定服务器。可以先在服务器防火墙安全组开放后面需要用到的端口号:7892

先更新软件源:
sudo apt update -y && sudo apt upgrade -y使用官方的安装脚本:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh为了保证 AB 在每次更新之后数据和配置不丢失,推荐使用 Docker volume 或者 bind mount 进行数据和配置的持久化。下列操作可以通过sudo su命令切换到 root 用户进行操作
# 使用 Docker volume
docker volume create AutoBangumi_config
docker volume create AutoBangumi_data
# 使用 bind mount
mkdir "AutoBangumi"
cd "AutoBangumi"
mkdir -p $PWD/config
mkdir -p $PWD/data复制以下命令运行即可。
docker run -d \
--name=AutoBangumi \
-v AutoBangumi_config:/app/config \
-v AutoBangumi_data:/app/data \
-p 7892:7892 \
--network=bridge \
--dns=8.8.8.8 \
--restart unless-stopped \
estrellaxd/auto_bangumi:latest如果使用 bind mount,可以自行替换绑定路径。
此时 AB 的 WebUI 会自动运行,但是主程序会处于暂停状态,可以进入 http://abhost:7892 进行配置。
此时 AB 会自动把环境变量写入 config.json 文件中然后自动运行。
推荐使用 Portainer 等带有 UI 的 Docker 管理器进行进阶部署
我们这里安装的是4.3.9版本
cd /root
wget https://github.com/userdocs/qbittorrent-nox-static/releases/download/release-4.3.9_v1.2.15/x86_64-qbittorrent-nox
chmod +x x86_64-qbittorrent-nox
./x86_64-qbittorrent-nox 输入y就可以安装了,然后CTRL+C退出
默认登录的用户名和密码为admin adminadmin,登陆地址为公网IP:8080。
把下列代码整体复制粘贴到命令行。让qbittorrent可以作为服务长久运行。
cat << "EOF" > /etc/systemd/system/qbittorrent.service
[Unit]
Description=qBittorrent Daemon Service
After=network.target
[Service]
LimitNOFILE=512000
User=root
ExecStart=/root/x86_64-qbittorrent-nox
[Install]
WantedBy=multi-user.target
EOF更新并启动服务
# 更新配置
systemctl daemon-reload
# 启动服务
systemctl start qbittorrent
# 查看状态
systemctl status qbittorrent
# 重启服务
systemctl restart qbittorrent
登录qb的webui页面进行配置并且进行重启服务
输入服务器的 公网IP:7892进入webUI页面默认的用户名为:admin 密码为adminadmin,务必第一时间修改密码!
进入设置页面,首先修改下载设置
qb的地址改为公网地址,密码改成修改后的密码

然后修改解析器,填入之前在蜜柑获取的token,把解析器类型改为蜜柑即可。最后再进行应用


应用之后就可以再qb界面看到下载资源了

可以看到我们订阅的番剧了
如果要实现在线播放有几种方法。
1、优雅的emby、plex、jellyfin媒体管理程序
都是优秀的媒体管理程序,直接适配,不需要再进行搜刮。
2、直接搭建一个服务器的文件浏览器。直接看。没啥美感,但是极致的简单
这里介绍一下建一个Emby的服务器。
直接进入官网下载页面按照教程即可。
https://emby.media/linux-server.html
wget https://github.com/MediaBrowser/Emby.Releases/releases/download/4.7.13.0/emby-server-deb_4.7.13.0_amd64.deb
dpkg -i emby-server-deb_4.7.13.0_amd64.deb
完成后打开公网IP:8096 ,打不开先看看防火墙规则是否开放了8096端口。

进入配置页面,设置一下管理员账号、语言以及qb的下载文件夹即可

完成之后登录就可以看到啦

然后把emby的地址填入AutoBangumi的media player Setting里即可
最后的效果。