QOwnNotes Homepage 书签建议 API 接入指南:为 Homepage 搜索框提供本地书签联想
桌面应用【免费下载链接】QOwnNotesQOwnNotes is a plain-text file notepad and todo-list manager with Markdown support and Nextcloud / ownCloud integration.项目地址https://gitcode.com/gh_mirrors/qo/QOwnNotes点击查看免费下载QOwnNotes 内置了一个面向 Homepage 仪表盘的本地 HTTP 建议接口Bookmark Suggestion API它复用 Web Companion 浏览器扩展同款的书签解析与索引逻辑让 Homepage 的搜索框可以直接从你本地笔记中的书签生成联想建议。本文将从启用配置、HTTP 端点协议、书签匹配算法、Homepage 配置到仓库自带的custom.js/custom.css前端整合方案给出完整可落地的接入教程。功能概述一条命令连通「本地书签」与「Homepage 搜索」QOwnNotes 以纯文本 Markdown 文件存储笔记而书签正是以 Markdown 链接形式存在于笔记中。Homepage Suggestion API 的核心思路是QOwnNotes 在本地启动一个仅绑定127.0.0.1的 HTTP 服务Homepage或其custom.js前端脚本向该服务请求GET /suggest?q关键字QOwnNotes 扫描带bookmarks标签的笔记、名为Bookmarks的笔记以及当前打开的笔记解析出书签后返回 JSON 建议列表Homepage 将建议合并进自己的搜索联想框点击后可直接打开书签 URL而不是交给搜索引擎。这意味着你的 Homepage 搜索框从此拥有了「个人书签搜索引擎」能力数据完全保留在本机无需上传任何云端。在 QOwnNotes 中启用 Bookmark Suggestion API设置入口打开 QOwnNotes 的Settings - Browser extension / command snippetsWeb Companion 设置页按以下步骤操作勾选Enable socket server启用 Socket 服务这是 Suggestion API 生效的前置开关——未启用时整个浏览器扩展框架区都是灰的在Bookmark suggestion API分组框中勾选Enable Homepage-compatible bookmark suggestions API设置一个监听端口默认为22224可选设置一个安全令牌Security token。对应界面定义可以在 webcompanionsettingswidget.ui 中看到端口使用QSpinBox取值范围 1~65535默认 22224令牌使用QLineEditechoMode为 Password最大长度 32并附带三个工具按钮显示令牌、复制到剪贴板、重新生成令牌。设置读取/存储逻辑位于 webcompanionsettingswidget.cpp。底层参数说明这些设置最终映射到SettingsService的配置键由 websocketserverservice.cpp 读取配置键默认值说明webSocketServerService/bookmarkSuggestionApiEnabledfalse是否启用建议 API对应 isBookmarkSuggestionApiEnabled()webSocketServerService/bookmarkSuggestionApiPort22224Debug 构建为22225监听端口对应 getBookmarkSuggestionApiDefaultPort()webSocketServerService/bookmarkSuggestionApiToken自动生成 32 位随机串访问令牌通过CryptoService加密存储见 getOrGenerateBookmarkSuggestionApiToken()几个值得注意的实现细节仅绑定本机回环地址HTTP 服务通过m_pHttpServer-listen(QHostAddress::LocalHost, port)启动startSuggestionHttpServer()不会暴露到局域网外部机器无法直接访问。令牌自动生成与加密保存设置时若令牌为空会自动生成一个 32 位随机字符串令牌在设置文件中以加密形式保存见 webcompanionsettingswidget.cpp。同时代码保留了对旧版明文值的兼容回退逻辑读取时会自动迁移为加密存储。服务联动refreshServers()会在启用开关打开时启动 HTTP 服务、关闭时停止websocketserverservice.cpp与 WebSocket 服务相互独立、互不影响。HTTP 端点协议详解请求格式端点GET /suggest查询参数参数必选说明q是搜索关键字URL 编码后传入limit否返回建议条数上限默认10最小1最大50token否安全令牌仅在 QOwnNotes 中配置了令牌后必须携带响应格式响应为 JSON 数组第一个元素是原始查询字符串第二个元素是建议字符串数组[home, [Homepage, https://example.com/home, Some Home Link]]该结构的序列化逻辑在 Bookmark::homepageSuggestionResponseJson() 中实现数组第一个元素为查询词第二个元素为建议列表。错误状态码与请求处理流程请求处理在 processHttpRequest() 中完成顺序如下请求行解析失败 → 返回400 Bad Request非GET方法 → 返回405 Method Not Allowed路径不是/suggest→ 返回404 Not Foundtoken参数与配置的令牌不一致 → 返回401 Unauthorized未配置令牌时则跳过该校验limit参数非法时回退为10超出 1~50 范围时被强制收敛到边界正常时返回200 OK与 JSON 响应体。此外所有响应都带有 CORS 头Access-Control-Allow-Origin: *、Cache-Control: no-store与Connection: close见 httpResponse()方便浏览器端脚本跨域请求。性能优化双层缓存服务端实现了两级缓存homepageSuggestionResponse()书签缓存书签列表缓存 2500ms2.5 秒后失效重建避免每次请求都重新解析所有笔记建议结果缓存以查询词|limit为键缓存生成好的 JSON 响应缓存上限 200 条超出后按插入顺序淘汰最旧条目。书签来源与匹配算法源码级解析书签从哪里来getBookmarksForSuggestions()websocketserverservice.cpp按以下顺序汇总书签所有带有bookmarks标签的笔记标签名可在设置中修改默认bookmarks见 getBookmarksTag()所有名为Bookmarks的笔记笔记名同样可配置默认Bookmarks见 getBookmarksNoteName()当前正在编辑的笔记中的所有链接。汇总前会做去重合并相同 URL 的书签合并标签、名称与描述然后整体缓存。书签如何解析Bookmark::parseBookmarks() 使用正则解析笔记文本支持三类 Markdown 链接标准书签格式- [名称](http://链接) #标签1 #标签2 描述文字行首为-或*普通命名链接[名称](http://链接)尖括号链接http://链接。其中 URL 必须以协议://形式出现如https://、http://。建议匹配与排序Bookmark::suggestionStrings() 实现了完整的匹配算法大小写不敏感查询词与书签的名称、URL、标签、描述、原始 Markdown 文本统一转为小写后比较多词 token 匹配查询词按空格拆分为多个 token书签必须包含所有token 才算命中token 顺序无关前缀优先排序名称或 URL 以查询词/任一 token 开头的书签排在前面其次才是仅包含子串的书签输出配对命中书签会先输出名称、再输出 URL测试用例 testBookmarkSuggestionsKeepNameUrlPairing 明确验证了「名称索引 URL 索引」的顺序这正是custom.js建立「名称→URL」映射的前提去重大小写折叠后相同的建议只保留一条testBookmarkSuggestionsDeduplication。仓库单元测试 test_notes.cpp 覆盖了前缀/子串匹配、去重、多 token 顺序无关、名称-URL 配对、元数据标签/描述参与匹配、空查询、limit 收敛limit100时强制为 50以及响应 JSON 结构等全部关键行为可作为你理解算法边界的参考。配置 Homepage让搜索框接收本地建议搜索配置示例在 Homepage 的配置中为search块指定provider: custom并将suggestionUrl指向本地 QOwnNotes 建议接口search: provider: custom url: https://example.com/search?q suggestionUrl: http://127.0.0.1:22224/suggest?q showSearchSuggestions: trueprovider: custom告诉 Homepage 使用自定义搜索提供方suggestionUrlHomepage 会向该地址追加用户输入的查询词并发起联想请求showSearchSuggestions: true启用联想框显示若你在 QOwnNotes 中配置了安全令牌请保持suggestionUrl不变改由custom.js中的QON_TOKEN变量在请求时自动追加token...见下文。需要修改哪个 Homepage 文件在标准 Homepage 安装中将search块加入以下任一文件settings.yamlHomepage 全局设置settings.yml同上取决于你的安装命名容器中挂载为/app/config/settings.yaml的文件如果你的 Homepage 部署把配置拆分到多个文件请编辑已经包含searchprovider 设置的那个文件而不要新建重复配置。自定义 Homepage 前端资源合并建议与直接打开书签仅配置suggestionUrl时Homepage 会把建议当作普通搜索词。若希望建议直接打开书签 URL而非跳转搜索引擎需要使用仓库自带的定制前端资源。资源位置仓库在 docs/homepage 目录下提供了现成的定制示例custom.js核心整合脚本custom.css为 QOwnNotes 建议条目提供视觉区分样式README.md整合说明文档。当你的 Homepage 部署支持加载custom.js与custom.css时将这两个文件放入对应目录即可。custom.js 的工作原理custom.js是一个立即执行的前端脚本逐条完成了以下工作对应 docs/homepage/README.md 的说明拦截建议请求重写window.fetch拦截 Homepage 的/api/search/searchSuggestion端点请求合并建议额外向 QOwnNotes 的http://127.0.0.1:22224/suggest?q查询limitQON_LIMIT发起请求并把返回的建议与 Homepage 原生建议合并去重后返回QOwnNotes 建议排前标记来源为每条 QOwnNotes 建议添加[QON]前缀QON_LABEL在界面上一眼可辨建立名称→URL 映射将「名称 URL」成对出现的建议存入suggestionToUrl映射表拦截新窗口打开重写window.open识别搜索引擎跳转 URL 并解码出原始书签地址若命中映射表则直接以书签 URL 打开新标签页避免把书签文本交给搜索引擎带[QON]前缀的文本会被彻底拦截绝不外泄给搜索服务破除 4 条截断通过改写Response.prototype.json拦截 Homepage 对建议列表「前 4 条」的客户端裁剪逻辑让合并后的完整建议列表得以展示DOM 标记通过MutationObserver为匹配行添加qon-suggestionCSS 类并处理键盘导航、滚动定位、URL 提示行等细节。可调参数custom.js顶部的常量即全部配置开关常量默认值说明QON_URLhttp://127.0.0.1:22224/suggest?qQOwnNotes 建议接口地址QON_TOKEN与 QOwnNotes 设置中相同的安全令牌配置后请求会自动追加token...QON_LIMIT20向 QOwnNotes 请求的建议条数上限受服务端 50 限制QON_LABEL[QON] 显示在建议前的标记文本DEBUGfalse设为true可输出[QON-MERGE]调试日志custom.css 的样式效果custom.css 为button.qon-suggestion添加绿色#2f855a左边框和文字颜色并针对映射到 URL 的建议行li.qon-li-has-url在下方渲染一个小字号 URL 提示.qon-url-hint方便你确认即将打开的地址。外部主机部署时的注意点如果你的 Homepage 运行在与 QOwnNotes 不同的机器/容器上必须将custom.js与custom.css部署到承载 Homepage 的那台主机上它才能跨机查询 QOwnNotes 的建议接口使用 QOwnNotes 安全令牌时确保custom.js内的QON_TOKEN与 QOwnNotes 设置中的令牌一致。安全边界与生产建议由于书签数据可能包含敏感 URL官方文档明确提示了以下安全边界默认仅限本机访问服务只绑定127.0.0.1外部网络无法直接触达必须使用安全令牌令牌校验失败返回401未配置令牌时接口对所有本机进程开放建议始终配置令牌如需跨机访问应在 QOwnNotes 之前放置反向代理并用防火墙规则或 IP 白名单限制访问来源不要直接将端口暴露到公网令牌加密存储令牌通过CryptoService加密后写入设置避免明文落盘相关键也被纳入 misc.cpp 的敏感键清单。验证与排错启用并配置完成后你可以直接在本机用curl验证接口# 不带令牌 curl http://127.0.0.1:22224/suggest?qhomelimit10 # 带令牌替换为你的实际令牌 curl http://127.0.0.1:22224/suggest?qhomelimit10tokenYOUR_TOKEN期望返回形如[home,[Homepage,https://example.com/home]]的 JSON。若返回401请核对custom.js中的QON_TOKEN与 QOwnNotes 设置中的令牌是否一致若返回404请确认请求路径为/suggest且 QOwnNotes 的启用开关与 Socket server 开关均已打开。更新custom.js/custom.css后请对 Homepage 页面执行硬刷新确保浏览器加载新版本脚本。至此你的 Homepage 搜索框已经与本地书签笔记打通输入关键字即可获得来自 QOwnNotes 笔记的个人化联想建议并直接打开对应书签全程数据不出本机。赞分享桌面应用【免费下载链接】QOwnNotesQOwnNotes is a plain-text file notepad and todo-list manager with Markdown support and Nextcloud / ownCloud integration.项目地址https://gitcode.com/gh_mirrors/qo/QOwnNotes点击查看免费下载相关推荐QOwnNotes Homepage 书签建议 API为 Homepage 搜索框接入本地书签自动补全QOwnNotes Homepage 书签建议 API为 Homepage 搜索框接入本地书签自动补全 QOwnNotes 提供了一个本地 HTTP 端点把桌面应用QOwnNotes Homepage 书签建议 API 接入指南将本地书签注入 Homepage 搜索建议QOwnNotes Homepage 书签建议 API 接入指南将本地书签注入 Homepage 搜索建议 QOwnNotes 内置了一个仅绑定本机回环地址的桌面应用QOwnNotes Homepage 书签建议 API 实战:把本地书签接入 Homepage 搜索建议QOwnNotes Homepage 书签建议 API 实战:把本地书签接入 Homepage 搜索建议 QOwnNotes 除了常见的笔记与 Markdown桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

