产品介绍
产品:Zotero 插件 Zotero-update-matedata 功能:更新 Zotero 条目元数据 原理:获取条目 URL,使用 URL 调用翻译器获取网页信息,更新条目元数据。GitHub
解决问题:如何更优雅的更新条目信息。在使用 Zotero 保存元数据时,经常面临获取信息有误或者不全的问题。以前你是怎么解决这样的问题,自己动手动修改元数据还是打开网页保存新的元数据?假设手动修改元数据 10 条时还能修改,需要修改 100 条元数据时呢?当你想用网页更新条目信息时,你要打开网页,点击保存,再合并重复条目。这些解决方案显然不够优雅,那么有没有办法批量更新元数据,有没有办法不打开网页就能更新条目?
开发路径
从 0 到 1
如何开发这样能更新元数据的插件? 首先寻找有没有人有或者解决了同样的问题,于是使用 Zotero+metadata 来检索,比如官网的论坛搜索和 GitHub 的 Issues。找到不少关于元数据更新的讨论,于是我开始阅读这些讨论,得到这样的结论,有人开发了包含元数据更新功能的插件,但仅限于论文的获取。Zotero 官方也有人有开发相关的内容,并且完成不少功能,但最后没有发布和停止开发了。
那么基于以上内容,我开始准备「抄」代码。阅读其他人和官方的代码,发现代码逻辑大致一致的。决定优先「抄」官方的代码。借助 AI 帮助我阅读代码的内容,让我快速了解到这些代码的作用,让我找到其中的核心代码。
核心代码有了,那么开始测试代码,结果不错,很容易就获取到了想要的数据。于是一个最小的功能就完成了。
在这个过程中我遇到了一个问题,那就是更新所有类型条目的元数据,还是更新部分类型条目的元数据。这个问题的答案很简单,我最初的想法就是更新豆瓣条目的信息,而且不要考虑一次实现所有功能,先完成某一个再到更多。于是目标就成为了,如何更新豆瓣条目的元数据。
从 1 到更多
那么最小功能已经完成,那么如何让这个代码成为一个真正的插件并且运行起来。
这里就涉及到 Zotero 插件的开发了,如何开发一个插件?官网给出了开发案例,但我发现更好的方法是使用 GitHub 的 Zotero 插件开发模版,这是由他人开发的插件模板,并且文档更详细,让开发更简单。
Zotero 插件模板 + 元数据更新的核心代码=zotero-update-metadata 最小 MVP
如何 MVP 更像一个插件?我找了其他插件代码,来观察和模仿,我得到如下结果:
让用户与插件交互
- 用户选择更新元数据的方式:保存新元数据还是更新原有的元数据
- 用户选择是否要保存获取元数据时的附件
优化用户的操作
- 选择不符合条目的条目时,屏蔽操作按钮,避免误操作
- 增加批量更新条目功能
展示操作结果
- 增加操作信息提示,获取元数据成功时的通知,失败时的通知
于是,就得到现在的插件。
那么这个插件还有提升的空间吗?有的,比如支持除了 URL 更多种的更新方法,支持更多的翻译器,让用户更自主选择更新条目中某个信息,而非所有。
花絮
在马拉松开始时,我没有清晰的想法和目标,只是当时有用 Zotero 要手动更新元数据太麻烦的问题,就想解决这个问题。刚好有这个黑客马拉松的计划,于是让自己的想法落地,推动自己创造一个作品。
第一次分享会中,我有听到分享者的提及其每天写「开发日记」,我觉这是个不错的方法,于是我也开始模仿,写开发日记,一共写了 15 篇开发日记。这些日记,记录了我的开发记录和遇到的问题,也形成了我要解决问题的待办任务,也推动了我的前进。
当遇到开发的问题,如何解决?最好的办法当然是看官方的文档,其次使用插件、或模板的文档,再不行就看源代码。简单来说就是先看文档,其次搜索论坛看没没有相同的问题。遇到不会写的代码和功能,就去翻翻别人的插件是如何写的,当然读代码是件费力不讨好的事情,所以最好让 AI 帮你读代码,告诉你实现了什么功能,让 AI 帮你参考这些代码写出你想要的的代码。
ChangeLog
- 240430 完稿