Kvaesitso 的 Wikipedia 在线搜索集成指南:MediaWiki API 调用、语言化端点与配置解析

发布时间:2026/10/13 10:04:29
Kvaesitso 的 Wikipedia 在线搜索集成指南:MediaWiki API 调用、语言化端点与配置解析 移动开发【免费下载链接】KvaesitsoA search-focused Android launcher项目地址https://gitcode.com/gh_mirrors/kv/Kvaesitso点击查看免费下载导读Kvaesitso 是一个以搜索为核心交互的 Android 桌面启动器launcher其内置的在线百科搜索能力完全基于 Wikipedia 开放的 MediaWiki API 实现。本文面向希望在 Kvaesitso 中启用、自定义或深度理解该集成的开发者与高级用户完整讲解MediaWiki API 的调用方式与查询参数、语言相关默认端点的配置机制wikipedia_url字符串资源、自定义 Wikipedia URL 的偏好设置链路以及从搜索查询到结果展示的完整数据流。读完本文你将能够定位相关源码模块、看懂端到端调用链并掌握在任意语言环境或自建 MediaWiki 站点下正确配置 Kvaesitso 在线百科搜索的方法。集成概述零配置的 MediaWiki API 客户端Kvaesitso 通过MediaWiki APIhttps://www.mediawiki.org/wiki/API:Main_page从 Wikipedia 加载文章数据。根据官方开发者文档 wikipedia.md 的说明该集成开箱即用、无需额外配置默认的 MediaWiki 安装 URL 是语言相关language-dependent的该默认地址可以通过:i18n模块中的wikipedia_url字符串资源string resource进行配置用户在设置界面还可以进一步用自定义 URL 覆盖默认值。从源码结构看该功能由三个模块协同完成各自职责清晰模块职责:data:wikipediadata/wikipediaMediaWiki API 客户端、搜索仓储、结果模型与序列化:core:i18ncore/i18n提供各语言的wikipedia_url、wikipedia_source等本地化字符串:core:preferencescore/preferences持久化搜索开关与自定义 URL 偏好模块已在 settings.gradle.kts 中注册include(:data:wikipedia)并通过 Koin 依赖注入接入应用。核心实现data:wikipedia模块的五个文件整个 Wikipedia 集成集中在de.mm20.launcher2.wikipedia包中共五个 Kotlin 文件从网络层到 UI 数据层逐级解耦Module.ktKoin 依赖注入模块注册搜索仓储与反序列化器WikipediaApi.kt基于 Ktor 的 HTTP 客户端封装 MediaWikiactionquery请求WikipediaRepository.kt搜索入口负责查询长度校验、端点选择与结果组装Wikipedia.kt结果数据类实现Article接口提供打开、分享、占位图标等行为WikipediaSerialization.kt结果的 JSON 序列化/反序列化用于收藏或缓存恢复。其中 Module.kt 将仓储注册为SearchableRepositoryArticle单例并把wikipedia域Wikipedia.Domain见 Wikipedia.kt映射到专用的反序列化器使搜索结果可以按类型正确恢复。网络层MediaWikiactionquery请求的构造WikipediaApi.kt 是请求的最终发出者其search()方法L69-L89完整构造了一次generatorsearch的查询suspend fun search(baseUrl: String, query: String, thumbnailSize: Int): WikipediaSearchResult { return httpClient.get { url { takeFrom(baseUrl) if (pathSegments.isEmpty()) { path(w, api.php) } parameter(action, query) parameter(generator, search) parameter(redirects, true) parameter(gsrlimit, 1) parameter(prop, extracts|info|pageimages) parameter(exchars, 500) parameter(exintro, true) parameter(inprop, url) parameter(format, json) parameter(gsrsearch, query) parameter(pithumbsize, thumbnailSize) } }.body() }各查询参数的含义与 Kvaesitso 的取值策略如下参数取值作用actionquery执行一次 MediaWiki 查询generatorsearch以全文搜索为查询生成器redirectstrue自动跟随重定向到规范条目gsrlimit1每个查询仅取 1 条结果保证搜索框响应迅速propextracts\|info\|pageimages同时取摘要、页面信息与缩略图exchars500摘要文本截取 500 字符exintrotrue只取条目引言部分作为摘要inpropurl返回fullurl与canonicalurl完整链接formatjson响应格式为 JSONgsrsearch用户查询词搜索关键词pithumbsize屏幕宽度的一半缩略图尺寸见下文数据层值得注意的实现细节当传入的baseUrl路径为空时客户端会在其后拼接w/api.phpL73-L75因此端点既可以写成https://en.wikipedia.org也可以直接写成完整的https://en.wikipedia.org/w/api.php。HTTP 客户端配置超时、User-Agent 与 JSON 解析WikipediaApi.kt 中懒加载by lazy构造了一个 KtorHttpClientJSON 解析启用ContentNegotiationkotlinx.serialization的Json.Lenient模式容忍 MediaWiki 响应中的非严格格式User-Agent以包名/v版本号形式设置遵循 MediaWiki 官方对客户端标识的要求超时控制connectTimeoutMillis 200、requestTimeoutMillis 3000、socketTimeoutMillis 1000。其中连接超时仅 200ms一旦网络不可用会快速失败避免搜索框阻塞默认请求defaultRequest { url(baseUrl) }但实际每次请求仍通过takeFrom(baseUrl)重新确定端点。响应体通过三个Serializable数据类解析L18-L41最外层WikipediaSearchResult.query.pages是MapString, WikipediaSearchResultQueryPage每页包含pageid、title、extract、thumbnail.source、fullurl与canonicalurl字段。数据层搜索流程、最短查询与端点选择WikipediaRepository.kt 实现SearchableRepositoryArticle接口其search()方法L22-L39是整个搜索链路的入口包含三个关键策略最短查询长度if (query.length 4 || !allowNetwork) return flowOf(persistentListOf())—— 少于 4 个字符的查询直接返回空结果且必须显式允许联网allowNetwork否则同样不发起任何网络请求动态端点选择通过combineTransform(settings.enabled, settings.customUrl)订阅偏好流baseUrl的优先级是自定义 URL → 本地化默认 URLval baseUrl url.takeIf { !it.isNullOrBlank() } ?: context.getString(R.string.wikipedia_url)并发组合settings.enabled为 false 时结果流被过滤为空emit(persistentListOf())实现设置界面开关的即时生效。queryWikipedia()L41-L64负责实际请求与组装缩略图宽度取当前屏幕物理像素宽度的一半context.resources.displayMetrics.widthPixels / 2保证搜索卡片清晰且不产生冗余流量请求异常超时、网络不可用、解析失败会被CrashReporter.logException(e)记录并返回null不会让崩溃打断用户搜索取pages的第一条结果构造Wikipedia对象sourceName使用R.string.wikipedia_source默认文案为 From Wikipedia见 strings.xml。结果模型与交互打开、分享与占位图标Wikipedia.kt 中的Wikipedia数据类L16-L25实现了Article接口定义于 core/base包含label条目标题、text摘要、imageUrl缩略图、sourceUrlfullurl、wikipediaUrl所用端点等字段。唯一键key $domain://$wikipediaUrl:$idL33以「域名 端点 页面 ID」三元组区分不同实例避免不同语言/自定义站点结果互相冲突打开行为launch()通过Intent.ACTION_VIEWUri.parse(sourceUrl)调起浏览器L46-L52分享行为share()L55-L65将 HTML 摘要转为纯文本截取前 200 字符与来源链接一起放入系统分享菜单占位图标在网络加载完成前使用R.drawable.ic_wikipedia配合灰色色调图层生成占位图标L35-L44。持久化结果序列化与收藏恢复搜索历史与收藏需要跨会话恢复WikipediaSerialization.kt 承担这一职责WikipediaSerializerL9-L24将label、text、id、image、wikipedia_url、url写入 JSONtypePrefix为wikipediaWikipediaDeserializerL26-L40恢复结果若序列化数据中缺少url字段会自动按$wikipediaUrl/wiki?curid$id的格式重建来源链接——这保证即使文章页面 URL 过期也能通过curid稳定定位到原条目。端点配置语言相关的wikipedia_url字符串资源官方文档明确指出默认端点「语言相关」这一点在 core/i18n 的本地化资源中有完整体现。values/strings.xml中默认值为https://en.wikipedia.orgL94-L98其注释说明了设计意图The URL of the Wikipedia instance that is used per default. Can be overridden by user. This should point to the Wikipedia in the given language. If no such Wikipedia exists, a fallback that is suited best for most users of this language should be used (English in most cases).即各语言应指向对应语言的 Wikipedia若该语言没有独立 Wikipedia则回退到对该语言用户最合适的实例通常是英文。仓库中 40 余个语言目录均定义了wikipedia_url例如语言资源目录wikipedia_url值values/strings.xml默认/英文https://en.wikipedia.orgvalues-dehttps://de.wikipedia.orgvalues-jahttps://ja.wikipedia.orgvalues-kohttps://ko.wikipedia.orgvalues-frhttps://fr.wikipedia.orgvalues-zh-rTWhttps://zh.wikipedia.org/zh-tw/values-zh-rCNhttps://en.wikipedia.org回退到英文values-cahttps://ca.wikipedia.org/带尾斜杠注意两个细节其一values-zh-rCN遵循「无对应实例则回退英文」的约定而values-zh-rTW指向繁体中文本地化路径/zh-tw/其二部分值带有尾斜杠如加泰罗尼亚语结合 WikipediaApi.kt 的路径拼接逻辑pathSegments为空时才会追加w/api.php因此这些写法都能正确工作。由于该字符串位于:i18n模块修改或新增语言支持时只需在该模块对应values-*目录的strings.xml中调整此值无需改动任何 Kotlin 代码。自定义端点设置界面与偏好存储除默认语言端点外Kvaesitso 还允许用户直接在设置中覆盖 Wikipedia URL链路为「设置界面 → ViewModel → DataStore 偏好」。偏好层WikipediaSearchSettings.kt 封装了两个流式偏好enabled读写wikipediaSearchEnabledDataStore 默认值为true见 LauncherSettingsData.ktcustomUrl读写wikipediaCustomUrl默认null见 LauncherSettingsData.kt且setCustomUrl()会把空白字符串归一化为null。两者均基于LauncherDataStoreJetpack DataStore持久化并通过distinctUntilChanged()去重。设置界面WikipediaSettingsScreen.kt 使用 Compose 渲染偏好页标题为preference_search_wikipedia即 Wikipedia包含启用开关SwitchPreference说明文字为 Search the free encyclopediastrings.xmlURL 输入框TextPreference标题为 Wikipedia URLpreference_wikipedia_customurlstrings.xml占位符与空值摘要均显示当前语言默认端点用户清空输入即回到默认值。WikipediaSettingsScreenVM.kt 负责在界面与偏好之间桥接通过stateIn将 Flow 转为 Compose 可观察状态用户输入经setCustomUrl()写回 DataStore。最终在 WikipediaRepository.kt 中生效非空的自定义 URL 优先于本地化默认值。启用在线搜索网络权限过滤器出于隐私与流量考虑Wikipedia 搜索以及所有在线结果默认处于关闭状态。官方用户文档 online-results.md 明确说明在线结果默认禁用需要开启「Online results」过滤器才能生效。这一行为在源码中有直接体现SearchFilters.allowNetwork默认值为false见 SearchFilters.kt而 WikipediaRepository.kt 中!allowNetwork会直接短路返回空结果。也就是说即使 Wikipedia 搜索开关为开只要当前查询未启用「Online results」过滤器就不会产生任何网络请求。启用路径依据 filters.md点击搜索栏中的过滤器图标或使用键盘上方弹出的过滤器栏开启Online results过滤器如需每次默认包含在线结果可在设置 → 搜索 → 默认过滤器中预设清空搜索框后过滤器会被重置。需要留意类型过滤器如articles只控制结果类型不代表允许联网搜索Wikipedia 属于在线结果必须同时启用 Online results 过滤器。扩展与自定义场景理解了上述机制后可以衍生出三类实用场景切换到其他语言的 Wikipedia无需任何操作系统语言对应语言环境会自动使用:i18n中的默认端点指向任意 MediaWiki 站点在设置中把 Wikipedia URL 改为任何兼容 MediaWiki API 的站点如https://wiki.example.org即把百科搜索接入自建 Wiki二次开发接入新语言在 core/i18n/src/main/res 下为目标语言目录新增/修改wikipedia_url遵循「语言实例优先、无则回退英文」的既有约定即可。小结Kvaesitso 的 Wikipedia 集成是一条短小精悍但层次完整的调用链偏好层core:preferences决定「是否启用、用哪个端点」→ 仓储层data:wikipedia校验查询长度与网络许可并选择端点 → API 层Ktor向 MediaWikiactionquery发起单结果请求 → 结果模型实现Article接口完成打开、分享与序列化。全程无需 API Key端点完全由语言资源与用户偏好驱动且所有超时与异常都被妥善处理保证搜索框体验不被网络状况拖累。相关文件索引官方开发者文档docs/docs/developer-guide/external-apis/wikipedia.mdAPI 客户端data/wikipedia/src/main/java/de/mm20/launcher2/wikipedia/WikipediaApi.kt搜索仓储data/wikipedia/src/main/java/de/mm20/launcher2/wikipedia/WikipediaRepository.kt结果模型data/wikipedia/src/main/java/de/mm20/launcher2/wikipedia/Wikipedia.kt序列化data/wikipedia/src/main/java/de/mm20/launcher2/wikipedia/WikipediaSerialization.kt偏好设置core/preferences/src/main/java/de/mm20/launcher2/preferences/search/WikipediaSearchSettings.kt默认端点定义core/i18n/src/main/res/values/strings.xml设置界面app/ui/src/main/java/de/mm20/launcher2/ui/settings/wikipedia/WikipediaSettingsScreen.kt网络过滤器core/base/src/main/java/de/mm20/launcher2/search/SearchFilters.kt用户文档docs/docs/user-guide/search/online-results.md、docs/docs/user-guide/search/filters.md赞分享移动开发【免费下载链接】KvaesitsoA search-focused Android launcher项目地址https://gitcode.com/gh_mirrors/kv/Kvaesitso点击查看免费下载相关推荐kotaemon工具集成WikipediaGoogle搜索实战指南kotaemon工具集成WikipediaGoogle搜索实战指南 痛点传统RAG系统的信息局限 你是否遇到过这样的场景当你的文档问答系统遇到超出本地知人工智能大模型RAG向量数据库后端在Xinference中配置API端口与Dify集成指南在Xinference中配置API端口与Dify集成指南 Xinference作为一个开源的模型推理框架提供了便捷的API接口供其他系统调用。本文将详细介绍如模型推理服务大模型人工智能本地部署LLM 网关后端storm API完全指南自定义语言模型与搜索引擎集成storm API完全指南自定义语言模型与搜索引擎集成 引言 你是否在构建知识整理系统时遇到以下痛点现有框架对语言模型Language Model, LM人工智能大模型深度研究RAGAI 应用上一篇ai-data-science-team 的 LangChain 对话迁移方案Message-First 架构改造实战指南下一篇在 Windows 上原生构建 libvmafMSVC 与 MSYS2/MinGW 完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询