V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
reorx
V2EX  ›  分享创造

Xiami Exporter 虾米数据导出和音乐下载工具

  •  5
     
  •   reorx ·
    reorx · 2021-01-08 23:31:01 +08:00 · 4392 次点击
    这是一个创建于 1444 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址: https://github.com/reorx/xiami_exporter

    前言

    虾米将在 2 月 5 日正式关闭,作为虾米曾经的用户,不舍属于自己的数据就此丢失,遂开发此工具,通过虾米网页端 API,尽可能将多种格式的数据完整保存下来,并规范数据库和文件系统存储结构,方便日后查询和使用。在此分享给有同样需求的朋友,愿大家都能保留属于自己的一份比特记忆。

    可能有人会问,虾米官方不是提供了导出的方法吗,为何还要自己动手实现呢?首先,官方导出的数据非常简陋,以收藏歌曲为例,官方导出每首歌只有 songName, albumName, singers 三个字段,无论是用于溯源还是写入 metadata 都远远不足,只能作为聊胜于无的最后手段;其次,官方不提供歌曲音频文件的下载,对于只存在于虾米的歌曲,往后将非常难以寻找;最后,官方提供的 json 不便于查询和维护,建立一套完整的数据库表结构可以大大增进这方面的便利性,为日后基于这份数据创造其他的应用(如专辑、歌曲展示页面)提供了良好的基础。

    功能

    Xiami Exporter 目前已实现的功能包括:

    • 导出收藏歌曲为 json
    • 下载已导出歌曲的 MP3 文件

    即将(最近几日)实现的功能有:

    • 根据导出信息为 MP3 添加完整的 ID3 tag
    • 下载已导出的歌曲、专辑、艺人的封面图片
    • 导出收藏艺人为 json
    • 导出收藏专辑为 json
    • 导出播放列表为 json (个人和收藏)

    数据

    Xiami Exporter 保存的数据有如下几类:

    • json 数据文件: 歌曲、专辑、播放列表
    • MP3 音频文件: 歌曲、专辑、播放列表
    • 图片文件: 专辑封面
    • sqlite3 数据库文件: 歌曲、专辑、播放列表

    默认在项目路径下创建 XiamiExports 目录,以便于检索的方式将以上数据分门别类,放置在各子目录下。

    数据库中会包含 song, album, playlist 三个表,目前完成了 song 的 schema,见下图:

    db_song

    FAQ

    • Q: 如何完成身份验证?

      A: 通过导出 Chrome 中已登录账户的 cookie,不需要向本工具输入用户名和密码。

    • Q: 使用者需要什么知识和环境?

      A: 基本的命令行操作常识,一台安装了 Python 3 的电脑( macOS 和 Linux 为佳,Windows 理论上支持,若有问题可以反馈 issues )

    • Q: 只能用一个月的项目值得这么做吗?

      A: 经历和记忆定义了目前的我们,对于这个愈发「赛博」的世界来说,数据如同灵魂的一部分,不可轻易舍弃,更不可被随意侵犯。

    • Q: 如何反馈和联系?

      A: 1. 创建 issue; 2. 在 twitter @novoreorx.

    第 1 条附言  ·  2021-01-15 23:47:17 +08:00

    完成了如下功能:

    • 专辑/艺人封面下载
    • 根据歌曲信息添加 ID3 tags(包括专辑封面)

    tags preview 0 tags preview 1

    15 条回复    2021-01-25 21:14:18 +08:00
    hcsu
        1
    hcsu  
       2021-01-09 08:35:33 +08:00 via iPhone
    谢谢,支持!收藏了一堆日文韩文的歌,导入到 am 或者 YouTube music 里都是错的
    onlyonen
        2
    onlyonen  
       2021-01-09 11:30:04 +08:00 via Android
    谢谢老哥的工具,很好用
    seekfire
        3
    seekfire  
       2021-01-09 13:29:39 +08:00
    感谢,非常实用的工具
    reorx
        4
    reorx  
    OP
       2021-01-09 14:09:51 +08:00
    @onlyonen 好的,有问题可随时反馈哦
    lxfcool
        5
    lxfcool  
       2021-01-10 15:48:51 +08:00
    有没有方法能够导出之前自己的评论呢?
    reorx
        6
    reorx  
    OP
       2021-01-10 18:12:15 +08:00
    @lxfcool 只要网页版有对应接口,都可以做到这个工具中,但是我看了下似乎并没有可以查询自己的评论的 API,很遗憾 😔
    felinx
        7
    felinx  
       2021-01-12 11:47:02 +08:00
    程序员真可怕,一个不爽就撸代码解决问题 : )
    reorx
        8
    reorx  
    OP
       2021-01-12 22:46:19 +08:00
    @felinx 哈哈,难道飞龙你不是,以前你可比我更爱折腾呐😏
    ihainan
        9
    ihainan  
       2021-01-16 12:18:31 +08:00
    非常感谢
    Lemeng
        10
    Lemeng  
       2021-01-16 16:26:58 +08:00
    很好,感谢
    wq2016
        11
    wq2016  
       2021-01-16 22:53:52 +08:00
    就我报错?
    hackpro
        12
    hackpro  
       2021-01-17 23:29:04 +08:00
    pip install peewee-db-evolve
    reorx
        13
    reorx  
    OP
       2021-01-18 09:17:38 +08:00 via iPhone
    @wq2016 请提 issue 我来看一下
    reorx
        14
    reorx  
    OP
       2021-01-19 00:59:30 +08:00
    @hackpro 这个项目我看到了,不使用有两个原因:
    1. 不支持 SQLite
    2. database migration 需要做的事情不仅仅是改变 schema,经常还需要对已有数据进行改变。

    peewee-db-evolve 的作者说:
    > Managing your schema by writing your own migrations is kind of like managing your source code by writing your own patch files in addition to writing your actual code. A well vetted diff tool is going to be better and faster at it than you.

    对此我表示完全不赞同,我感觉他还没有被现实中复杂的需求和场景所毒打过🤪
    morphyhu
        15
    morphyhu  
       2021-01-25 21:14:18 +08:00
    身为虾米的用户对你说声感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3133 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 13:01 · PVG 21:01 · LAX 05:01 · JFK 08:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.