MENU

「JavaScript」提取(导出)网易云音乐歌单歌曲列表信息为文件

2021 年 05 月 03 日 • 开发

提取网易云音乐歌单页面中的歌曲列表信息,导出为 JSON 文件。
在浏览器的“开发人员工具”的 Console(控制台)中使用。
使用前需要登录,否则页面中最多显示 10 首歌曲(登录后最多显示 1000 首歌曲)。
用处不大(毕竟有接口可以用,而且获取到的信息更多),只是突然想到就记录下来了。


代码

提取

/**
 * 提取网易云音乐 [歌单页面](https://music.163.com/#/playlist?id=歌单ID) 中的歌曲列表信息
 * 更新:2021-05-03
 *
 * @returns {object[]} 对象数组,对象中包含歌曲 album、artists、duration、id、title 信息
 */
function getPlaylistSongInfo() {
    // 全部歌曲数据
    var songs = [];

    // iframe
    var frameDoc = document.querySelector("#g_iframe").contentDocument;

    // 表格行 tr
    var songListTRs = frameDoc.querySelectorAll("#m-playlist .m-table tbody tr");

    // 遍历
    songListTRs.forEach(function (row) {
        // 表格列 td
        var rowCols = row.querySelectorAll("td");
        // 当前行歌曲信息
        var info = {
            album: rowCols[4].querySelector('.text > a').title,
            artists: rowCols[3].querySelector('.text').title.split('/'),
            duration: rowCols[2].querySelector('span').textContent,
            id: rowCols[0].querySelector('.ply').dataset.resId,
            title: rowCols[1].querySelector('.txt > a b').title
        };

        songs.push(info);
    });

    return songs;
}

转文件

/**
 * 字符串转文件
 *
 * @param {string} data 字符串数据
 * @param {string} filename 文件名
 * @param {string} filetype 文件类型(MIME)
 */
function strToFile(data = '', filename = 'export.txt', filetype = 'text/plain') {
    // 转为 Blob
    var strToBlob = new Blob([data], { type: filetype });
    // URL 对象兼容性处理
    var urlObject = window.URL || window.webkitURL || window;
    // 创建对象 URL
    var blobURL = urlObject.createObjectURL(strToBlob);
    // 创建 a 元素
    var aElem = document.createElement('a');

    // 设置属性
    aElem.classList.add('hidden');
    aElem.download = filename;
    aElem.href = blobURL;
    aElem.target = '_blank';

    // 添加元素
    document.body.appendChild(aElem);

    // 模拟点击
    aElem.click();

    // 移除元素
    aElem.remove();

    // 释放对象
    urlObject.revokeObjectURL(blobURL);
}

调用

var objData = {
    data: getPlaylistSongInfo()
};
var objStr = JSON.stringify(objData);

strToFile(objStr, 'export.json', 'application/json');
最后编辑于: 2021 年 09 月 16 日