zh_core_web_lg-3.8.0中文模型部署与避坑指南

zh_core_web_lg-3.8.0中文模型部署与避坑指南

简介:本资源为spaCy中文语言模型zh_core_web_lg-3.8.0的完整离线安装包,面向Python自然语言处理初学者与NLP工程实践者,专用于中文文本的分词、词性标注、命名实体识别、依存句法分析等核心任务。压缩包共45个文件,涵盖9个配置文件…

2026/10/12 11:19:15 阅读更多 →
终端AI助手会话记忆工具实战:破解大模型上下文丢失难题

终端AI助手会话记忆工具实战:破解大模型上下文丢失难题

从头到尾聊我在终端里折腾会话记忆的实际经验。先说一句:叫这个名字的工具,本质上是给大模型会话客户端加了一层“本地记忆”,它不依赖任何特定厂商,你完全可以把这套思路套到任何主流的对话式 AI 上。我下面统一用 C 助手来代指这…

2026/10/12 11:19:15 阅读更多 →
DFS回溯剪枝求解迷宫所有最短路径的实战解析

DFS回溯剪枝求解迷宫所有最短路径的实战解析

第一次看到这道题,估计不少人跟我一样:入口、出口、求最短路径,条件反射就是广度优先搜索。但等你真正开始读题,会发现它要的不是“一条最短路径”,而是“所有最短路径”。这一个字之差,直接把问题的性质从…

