Xiami Exporter 虾米数据导出和音乐下载工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
reorx

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

  •  5
     
  •   reorx
    reorx 2021 年 1 月 8 日 5144 次点击
    这是一个创建于 1933 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址: 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 年 1 月 15 日

    完成了如下功能:

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

    tags preview 0 tags preview 1

    15 条回复    2021-01-25 21:14:18 +08:00
    hcsu
        1
    hcsu  
       2021 年 1 月 9 日 via iPhone
    谢谢,支持!收藏了一堆日文韩文的歌,导入到 am 或者 YouTube music 里都是错的
    onlyonen
        2
    onlyonen  
       2021 年 1 月 9 日 via Android
    谢谢老哥的工具,很好用
    seekfire
        3
    seekfire  
       2021 年 1 月 9 日
    感谢,非常实用的工具
    reorx
        4
    reorx  
    OP
       2021 年 1 月 9 日
    @onlyonen 好的,有问题可随时反馈哦
    lxfcool
        5
    lxfcool  
       2021 年 1 月 10 日
    有没有方法能够导出之前自己的评论呢?
    reorx
        6
    reorx  
    OP
       2021 年 1 月 10 日
    @lxfcool 只要网页版有对应接口,都可以做到这个工具中,但是我看了下似乎并没有可以查询自己的评论的 API,很遗憾
    felinx
        7
    felinx  
       2021 年 1 月 12 日
    程序员真可怕,一个不爽就撸代码解决问题 : )
    reorx
        8
    reorx  
    OP
       2021 年 1 月 12 日
    @felinx 哈哈,难道飞龙你不是,以前你可比我更爱折腾呐
    ihainan
        9
    ihainan  
       2021 年 1 月 16 日
    非常感谢
    Lemeng
        10
    Lemeng  
       2021 年 1 月 16 日
    很好,感谢
    wq2016
        11
    wq2016  
       2021 年 1 月 16 日
    就我报错?
    hackpro
        12
    hackpro  
       2021 年 1 月 17 日
    pip install peewee-db-evolve
    reorx
        13
    reorx  
    OP
       2021 年 1 月 18 日 via iPhone
    @wq2016 请提 issue 我来看一下
    reorx
        14
    reorx  
    OP
       2021 年 1 月 19 日
    @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 年 1 月 25 日
    身为虾米的用户对你说声感谢。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2778 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 64ms UTC 15:18 PVG 23:18 LAX 08:18 JFK 11:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86