python 更新Obsidian

js 复制代码
import requests
import urllib.parse
import urllib3
import os
from dotenv import load_dotenv

# 忽略 HTTPS 警告
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
load_dotenv("../.env")
LOCAL_REST_API_KEY = os.getenv("LOCAL_REST_KEY")
BASE_URL = "https://127.0.0.1:27124"

def update_obsidian_locator_via_put(logical_id, new_selector):
    # 路径和 URL 编码保持不变
    file_path = f"LogicAnchors/{logical_id}.md"
    encoded_path = urllib.parse.quote(file_path, safe='')
    url = f"{BASE_URL}/vault/{encoded_path}"

    # PUT 模式通常只需要 Target-Type
    headers = {
        "Authorization": f"Bearer {LOCAL_REST_API_KEY}",
        "Content-Type": "application/json",
        "Target-Type": "frontmatter",
        "Target": "frontmatter"
    }

    # 注意:PUT 会根据这些 Key 自动匹配并更新
    payload = {
        "locator": new_selector,
        "status": "✅ Stable",
        "last_updated": "2026-04-16"
    }

    try:
        # 改用 PUT 方法
        response = requests.put(url, json=payload, headers=headers, verify=False)

        if response.status_code in [200, 204]:
            print(f"✅ 成功!通过 PUT 更新了 [[{logical_id}]]")
        else:
            print(f"❌ 还是失败 (PUT): {response.status_code}, {response.text}")
    except Exception as e:
        print(f"异常: {e}")


# 测试执行
update_obsidian_locator_via_put("LOGIN_INPUT_EMAIL", 'input[aria-label="New Email"]')

若是执行有问题的话,首先运行排查脚本:

python 复制代码
import requests
from dotenv import load_dotenv
import json
import os
load_dotenv("../.env")

# 配置你的 Obsidian 接口信息
LOCAL_REST_API_KEY = os.getenv("LOCAL_REST_KEY")
BASE_URL = "https://127.0.0.1:27124"
HEADERS = {
    "Authorization": f"Bearer {LOCAL_REST_API_KEY}",
    "Content-Type": "application/json"
}

def debug_list_files():
    # 尝试列出 Logic_Anchors01 文件夹下的所有文件
    debug_url = f"{BASE_URL}/vault/LogicAnchors/"
    response = requests.get(debug_url, headers=HEADERS, verify=False)

    if response.status_code == 200:
        files = response.json()
        print("📂 文件夹下的文件列表:")
        for f in files['files']:
            print(f" - {f}")
    else:
        print(f"❌ 无法读取文件夹,错误码: {response.status_code}")


# debug_list_files()
def get_vault_root_structure():
    # 重点:直接请求 /vault/,不要加任何文件夹名
    url = f"{BASE_URL}/vault/"

    # 禁用证书警告(本地测试)
    import urllib3
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

    response = requests.get(url, headers=HEADERS, verify=False)

    if response.status_code == 200:
        data = response.json()
        print("📁 当前库根目录下的内容:")
        # API 返回通常是一个包含 'files' 键的列表
        for item in data.get('files', []):
            print(f" - {item}")
    else:
        print(f"❌ 根目录访问失败: {response.status_code}, {response.text}")


# get_vault_root_structure()
复制代码
相关推荐
yaoxin5211236 分钟前
419. 现代 Java IO 最佳实践 - 写入文本文件
java·windows·python
weixin_4684668531 分钟前
纳米 AI 搜索新手极速上手指南
人工智能·python·深度学习·搜索引擎·ai·语言模型·自然语言处理
凯瑟琳.奥古斯特37 分钟前
数据库原理选择题精选
数据库·python·职场和发展
彦为君1 小时前
JavaSE-07-异常机制
java·开发语言·后端·python·spring
适应规律2 小时前
【无标题】
人工智能·python·算法
XLYcmy2 小时前
全链路验证测试系统:一个针对智能代理(Agent)系统全链路能力的自动化验证脚本
分布式·python·http·网络安全·ai·llm·agent
有味道的男人2 小时前
电商效率翻倍:京东全量商品信息抓取
python
原来是猿2 小时前
博客系统自动化测试实战总结
python
小江的记录本3 小时前
【JVM虚拟机】JVM调优:常用JVM参数、调优核心指标、OOM排查、GC日志分析、Arthas工具使用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试