2026/10/12 11:19:15 阅读更多 →

最新新闻

LCA最近公共祖先算法详解:倍增法、Tarjan与树链剖分

LCA最近公共祖先算法详解:倍增法、Tarjan与树链剖分

1. 从一道面试题说起:为什么LCA值得花时间搞透第一次接触LCA是在刷题的时候,题目很直白:给一棵树,多次询问两个节点的最近公共祖先。当时我的第一反应是暴力——两个节点分别往上走,标记走过的路径,第一个相…

2026/10/12 12:59:08 阅读更多 →
Python学习第三阶段重点:函数、数据结构、文件与面向对象

Python学习第三阶段重点:函数、数据结构、文件与面向对象

上个星期我收到一条私信,大意是:跟着Python-100天从新手到大师这个学习计划走到第三周,前面的变量、循环、字符串都能看懂,但一进入新内容就觉得吃力。我回了一句:恭喜,你正处在整个计划最关键的转折点。今…

2026/10/12 12:59:08 阅读更多 →
Python多阶段建模预测NBA总冠军:稳定性特征与贝叶斯校准实战

Python多阶段建模预测NBA总冠军:稳定性特征与贝叶斯校准实战

简介:本资源是一个面向Python数据科学初学者与体育数据分析爱好者的NBA总冠军预测实战项目,聚焦机器学习在体育赛事结果预测中的全流程应用。压缩包共131个文件,含113个CSV历史比赛与球员统计原始数据(如2016–2018赛季常规赛、球…

2026/10/12 12:59:08 阅读更多 →
收藏等于学会吗?用数据统计与即时消化计划终结知识囤积

收藏等于学会吗?用数据统计与即时消化计划终结知识囤积

打开收藏夹那天,我算了笔账,然后把囤了三年的“精神资产”删掉了七成。先交代一下背景,我算是那种典型的“数字囤积狂”。浏览器书签攒了2000多条,各平台收藏夹里躺着3000多篇“以后会看”的文章,网盘里存了上百本PDF和…

2026/10/12 12:59:08 阅读更多 →
VSCode插件开发:根据文件路径一键跳转到对应文件的实现方案与TaoToken配置

VSCode插件开发:根据文件路径一键跳转到对应文件的实现方案与TaoToken配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 12:59:08 阅读更多 →
协同过滤图书推荐系统实战:Django+MySQL构建基于商品的推荐引擎

协同过滤图书推荐系统实战:Django+MySQL构建基于商品的推荐引擎

简介:基于Python Django框架的图书推荐系统完整项目,后端采用基于物品的协同过滤算法(Item-based CF),依托豆瓣图书与评分数据集,结合Mysql存储,实现从用户登录、书目管理到推荐结果展示的完整流…

2026/10/12 12:58:07 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →