Hello World - obsidian
type: channel
link: https://blog.788885.xyz/index.php/tag/obsidian/
items: IPTV 观看查找
items: VPS 拿到手事项
items: IPV6 小鸡最新教程
items: 华为 OBS 使用记录
items: 公益服反代增强
items: IPTV 填进 TVBOX ALIST 里面，远程更新
items: 使用 cloudflare 域名邮箱实现新邮件微信通知
items: 使用tailscale
items: obsidian 写 typecho 博客，上传图片到 lsky pro 图床

IPTV 观看查找
type: item
date: 2025-01-20T01:28:00+00:00
description: body="恭喜，你的项目跑起来了!!!"查找到 url 后，后面加 help这样不知道是否是移动的原因，很多不能观看，在筛选一遍。/1000000004000011651/ystenlive/index.m3u8$20M2160_易视腾在所有选项后面加上这个，再使用iptv检测软件，筛选一遍。筛选之后的结果，点击可用的，然后保存m3u，再使用sublime text 来提取出来。.*(http:\/\/[^\s]+)先查找所有的，内容，然后替换\1复制所有的值，然后ctrl+shift+L，然后删掉多余的，或者直接替换成空白。

VPS 拿到手事项
type: item
date: 2025-01-16T07:33:33+00:00
description: 安装软件更新更新软件库apt update -y && apt upgrade -y更新、安装必备软件apt install sudo curl wget nano校正系统时间将时区改为改成上海sudo timedatectl set-timezone Asia/Shanghai查看当前时区：timedatectl列出所有时区：timedatectl list-timezones安装其他安装 docker 和 1 panel 之类的，有一键脚本curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.shfail2banSupervisorUfw设置备份账户, 如果是云，设置对象存储，否则设置 onedrive

IPV6 小鸡最新教程
type: item
date: 2025-01-07T03:43:45+00:00
description: 安装 warp 获取 ipv 4 地址之前的很多教程已经无法使用，warp 现在不支持 add-excluded-route :: 0/0 参数现在只发现一个脚本可以直接运行wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh这个脚本不知道是不是用的老版本的 warp，但是确实可以用选择 ipv4选择全局模式脚本详细说明如果设置错误，似乎可以 bash menu.sh 4 直接修改这样应该就可以了接下来直接安装探针，装好后选择修改 agent 配置

华为 OBS 使用记录
type: item
date: 2025-01-06T06:37:00+00:00
description: OBS 对象存储介绍存储容量费用： 这是您在 OBS 中存储的数据量所产生的费用，比如您提到的 40GB 硬盘。公网流量费用： 这是通过公网访问 OBS 时产生的流量费用，内网访问不会产生这部分费用。请求次数费用： 这是您对 OBS 发起的请求次数所产生的费用，比如上传、下载、删除等操作。OBS 对象存储有以上三个费用，使用华为的 ECS 主机来内网访问的时候，没有公网流量费用，只有存储容量和请求费用，存储是一次性买断的，请求个人用很少能用超。查看这个教程直接挂载 OBS 在 ECS 主机，当成本地硬盘使用。s3fs挂载S3对象桶-阿里云开发者社区访问密钥获取OBS 挂载必须使用 AK/SK 来访问，直接使用 admin 账户来访问容易造成泄漏，后果太严重。使用统一身份认证来创建一个新的用户，然后新建一个用户组，权限里设置这个用户组只有 OBS 权限。[[Z-assets/8eb7248a07ba083c8a7dfd496d4cd661_MD5.jpeg|Open: Pasted image 20250106143540.png]]这里可以只让用户 AK/SK 访问。具体的的是否真的内网传输还得看下月账单。

