[转]网易云音乐API分析

源地址:

https://github.com/yanunon/NeteaseCloudMusic/wiki/%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90API%E5%88%86%E6%9E%90


1. 总览

本文档是通过对网易云音乐Android客户端(1.5.2)的部分功能进行分析得出的

在所有的交互中,均需要在cookie中设置这对键值appver=1.5.2;

2. 搜索

POST http://music.163.com/api/search/get/

参数

s: 搜索词

limit: 返回数量

sub: 意义不明(非必须参数);取值:false

type: 搜索类型;取值意义

  • 1 单曲
  • 10 专辑
  • 100 歌手
  • 1000 歌单
  • 1002 用户

offset: 偏移数量,用于分页

MUSIC_U: 意义不明(非必须参数)

示例

curl -d "s=玫瑰色的你&limit=20&type=1&offset=0" -b "appver=1.5.2;" http://music.163.com/api/search/get/

结果:

{
    "code": 200, 
    "result": {
        "songCount": 1, 
        "songs": [
            {
                "album": {
                    "status": 1, 
                    "copyrightId": 0, 
                    "name": "\u795e\u7684\u6e38\u620f", 
                    "artist": {
                        "alias": [], 
                        "picUrl": null, 
                        "id": 0, 
                        "name": ""
                    }, 
                    "publishTime": 1344528000000, 
                    "id": 32311, 
                    "size": 10
                }, 
                "status": 1, 
                "copyrightId": 0, 
                "name": "\u73ab\u7470\u8272\u7684\u4f60", 
                "mvid": 5102, 
                "alias": [], 
                "artists": [
                    {
                        "alias": [], 
                        "picUrl": null, 
                        "id": 10557, 
                        "name": "\u5f20\u60ac"
                    }
                ], 
                "duration": 297927, 
                "id": 326695
            }
        ]
    }
}

3. 获取歌手专辑列表

GET http://music.163.com/api/artist/albums/[artist_id]/

其中artist_id用歌手id替换

参数

offset: 偏移数量,用于分页

limit: 返回数量

示例

curl -b "appver=1.5.2;" "http://music.163.com/api/artist/albums/10557?offset=0&limit=3"

结果:

{
    "hotAlbums": [
        {
            "status": 1, 
            "blurPicUrl": "http://p2.music.126.net/mic-HzsY8tNY6DD1eHzdlg==/612427976714915.jpg", 
            "commentThreadId": "R_AL_3_2263047", 
            "description": "", 
            "tags": "", 
            "briefDesc": "", 
            "artist": {
                "img1v1Url": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg", 
                "name": "\u5f20\u60ac", 
                "briefDesc": "", 
                "albumSize": 8, 
                "img1v1Id": 0, 
                "alias": [
                    "\u7126\u5b89\u6ea5"
                ], 
                "picId": 168225279065170, 
                "picUrl": "http://p1.music.126.net/F7i_-eBbuhpBXodY5U2oTw==/168225279065170.jpg", 
                "id": 10557
            }, 
            "companyId": 0, 
            "publishTime": 1349366400007, 
            "name": "\u795e\u7684\u6e38\u620f \u5de1\u6f14\u7cbe\u534e\u5b9e\u5f55", 
            "alias": [], 
            "picId": 612427976714915, 
            "copyrightId": 0, 
            "picUrl": "http://p1.music.126.net/mic-HzsY8tNY6DD1eHzdlg==/612427976714915.jpg", 
            "company": "\u7d22\u5c3c\u97f3\u4e50", 
            "songs": null, 
            "type": null, 
            "id": 2263047, 
            "size": 7
        }, 
        ...
    ], 
    "more": true, 
    "code": 200, 
    "artist": {
        "img1v1Url": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg", 
        "name": "\u5f20\u60ac", 
        "briefDesc": "", 
        "albumSize": 8, 
        "img1v1Id": 0, 
        "alias": [
            "\u7126\u5b89\u6ea5"
        ], 
        "picId": 168225279065170, 
        "picUrl": "http://p1.music.126.net/F7i_-eBbuhpBXodY5U2oTw==/168225279065170.jpg", 
        "id": 10557
    }
}

