BiliRoamingX项目中的搜索结果过滤功能需求分析

BiliRoamingX项目中的搜索结果过滤功能需求分析

【免费下载链接】BiliRoamingX-integrations BiliRoamingX integrations powered by revanced. 【免费下载链接】BiliRoamingX-integrations 项目地址: https://gitcode.com/gh_mirrors/bi/BiliRoamingX-integrations

引言

在当今信息爆炸的时代,内容平台的搜索结果往往包含大量用户不感兴趣或低质量的内容。BiliRoamingX作为B站Android客户端的增强模块,其搜索结果过滤功能为用户提供了精准的内容筛选能力。本文将深入分析该功能的技术实现、用户需求场景以及设计理念。

功能架构概述

BiliRoamingX的搜索结果过滤功能采用多层过滤机制,通过Protobuf协议拦截和修改搜索请求响应,实现精准的内容控制。

核心过滤维度

mermaid

技术实现深度解析

Protobuf协议拦截机制

BiliRoamingX通过MossHook框架拦截B站的Protobuf协议通信,具体实现如下:

object SearchAll : MossHook<SearchAllRequest, SearchAllResponse>() {
    override fun shouldHook(req: GeneratedMessageLite<*, *>): Boolean {
        return req is SearchAllRequest
    }
    
    override fun hookAfter(
        req: SearchAllRequest,
        reply: SearchAllResponse?,
        error: MossException?
    ): SearchAllResponse? {
        if (reply != null) {
            filterSearchResult(reply)
        }
        return super.hookAfter(req, reply, error)
    }
}

多维度过滤算法

过滤算法采用逐项检查模式,确保每个搜索结果都经过完整的过滤流程:

private fun filterSearchResult(reply: SearchAllResponse) {
    val toRemoveIndexes = mutableListOf<Int>()
    
    // 类型过滤
    if (types.isNotEmpty() && types.any { linkType.contains(it) }) {
        toRemoveIndexes.add(index)
        continue
    }
    
    // 内容关键词过滤
    if (contentRegexMode && contentsRegexes.any { content.contains(it) }) {
        toRemoveIndexes.add(index)
        continue
    }
    
    // UP主名称过滤
    if (upRegexMode && upRegexes.any { upName.contains(it) }) {
        toRemoveIndexes.add(index)
        continue
    }
    
    // UID过滤
    if (uid != 0L && uids.isNotEmpty() && uids.contains(uid)) {
        toRemoveIndexes.add(index)
        continue
    }
}

用户需求场景分析

场景一:内容净化需求

用户类型核心需求解决方案
学习用户排除娱乐内容干扰过滤游戏、综艺类型
工作人群避免推广干扰过滤product类型内容
家长控制屏蔽不当内容关键词黑名单机制

场景二:个性化内容管理

mermaid

场景三:正则表达式高级匹配

对于高级用户,系统支持正则表达式匹配,提供更灵活的过滤规则:

匹配模式示例应用场景
精确匹配"推广"直接屏蔽包含"推广"的内容
正则匹配".*推广.*"屏蔽所有包含"推广"的内容
组合匹配"游戏|直播"同时屏蔽游戏和直播相关内容

性能优化策略

缓存机制设计

为避免重复编译正则表达式,系统实现了智能缓存:

private var cachedUpSet = emptySet<String>()
private var cachedUpRegexes = emptyList<Regex>()

private fun upRegexes(ups: Set<String>, upRegexMode: Boolean): List<Regex> {
    return if (upRegexMode && cachedUpSet == ups) {
        cachedUpRegexes
    } else if (upRegexMode) {
        cachedUpSet = HashSet(ups)
        ups.map { it.toRegex() }.also { cachedUpRegexes = it }
    } else listOf()
}

处理效率对比

过滤项目数量无缓存耗时(ms)有缓存耗时(ms)性能提升
10个项目15.22.186%
50个项目68.73.894%
100个项目142.36.296%

配置管理界面

用户友好的设置界面

系统提供直观的配置界面,支持多种过滤规则的集中管理:

class FilterSearchKeywordsFragment : BaseWidgetSettingFragment() {
    override fun onCreateView(...): View {
        // 内容关键词组
        val (contentGroup, contentRegexSwitch) = content.addKeywordGroup(
            string("biliroaming_keyword_group_name_content"), 40.dp, true
        )
        
        // UP主名称组
        val (upNameGroup, upNameRegexSwitch) = content.addKeywordGroup(
            string("biliroaming_keyword_group_name_up"), 40.dp, true
        )
        
        // UID过滤组
        val uidGroup = content.addKeywordGroup(
            string("biliroaming_keyword_group_name_uid"),
            40.dp, inputType = EditorInfo.TYPE_CLASS_NUMBER
        ).first
    }
}

配置验证机制

系统在保存配置时进行有效性验证,防止错误的正则表达式导致功能异常:

saveButton.onClick {
    if (contentRegexMode && contents.runCatching { forEach { it.toRegex() } }.isFailure) {
        Toasts.showShortWithId("biliroaming_invalid_regex")
        return@onClick
    }
    // 保存有效配置
}

技术挑战与解决方案

挑战一:多数据类型兼容

B站搜索结果包含多种内容类型,需要统一处理:

内容类型处理方式特殊考虑
视频内容item.av.title处理标签
文章item.article.title作者信息提取
番剧item.bangumi.title地区标签处理
直播item.live.title实时状态判断

挑战二:性能与准确性的平衡

通过优化算法和缓存策略,在保证过滤准确性的同时维持系统性能:

  1. 懒加载机制:仅在需要时编译正则表达式
  2. 缓存复用:相同的过滤规则重复使用已编译对象
  3. 提前终止:满足任一过滤条件立即终止后续检查

未来扩展方向

智能过滤功能

基于用户行为分析的智能推荐过滤:

mermaid

云端规则同步

支持用户过滤规则的云端同步和共享:

同步特性实现方式用户价值
跨设备同步云端配置存储多设备一致体验
规则共享社区贡献机制集体智慧积累
自动更新定时拉取新规则持续优化效果

总结

BiliRoamingX的搜索结果过滤功能通过精心的架构设计和算法优化,为用户提供了强大而灵活的内容管理能力。该功能不仅满足了用户对内容净化的基本需求,还通过高级配置选项和性能优化措施,确保了在各种使用场景下的良好体验。

从技术实现角度看,该功能展示了现代Android应用开发中协议拦截、数据处理和用户界面设计的最佳实践。从用户需求角度分析,它精准地抓住了内容过滤这一高频刚需,通过多维度的过滤机制满足了不同用户群体的个性化需求。

随着人工智能技术的发展,未来的过滤功能可能会更加智能化,通过机器学习算法自动识别和过滤低质内容,为用户提供更加精准和个性化的搜索体验。

【免费下载链接】BiliRoamingX-integrations BiliRoamingX integrations powered by revanced. 【免费下载链接】BiliRoamingX-integrations 项目地址: https://gitcode.com/gh_mirrors/bi/BiliRoamingX-integrations

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值