如何通过 LLM 整理 QQ 音乐中收藏的歌曲清单

现在我的主力听歌软件是 QQ 音乐,心里一直有个念头,想把 QQ 音乐上收藏的歌曲导出成表格保存,顺带还可以看一下我收藏的歌曲中哪个歌手的歌曲是最多的。心动不如行动,利用空闲时间我开始了将想法落地的过程。

实现思路

由于QQ 音乐官方一直没有开通个人可以申请的 API 接口,所以我首先尝试了用 Charles 抓包收藏列表展示的接口,但发现返回的数据都是加密数据,具体的加密方式和签名应该写在了 App 的源码里,于是这条路堵死了。

我又尝试从 Web 端抓取 api 接口,却发现腾讯音乐已经放弃 Web端的运营,通过 Web 端只能查看收藏列表里前 10 首歌曲,想查看所有歌曲只能到 App 端,于是这条路也堵死了。这一点上是不是也侧面反映了移动互联网对传统互联网的升级式碾压,毕竟现在谁还在 Web 端听歌呢。

最后,我想到了用 ORC 结合大模型的方式来收集歌单数据。具体流程如下

image-20240528155254408

1.使用 Picsew 截屏
2.将截图通过白描的 ORC 识别成文本
3.将文本结合提示词输入 Bing Copilot 得到整理后的 csv 文件
4.将 csv 文件拷贝到 Google Sheet

最后效果

截止 2024 年 5 月 26 日,我一共收藏了1723首歌曲,有些歌曲因为版权原因已经不能在 QQ 音乐播放。

image-20240528155332666

顺带统计了一下这些收藏的歌曲中,排名前十的歌手,程序和结果如下:

import pandas as pd 
df=pd.read_csv(r'./data/qq_music.csv') 
n_by_state = df.groupby("歌手")["id"].count().reset_index(name='Size').sort_values('Size',ascending = False)
n_by_state['排序'] = n_by_state['Size'].rank(method='dense', ascending=False).astype(int)
n_by_state[n_by_state['排序']<=10].reset_index(drop=True)

image-20240528160013850

其他

实际操作的过程中,发现以下几个问题

1.Picview 的长截图的能力感觉可以做到无限大,超过一定长度以后,图片格式会变成 PNG
2.白描可以处理的图片大小有限制,图片太大之后会上传失败
3.Bing 可以输入的行数有限制(空行也算做一行),而且可以处理的文本内容也有限制,100 行左右的文本数据可以正确的格式化,行数太多之后 Bing 会出现卡死或者不断重复之前内容的情况
4.使用相同的 prompt,Bing 的 格式化规范程度要比 Chat GPT3.5好太多(Chat GPT 竟然会出现漏行的情况),但是 Bing 的输出太慢了,真的是一个字一个字往外蹦

在写这篇文章的时候,发现有人通过逆向工程的方式破解了 QQ音乐的加密,参考链接先放在这里,下次导数据的时候可以试一试。