4. 获取专辑音乐列表

GET http://music.163.com/api/album/[album_id]/

其中album_id用专辑id替换

示例

curl -b "appver=1.5.2;" "http://music.163.com/api/album/32311/"

结果:

{
    "album": {
        "alias": [
            "Games We Play"
        ],
        "artist": {
            "albumSize": 8,
            "alias": [
                "\u7126\u5b89\u6ea5"
            ],
            "briefDesc": "",
            "id": 10557,
            "img1v1Id": 0,
            "img1v1Url": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
            "name": "\u5f20\u60ac",
            "picId": 168225279065170,
            "picUrl": "http://p1.music.126.net/F7i_-eBbuhpBXodY5U2oTw==/168225279065170.jpg"
        },
        "blurPicUrl": "http://p1.music.126.net/cdoUJ2yO5LRuJhGeIsRdjQ==/46179488380332.jpg",
        "briefDesc": "",
        "commentThreadId": "R_AL_3_32311",
        "company": "\u7d22\u5c3c\u97f3\u4e50\u5a31\u4e50",
        "companyId": 0,
        "copyrightId": 0,
        "description": "2012...\n\n",
        "id": 32311,
        "info": {
            "commentCount": 1,
            "comments": null,
            "latestLikedUsers": null,
            "liked": false,
            "likedCount": 0,
            "shareCount": 2,
            "threadId": "R_AL_3_32311"
        },
        "name": "\u795e\u7684\u6e38\u620f",
        "picId": 46179488380332,
        "picUrl": "http://p1.music.126.net/cdoUJ2yO5LRuJhGeIsRdjQ==/46179488380332.jpg",
        "publishTime": 1344528000000,
        "size": 10,
        "songs": [
            {
                "album": {
                    "alias": [
                        "Games We Play"
                    ],
                    "artist": {
                        "albumSize": 0,
                        "alias": [],
                        "briefDesc": "",
                        "id": 0,
                        "img1v1Id": 0,
                        "img1v1Url": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                        "name": "",
                        "picId": 0,
                        "picUrl": ""
                    },
                    "blurPicUrl": "http://p1.music.126.net/cdoUJ2yO5LRuJhGeIsRdjQ==/46179488380332.jpg",
                    "briefDesc": "",
                    "commentThreadId": "R_AL_3_32311",
                    "company": "\u7d22\u5c3c\u97f3\u4e50\u5a31\u4e50",
                    "companyId": 0,
                    "copyrightId": 0,
                    "description": "",
                    "id": 32311,
                    "name": "\u795e\u7684\u6e38\u620f",
                    "picId": 46179488380332,
                    "picUrl": "http://p1.music.126.net/cdoUJ2yO5LRuJhGeIsRdjQ==/46179488380332.jpg",
                    "publishTime": 1344528000000,
                    "size": 10,
                    "songs": null,
                    "status": 1,
                    "tags": "",
                    "type": ""
                },
                "alias": [],
                "artists": [
                    {
                        "albumSize": 0,
                        "alias": [],
                        "briefDesc": "",
                        "id": 10557,
                        "img1v1Id": 0,
                        "img1v1Url": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                        "name": "\u5f20\u60ac",
                        "picId": 0,
                        "picUrl": ""
                    }
                ],
                "bMusic": {
                    "bitrate": 320000,
                    "dfsId": 1012650209189891,
                    "id": 10334056,
                    "name": "\u73ab\u7470\u8272\u7684\u4f60",
                    "playTime": 297927,
                    "size": 11930240
                },
                "commentThreadId": "R_SO_4_326695",
                "copyrightId": 0,
                "dayPlays": 0,
                "duration": 297927,
                "hMusic": {
                    "bitrate": 320000,
                    "dfsId": 1012650209189888,
                    "id": 10334053,
                    "name": "\u73ab\u7470\u8272\u7684\u4f60",
                    "playTime": 297927,
                    "size": 11930240
                },
                "hearTime": 0,
                "id": 326695,
                "lMusic": {
                    "bitrate": 96000,
                    "dfsId": 1012650209189890,
                    "id": 10334055,
                    "name": "\u73ab\u7470\u8272\u7684\u4f60",
                    "playTime": 297927,
                    "size": 3595194
                },
                "mMusic": {
                    "bitrate": 160000,
                    "dfsId": 1012650209189889,
                    "id": 10334054,
                    "name": "\u73ab\u7470\u8272\u7684\u4f60",
                    "playTime": 297927,
                    "size": 5976935
                },
                "mp3Url": "http://m1.music.126.net/uCNvR9xHLoQIj1kIRyzadQ==/1012650209189889.mp3",
                "mvid": 5102,
                "name": "\u73ab\u7470\u8272\u7684\u4f60",
                "playedNum": 0,
                "popularity": 95.0,
                "position": 1,
                "score": 95,
                "starred": false,
                "starredNum": 0,
                "status": 1
            },
            ...
        ],
        "status": 1,
        "tags": "",
        "type": ""
    },
    "code": 200
}

