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()
复制代码
相关推荐
青 春 记 忆30 分钟前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO331 分钟前
03-Flask模板引擎Jinja2详解
笔记·python·flask
临沂GEO3 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白3 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
荷蒲4 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)6 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机6 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor6927 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy7 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源
月光船幽幽8 小时前
真实即粗糙,光滑是伪造
人工智能·python