公益服反代增强
type: item
date: 2024-10-03T04:02:00+00:00
description: location / { proxy_ssl_name $server; proxy_ssl_server_name on; proxy_pass $forward_scheme://$server:$port; }这个问题在于 misakaf 的反代不是登录网址，它还有一个媒体播放网址 stream1.misakaf.org这样就必须先反代 stream1.misakaf.org，然后在配置加一项替换。location / { proxy_ssl_name $server; proxy_ssl_server_name on; proxy_pass $forward_scheme://$server:$port; sub_filter 'stream1.misakaf.org' '.xyz'; proxy_redirect https://stream1.misakaf.org/ https://s.788885.xyz/; sub_filter_once off; sub_filter_types text/html application/javascript text/css; proxy_set_header Accept-Encoding ""; }上面方法不对，后方媒体播放网址有多个，stream1-stream4，需要4个子域名反代。反代登录网址代码client_max_body_size 20M; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; location / { # 你需要反代的emby服务器域名 proxy_pass https://emby.aca.best; # 你需要反代的emby推流地址 proxy_redirect https://stream1.misakaf.org/ https://s1.a.xyz/; proxy_redirect https://stream2.misakaf.org/ https://s2.a.xyz/; proxy_redirect https://stream3.misakaf.org/ https://s3.a.xyz/; proxy_redirect https://stream4.misakaf.org/ https://s4.a.xyz/; # 你需要反代的emby服务器主页 proxy_set_header Referer "https://emby.aca.best/web/index.html"; proxy_set_header Upgrade $http_upgrade; proxy_set_header Host $proxy_host; proxy_ssl_server_name on; proxy_http_version 1.1; proxy_set_header Connection "upgrade"; }

IPTV 填进 TVBOX ALIST 里面，远程更新
type: item
date: 2024-09-22T17:22:27+00:00
description: status_code="301" && header="https://pixman.io/topics/17" && server="gunicorn"在 ALIST-TVBOX 里面/0 这个订阅，增加定制。{ "lives": [ { "name": "v4v1", "type": 0, "url": "http://0/itv_proxy.m3u", "playerType": 1, "epg": "http://epg.112114.xyz/?ch={name}&date={date}", "logo": "https://epg.112114.xyz/logo/{name}.png" }, { "name": "v4v3", "type": 0, "url": "http://050/itv_proxy.m3u", "playerType": 1, "epg": "http://epg.112114.xyz/?ch={name}&date={date}", "logo": "https://epg.112114.xyz/logo/{name}.png" } ], "blacklist": { "sites": ["", "", "", "", "", "", "", ""] } }问题在于 json 格式经常弄错，使用 AI 来写简单一些，快很多。

使用 cloudflare 域名邮箱实现新邮件微信通知
type: item
date: 2024-09-22T12:26:22+00:00
description: Cloudflare 一直有个域名邮箱功能，无法发送邮件，但是可以无限前缀转发到自己邮箱。现在它的域名邮箱功能，开始支持 worker 了，worker 可以通过新邮件到达触发。这样就可以做到，使用 worker 发送通知，不需要手机一直开着邮箱 APP 接收邮件了。不喜欢 APP 一直在后台，不只是耗电，也很担心隐私的问题。Worker 可以获取新邮件的发送人和内容，我只想要通知，然后使用 outlook 客户端查看邮件。其实因为有 worker ，不只是简单的邮件通知，还可以玩很多的东西，毕竟一封邮件就可以触发了。export default { async email(message, env, ctx) { // 获取原始发件人邮箱 let originalSender = ''; const fromHeader = message.headers.get("From"); if (fromHeader) { // 使用正则表达式提取邮箱地址 const match = fromHeader.match(/<([^>]+)>/); originalSender = match ? match[1] : fromHeader.trim(); } // 如果没有找到发件人，尝试从其他头部获取 if (!originalSender) { const senderHeader = message.headers.get("Sender"); if (senderHeader) { const match = senderHeader.match(/<([^>]+)>/); originalSender = match ? match[1] : senderHeader.trim(); } } // 如果仍然没有找到，使用一个默认值 if (!originalSender) { originalSender = "未知发件人"; } // 获取邮件主题 const subject = message.headers.get("Subject") || "无主题"; // 发送企业微信消息 const wechatWebhookUrl = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=' const wechatMessage = { msgtype: 'text', text: { content: `收到一封新邮件！\n发件人: ${originalSender}` } } // 将消息发送到企业微信机器人 const response = await fetch(wechatWebhookUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(wechatMessage) }) // 返回响应 if (response.ok) { return new Response('微信消息发送成功', { status: 200 }) } else { return new Response('微信消息发送失败', { status: 500 }) } } }

使用tailscale
type: item
date: 2024-09-22T12:08:00+00:00
description: 一键安装脚本curl -fsSL https://tailscale.com/install.sh | sh安装完成后会有一个网址，登录过后，将设备添加进网络即可。tailscale 有一键安装脚本，比 wireguard 更简单，但还是官网面板只支持 3 个设备。如果多个设备，就必须自建Headscale

obsidian 写 typecho 博客，上传图片到 lsky pro 图床
type: item
date: 2024-09-22T11:12:00+00:00
description: 1. 先安装插件 Python Scripter2 . 3. 脚本放入文件夹C:\Users\Administrator\Documents\Obsidian Vault\.obsidian\scripts\pythonimport xmlrpc.client import os import sys import io import re import requests import hashlib from config import * sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8') # 用于存储已上传图片的字典 uploaded_images = {} def get_lsky_token(): response = requests.post(f"{LSKY_API_URL}/tokens", json={ "email": LSKY_EMAIL, "password": LSKY_PASSWORD }) if response.status_code == 200: data = response.json() if data['status']: return data['data']['token'] print(f"获取Lsky Pro token失败: {response.text}") return None def get_file_md5(file_path): hash_md5 = hashlib.md5() with open(file_path, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): hash_md5.update(chunk) return hash_md5.hexdigest() def upload_image_to_lsky(image_path, token): if not os.path.isfile(image_path): print(f"图片文件不存在或不是文件: {image_path}") return None file_md5 = get_file_md5(image_path) if file_md5 in uploaded_images: print(f"图片已上传过: {uploaded_images[file_md5]}") return uploaded_images[file_md5] headers = { "Authorization": f"Bearer {token}", "Accept": "application/json" } print(f"尝试上传图片: {image_path}") try: with open(image_path, 'rb') as image_file: files = {'file': image_file} response = requests.post(f"{LSKY_API_URL}/upload", headers=headers, files=files) if response.status_code == 200: data = response.json() if data['status']: url = data['data']['links']['url'] uploaded_images[file_md5] = url print(f"图片上传成功: {url}") return url print(f"上传图片失败: {response.text}") except Exception as e: print(f"上传图片时发生错误: {str(e)}") return None def replace_image_links(content, vault_path, token): def replace_link(match): image_path = match.group(1) if image_path.startswith('http://') or image_path.startswith('https://'): return match.group(0) # 如果是网络图片，不处理 full_image_path = os.path.normpath(os.path.join(vault_path, image_path)) print(f"处理图片路径: {full_i…