5. 下载音乐文件

GET http://m1.music.126.net/[encrypted_song_id]/[song_dfsId].mp3

其中song_dfsId为歌曲id,同一歌曲不同比特率有不同的id,见上结果。encrypted_song_idsong_dfsId加密后的字符串。

歌曲id加密代码
import md5

def encrypted_id(id):
    byte1 = bytearray('3go8&$8*3*3h0k(2)2')
    byte2 = bytearray(id)
    byte1_len = len(byte1)
    for i in xrange(len(byte2)):
        byte2[i] = byte2[i]^byte1[i%byte1_len]
    m = md5.new()
    m.update(byte2)
    result = m.digest().encode('base64')[:-1]
    result = result.replace('/', '_')
    result = result.replace('+', '-')
    return result

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Spark进行网易云音乐数据分析的步骤如下: 1. 数据获取:从网易云音乐API中获取数据,或者从公开数据集中获取数据。 2. 数据清洗:对数据进行清洗,包括去重、缺失值处理、异常值处理等。 3. 数据预处理:对数据进行预处理,包括特征提取、特征选择、数据换等。 4. 数据分析:使用Spark的分布式计算能力进行数据分析,包括统计分析、机器学习等。 5. 结果可视化:将分析结果进行可视化展示,包括图表、报表等。 以下是一个基于Spark进行网易云音乐数据分析的例子: ```scala // 导入Spark SQL和Spark MLlib库 import org.apache.spark.sql.SparkSession import org.apache.spark.ml.feature.{HashingTF, IDF, Tokenizer} import org.apache.spark.ml.clustering.KMeans // 创建SparkSession val spark = SparkSession.builder.appName("NetEaseMusicAnalysis").getOrCreate() // 读取数据 val data = spark.read.format("csv").option("header", "true").load("netease_music_data.csv") // 数据清洗 val cleanedData = data.dropDuplicates().na.drop() // 数据预处理 val tokenizer = new Tokenizer().setInputCol("song_name").setOutputCol("words") val wordsData = tokenizer.transform(cleanedData) val hashingTF = new HashingTF().setInputCol("words").setOutputCol("rawFeatures").setNumFeatures(10000) val featurizedData = hashingTF.transform(wordsData) val idf = new IDF().setInputCol("rawFeatures").setOutputCol("features") val idfModel = idf.fit(featurizedData) val rescaledData = idfModel.transform(featurizedData) // 数据分析 val kmeans = new KMeans().setK(10).setSeed(1L) val model = kmeans.fit(rescaledData.select("features")) val predictions = model.transform(rescaledData) // 结果可视化 predictions.groupBy("prediction").count().show() ``` 该例子使用Spark对网易云音乐的歌曲名称进行聚类分析分析结果展示了每个聚类中歌曲数量的统计信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值