使用 org-protocol 生成听歌排行
🎶 鞋底子 + 十八岁 (Outro) - 夏之禹 / 地磁卡
在整理 Blaugust Feed 的时候,看到 Matt 的 Now Playing 页面,里面罗列了他的 Top 10 Tracks。
感觉蛮有趣的,于是我也模仿做了一个 听歌排行 页面。
我主要使用网易云音乐听歌,它本身就有听歌排行,我要做的就是拉取下来,格式化后记录到博客文章中。
主要用到 Emacs、org-protocol.el 1、Tampermonkey。
流程是这样的:
- 登录 网页版的网易云音乐,跳转到听歌排行页面。2
- 使用 Tampermonkey 写点 脚本 解析排行页面的元素,然后格式化成自己需要的格式。3
把格式化后的数据保存到博客文章,我的博客是用 Emacs 和 org-mode 写的4,可以利用 org-protocol.el 和 org-mode 的 capture 5功能,捕获并写入到我指定的文件里。
capture 模版
("m" "Music Rank" entry (file+headline "~/git/taxodium/posts/20250928T170716--听歌排行__blackhole_music.org" "每周排行") "* %<%Y-%m-%d W%W %A> \n #+begin_details\n#+html: <summary>Top100</summary>\n%i\n#+end_details" :jump-to-captured t :empty-lines 1 :prepend t :immediate-finish t)
- 使用
file+headline
指定捕获的位置,放到指定文件的指定标题下 - 设置捕获的模板,我用一个日期作为标题,记录快照的时间;然后把 Tampermonkey 获取到的数据放到一个
<details>
元素里 - 设置
:prepend t
使得每次捕获的内容都在前面
- 使用
或许你不用 Emacs,但获取数据的方法是类似的,只是如何保存你需要考虑一下。
脚注:
org-protocol 是一种自定义 URL 方案( org-protocol://
),用于在 Emacs 中触发操作。常见的用法就是浏览器中触发 org-protocol,调用 Emacs 完成一些事情。
macOS 上集成 org-protocol 可以参考 Setting Up org-protocol on Mac | xuchunyang。
听歌排行页面的 URL 是 https://music.163.com/#/user/songs/rank?id=your_id
,我好奇地试了试别的 ID,竟然可以看到其他 ID 的排行。
将排行部分的 HTML 页面,以及期望得到的格式作为输入,vibe coding 一下就能完成了。
关于 capture 的使用,推荐看看 强大的 Org mode(4): 使用 capture 功能快速记录。