2025年04月02日

AlbumMusicSearch 插件开发日志 - 2025年2月

📝 项目概述

AlbumMusicSearch 是一个为 Typecho 博客系统开发的音乐专辑信息搜索插件,旨在帮助博主快速获取音乐专辑信息并自动填充到自定义字段中。该插件集成了 Discogs API,支持多种搜索模式和自动图片本地化功能,极大地提升了音乐类文章的撰写效率。


✨ 2025年2月开发内容

核心功能实现

1. Discogs API 集成

  • 实现了与 Discogs 音乐数据库的完整对接
  • 支持三种搜索模式:歌手搜索、专辑搜索、模糊搜索
  • 实现了分页功能,方便浏览大量搜索结果
  • 添加了搜索结果缓存机制,提升用户体验

2. 自定义字段自动填充

  • 开发了智能字段映射系统
  • 支持自动填充以下字段:

    • album_artist - 歌手名
    • album_title - 专辑名
    • album_year - 发行年份
    • cover - 专辑封面(本地化后)
    • playlist - 歌曲列表
    • album_label - 厂牌
    • album_format - 格式
    • album_country - 发行国家
    • album_released - 发行日期
    • album_genre - 流派
    • album_style - 风格(自动添加到标签)

3. 图片自动本地化

  • 实现了远程图片自动下载功能
  • 支持文章内容和自定义字段中的图片本地化
  • 按年月目录组织图片(usr/uploads/年/月/
  • 生成唯一文件名,避免文件名冲突

4. 标签自动管理

  • 实现了风格(Style)自动添加到文章标签
  • 支持多个风格标签的批量添加
  • 避免重复标签的创建

5. 文章编辑器集成

  • 在文章编辑页面添加了搜索栏
  • 实现了搜索结果的可视化展示
  • 支持一键插入专辑信息和歌曲列表
  • 添加了搜索模式切换功能

6. 图片本地化路由

  • 注册了自定义路由处理图片保存请求
  • 实现了 AJAX 图片上传功能
  • 添加了错误处理和友好的提示信息

🐛 发现的问题与解决方案

问题1:字段命名不一致

问题描述
插件最初使用 album_image 字段存储专辑封面,但与系统中其他插件的字段命名规范不一致,导致模板调用时容易混淆。

解决方案

  • album_image 字段重命名为 cover
  • 保留了 album_cover 字段存储原始 Discogs URL
  • 提供了数据库迁移 SQL 脚本
  • 更新了所有相关文档和代码

问题2:本地图片重复上传

问题描述
当用户使用 ImageUploader 插件选择已上传的本地图片时,AlbumMusicSearch 插件会误判为远程图片并重新上传,导致:

  • 服务器空间浪费
  • 产生重复文件
  • 图片路径改变

解决方案

  • 增强了本地路径检测逻辑
  • 添加了 /usr/uploads/ 路径前缀检查
  • 实现了完整 URL 到相对路径的自动转换
  • 确保真正的远程图片才会被下载

问题3:图片上传路径缺少月份目录

问题描述
downloadImageToLocal() 方法在上传远程图片时,只使用年份目录,没有使用年月目录,导致:

  • 期望路径:usr/uploads/2026/01/xxx.jpg
  • 实际路径:usr/uploads/2026/xxx.jpg

这与 Typecho 原生上传和 ImageUploader 插件的上传路径不一致。

解决方案

  • 修改目录生成逻辑,使用年月目录
  • 确保月份始终补零(01, 02, ..., 12)
  • 统一了所有上传路径格式
  • 与 Typecho 原生上传保持一致

问题4:与 ImageUploader 插件冲突

问题描述
ImageUploader 插件上传图片时返回完整 URL,而 AlbumMusicSearch 插件在发布文章时会检测 cover 字段,由于是完整 URL 而被误判为远程图片,导致重复上传。

解决方案

  • 实现了智能路径识别算法
  • 自动将完整 URL 转换为相对路径
  • 添加了多层检查机制:

    1. 检查是否为相对路径(以 /usr/uploads/ 开头)
    2. 检查是否包含本地上传目录
    3. 只有真正的远程 URL 才下载
  • 确保本地图片不会被重复处理

问题5:搜索结果展示不够友好

问题描述
初始版本的搜索结果展示较为简单,缺少视觉优化,用户体验不够好。

解决方案

  • 优化了搜索结果的 CSS 样式
  • 添加了专辑封面缩略图
  • 实现了鼠标悬停效果
  • 添加了歌曲列表的格式化显示
  • 提升了整体视觉效果

问题6:图片下载失败处理

问题描述
当远程图片下载失败时,没有明确的错误提示,用户无法知道问题所在。

解决方案

  • 添加了详细的错误日志记录
  • 实现了友好的错误提示信息
  • 支持多种图片格式(jpg, jpeg, png, gif, webp)
  • 添加了文件扩展名自动修正功能

问题7:搜索模式切换不便

问题描述
初始版本只支持歌手搜索,切换搜索模式需要修改代码,不够灵活。

解决方案

  • 实现了搜索模式选择器
  • 支持三种搜索模式:歌手、专辑、模糊搜索
  • 添加了单选按钮切换界面
  • 保存用户选择的搜索模式

🔧 技术亮点

1. 智能图片本地化

  • 多层路径检查机制
  • 自动识别本地和远程图片
  • 支持相对路径和完整 URL
  • 避免重复上传

2. 异步搜索优化

  • 使用 AJAX 技术实现异步搜索
  • 支持分页加载搜索结果
  • 减少页面刷新,提升用户体验
  • 添加了加载状态提示

3. 钩子系统集成

  • 利用 Typecho 的钩子系统实现功能扩展
  • 注册了文章发布和保存后的处理钩子
  • 实现了自动本地化功能
  • 无侵入式集成

4. 路由系统

  • 注册了自定义路由处理图片保存
  • 实现了 AJAX 接口
  • 支持跨域请求
  • 添加了权限验证

5. 错误处理机制

  • 完善的错误捕获和日志记录
  • 友好的错误提示信息
  • 支持调试模式
  • 便于问题排查

6. 标签自动管理

  • 自动提取风格信息
  • 批量添加标签
  • 避免重复标签
  • 简化用户操作

📊 开发数据

  • 代码行数:约 800 行(PHP + JavaScript + CSS)
  • 开发周期:2周
  • 版本迭代:4个版本(v1.0.0 - v1.0.3)
  • 钩子数量:4个
  • 自定义字段:11个
  • 测试环境:Chrome, Firefox, Safari, Edge, 移动端浏览器
  • 兼容性:支持 Typecho 1.0+ 版本

🚀 功能特性

搜索功能

  • ✅ 支持歌手搜索
  • ✅ 支持专辑搜索
  • ✅ 支持模糊搜索
  • ✅ 支持分页浏览
  • ✅ 搜索结果缓存

字段管理

  • ✅ 自动填充 11 个自定义字段
  • ✅ 支持专辑封面本地化
  • ✅ 支持歌曲列表插入
  • ✅ 支持风格自动添加到标签

图片处理

  • ✅ 远程图片自动下载
  • ✅ 本地图片智能识别
  • ✅ 避免重复上传
  • ✅ 按年月目录组织

用户体验

  • ✅ 可视化搜索界面
  • ✅ 一键插入信息
  • ✅ 友好的错误提示
  • ✅ 平滑的过渡效果

📝 版本历史

v1.0.3 (2026-01-15)

  • 彻底解决与 ImageUploader 插件的冲突问题
  • 自动将完整 URL 转换为相对路径
  • 确保本地图片不会被重复上传

v1.0.2 (2026-01-15)

  • 修复本地图片重复上传问题
  • 修复远程图片上传路径缺少月份目录的问题

v1.0.1 (2026-01-15)

  • album_image 字段改为 cover 字段
  • 修复本地化图片路径判断逻辑

v1.0.0

  • 初始版本
  • 支持 Discogs API 搜索
  • 支持多搜索模式
  • 支持自动图片本地化
  • 支持风格自动添加到标签

🔮 未来规划

短期计划

  • [ ] 支持更多音乐数据源(Spotify、Apple Music 等)
  • [ ] 添加搜索历史记录
  • [ ] 支持批量搜索和插入
  • [ ] 优化移动端体验

长期计划

  • [ ] 开发可视化专辑管理界面
  • [ ] 支持歌词自动获取
  • [ ] 集成音乐播放器
  • [ ] 实现专辑封面自动裁剪

💡 开发心得

AlbumMusicSearch 插件的开发过程让我深刻体会到了以下几个关键点:

  1. 插件兼容性的重要性:在开发过程中,必须考虑与其他插件的兼容性,特别是涉及文件上传和路径处理的功能。通过多层检查机制,成功解决了与 ImageUploader 插件的冲突问题。
  2. 用户体验至上:从最初的简单搜索界面到后来的可视化展示,每一次优化都围绕提升用户体验展开。友好的错误提示、平滑的过渡效果、智能的路径识别,都大大提升了用户的使用感受。
  3. 版本迭代的必要性:通过三个版本的快速迭代,逐步解决了字段命名、图片重复上传、路径格式等问题。这种小步快跑的开发模式,让我们能够快速响应用户反馈。
  4. 文档的重要性:详细的更新日志和使用文档,不仅帮助用户理解插件功能,也为后续维护提供了重要参考。
  5. 测试的严谨性:每个版本发布前都进行了充分的功能测试,确保修复的问题不会引入新的 bug,同时验证了不同场景下的兼容性。

开发时间:2025年2月
插件版本:1.0.3
开发人员:黑方
数据来源:Discogs API


这份开发日志详细记录了 AlbumMusicSearch 插件的开发历程,包括功能实现、问题解决和技术亮点,适合公开发布。你可以根据实际需要调整内容或添加更多细节。

标签: none

添加新评论