Giter Club home page Giter Club logo

neteasecloudmusicapi's Introduction

NeteaseCloudMusicApi

网易云音乐 API - PHP 版
基于网易云音乐 web 端接口改写的 PHP 版本, 建议 PHP 5.6 以上环境
本 API 为个人学习作品,请支持正版音乐,勿滥用

Function

  • 关键字搜索
  • 歌手热门单曲
  • 歌曲详细信息
  • 专辑解析
  • 歌单解析
  • 歌曲地址获取
  • 歌词解析
  • MV 解析

Thanks

Name License Author Link
Math_BigInteger MIT Jim Wigginton PHP
Algorithm - stkevintan Blog
NetEase-MusicBox MIT darknessomi Github
NeteaseCloudMusicApi MIT axhello Github
NeteaseCloud Music - Netease Inc. LINK

Get Started

<?php
# just download the NeteaseMusicAPI.php into directory, require it with the correct path.
# in weapi, you should also put BigInteger.php into same directory, but don't require it.
require_once 'NeteaseMusicAPI.php';

# Initialize
$api = new NeteaseMusicAPI();

# Get data
$result = $api->search('hello');
// or $result = $api->mini()->search('hello');
// $result = $api->artist('46487');
// $result = $api->detail('35847388');
// $result = $api->album('3377030');
// $result = $api->playlist('124394335');
// $result = $api->url('35847388'); # v2 only
// $result = $api->lyric('35847388');
// $result = $api->mv('501053');

# return JSON, just use it
$data=json_decode($result);
header('Content-type: application/json; charset=UTF-8');
echo json_encode($data,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
{
    "result": {
        "songs": [
            {
                "rtUrls": [],
                "ar": [
                    {
                        "id": 46487,
                        "name": "Adele"
                    }
                ],
                "al": {
                    "id": 3377030,
                    "name": "Hello",
                    "pic_str": "3388694837506899",
                    "pic": 3388694837506899
                },
                "st": 0,
                "a": null,
                "m": {
                    "br": 160000,
                    "fid": 18575149440043431,
                    "size": 5911555,
                    "vd": -2.95
                },
                "l": {
                    "br": 96000,
                    "fid": 3401888991069698,
                    "size": 3546951,
                    "vd": -2.98
                },
                "rtUrl": null,
                "pst": 0,
                "dt": 295502,
                "alia": [],
                "pop": 100,
                "rt": null,
                "mst": 9,
                "cp": 390012,
                "crbt": null,
                "mv": 501053,
                "cf": "",
                "h": {
                    "br": 320000,
                    "fid": 3420580735976517,
                    "size": 11823064,
                    "vd": -3.39
                },
                "t": 0,
                "djId": 0,
                "fee": 0,
                "ftype": 0,
                "rtype": 0,
                "rurl": null,
                "v": 13,
                "cd": "",
                "no": 1,
                "name": "Hello",
                "id": 35847388,
                "privilege": {
                    "id": 35847388,
                    "fee": 0,
                    "payed": 0,
                    "st": 0,
                    "pl": 320000,
                    "dl": 320000,
                    "sp": 7,
                    "cp": 1,
                    "subp": 1,
                    "cs": false,
                    "maxbr": 999000,
                    "fl": 320000,
                    "toast": false,
                    "flag": 0
                }
            },
            ...
        ],
        "songCount": 9999
    },
    "code": 200
}

Link

License

NeteaseCloudMusicApi is under the MIT license.

neteasecloudmusicapi's People

Contributors

metowolf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

neteasecloudmusicapi's Issues

search result

how parse the result search i receive something like this
{"result":"35b1748964af8a7c1d883e3a15a258de76740b4d50b1f1cf6d253a0760a2b3f97c0b4d48ddff6c133a3abf4d0338b10b0b31e2ec6db4bbaa03654e66a0b10b74a5ca3812b374a1a7faa0996ec5792c9883628a441081f43d5b5f0d958c000a2c9c183ab23741cf9899d14f49a69a5fed53118cdd22b6df95894078b27fb1c2508a78aa16e247de3a28ffd9462de710a18abc18851040208489081ae62929af3973e081e8944426a2c526dea1c3adfbff7cca06d8ed6a2c623af445a89187bc7f48d366c3423876ec43f9c5a06e48008c10ec0ac838a8af263e1237dde44ac8668e............................","code":200,"abroad":true}

抓了几个包尝试解密获取原信息

然后我崩溃了
params:wMHl2NRSLZswkhm96ud1cYLR1O0P46owJB3I7gSILdx4oVOBpX2Ec7K141ov5q0NTjM0KrDIM9vM0gGRTqxbCTMSU2uIW5cwtSvA4tXC2VAUi0xMaj7g5cLcfQPcYHU1fw2ZrwHAT1P0KlL15LRIOwVC4ZnagrCNNx1K4AM7CpT+BNtl467cgveg8c5KWamhzSwF5PEl4JgRIymA+ourWxHw4nFp8sn7nLKnwCTOGvQ=
encSecKey:14108f6cad95fbef91ae8cd3f89bdc5a95e418a0408bb8e69f2c03eb01fefa02c107b7a205f9a0042c6e6f1c44c02aa60d1bb2a312d5d84f030eb99a72b49b4be0b2c6509d4d2485e2df7bafc6197b6acddb3ae66c63adab1ca99740a4c602bcc2682a56dd6fd645ad2236e75b33a73b98c345a919aefd95db9e3a267ed34c05
大大是如何知道加密的原信息的

V3 weapi 单曲的参数正确么?

c: Json 格式字符串,格式如:[{"id":3377030}]
这个我尝试了下,报参数错误。

但是找了个歌单id试了下 v3 的歌单没问题。

手机客户端eapi解压gzip还是乱码

看了你的wiki,网易云音乐API分析 eapi,手机客户端eapi返回的数据解压gzip还是乱码,解压后如下

b'\xcar\xc5\xb9g\xe9q\xe6\xc9(2\xd4\x8f\xb4\xdc\xca\xad\x9b\xc5\xb2\xf7\xe2\x97\xd9\xb0\xdd\\]\x7f\x15\xa6\xc9\xb3a\xe0\x12|h\x10\xa0\x84B\xb3\x0f\xae\xd3\x01\xe7\x95\x91o\xaf\xd1\x95w\x80j\xd3\x06y\\\x9c|\xb5\xd3n\x94\xd3)\xa7\xea\x1a\x9c&e]\x14\xadh\'\x88\x10Qu\x99\xe4\xe6!\xbf\x11\xebq\xbb\xe5P\x8c\xb6\xf1\xb9Z|\x98\xa5u\x98\xf9+\xd77\xa8\x8f=\xda\xc9\xb2\x16H\x10N";\x1f\tx\xf8\xf7\x99i\xea\xc8\xa8\xf5\xbc\xb4\xc5y\x83\x88\x05\xdaR\xba\x0f\xcfWb\xe9\x8e*(Y\xf65\x1e\xc8}\xe9k\t\x81\xe8\xa9dY\xe3\xf0\x85f\xb7\x8d\xad*&X\x1dw\xdf\r\xcc-R\xe8\x8bG"\x8ec\x87z\xfb\xf0\xf6\xa8\x135Y\xbd\xa3\xf46A\xea\xc5_\xfb\x9b\x19pI\x19\x92\x9e\xbe:)<\xf81\xf2\xd3\x8au~\x82\xe6\x13iBG\xf1\x83@~\xa6\xca\x1a\x9e\xc48\xc8\x19\xc1\x9c\x8do\x9d\xf0R.\x0f?\xe5[\xcb \xa0\xa7\xab\x17c\xff\xe4\xb1\xebY\xd2!G\xe0.C\x1d\xbe\xc8\xd7\t{.\xb6w(\x90\x9f#\x19\xb3|$\xbc\xa3F\x0e\x1d\xb5\xca}\xf0\x1e\xbbMFyd\xa4\x88\xb3S\x85b\xc1\xd5)\x9cC\xd0Q\xe5\x8c/O\xeb\xe3\x90A\x0e\xaa\\G\xc7\x8e\xfd9y_\n:\xa1\x1b]ys~?\xefw\xb1R\xdbe\x91\xd4\xb2\xaa\xe8\xe8!\xff\x0c\x1ct\xb7\xe1e\x08\r\x1f\x1c\x85\xaf\xe9\x9b\xd2\xcd\xa1\xa4\xf9\xc3\xeb\xb0\xe9\x01\xc4\x1d\x0c=u n\xd9\xf3\x06\xff\xfa`\xff\xa1\xef\x18]\x95Qa\x04\x1e\xd3\xaa\x95`\xc8Ww\xd0\xa7\xb7\x9a\x8c}\x9fz\xa6+\xe7\xc8?\x0cs\xd8\x11\xa6\xbaJfjgz\xfb\xcb\xcf\x98k\xb76\xd1bo\xb1\xdd\xa1\xd5\xd5\\\xd6\x0e\xea~\xcc\x1dv\xdd\xa5\xf07\x16\xc3\xcd\xe9Zbru+\xcd\xe3\xa3;\xfe0\xd2\xe6\xc9!\xfc\rp\x85\xd8\x0b\x10\x07W\xb07\x93\xe9\x12\r\x95\xca\xc5s\x83\xb1)\xc2U\xb7\xa1\xdc\xae\xb8\xea\x84\x8f\x07e\x1a\x85Hs\xcf>x\x9e\xb3\xfd\xb9JU\xc8\xc2\x9a\xa1\x8d\x07\xecY\xe53\xa4\'RA\xea\x0b\x19^72\xcc)K\x91+(\x91M\xb2<(\\#\x05\xd6\xe5I\x85\x98\xf2\x173M\xd1\xa5Q[Rn\xaeg\x1b\xa3\xc39\xfdn\xecu\xd5\xa3\x8e\x81G\xb6\x99\x08\x0fg\xf4\xd0\xaaC\x19:\xcaIp\xdb\x91\xb1\x9db\xe5[K\x8f~\xefgKJ|\x16\xe0\x19\xa8_\x16\x99\xa7\xb0\xa4G\xea\xee\xf4\xd2\xc7\xcd\xb8\x10y\xfc\x16\x02$\xf9\'\x05\xa9,~\xa3\x1d\xfe1|\xf9\xb3\r+~\xc6\xcdW\x92\xbd@c1\xb5(\x01C\xbe\x82\x92q\x0e\xa7\xa4\xff\xe8w\x11\x80\x07F\x9f\xf8\xad\xca\xa8>hw\xad\xe0\x90M[\x18\x13i.Z\xdf/\xa8\x0f9{\xde\x84\xb2\x9f(\x83Ys\xa7\xd5\xfc\x8fr/\xaa\'\x90\x01:xc\xec\x1a\x9e\x00\xddV\x85\xf6 \xba\xc3k\xfd\xe6Q\xeb\xd7\x91\x10\xd4Zl\x8e\xa8\xdb\xb9S\x8d\xd7M#A<q\xd9\xe9\x90\xbf\xcf.f\x00\xa2\xcb\n1@d\xeab!\xd3\xbb@\xa26\x98Xz.\xe1\x1c\x99~\x9f\x89\x00\\\xbc\x07\xf3\xd1\xc1\x1e4HDjR4q\xb3]t\xf4\xbd\xdc\xe3\xbbP\xc9\x07|\xe5X4\xfc\xee\xd3\xc7;\xd7&\xfb\x9f\xd3\x16\xe8#M\xfd\x8fcK>\xd8\x82\xdd0\xda\xa72\x17\xfa\x88{\x0e\xa6\x95\xfa\xb1\x97o\xc4\xfe\x0cV\x01\x1c\x91\n\x1bVG\xa0e\xf3(\xd5\xb8\xa9\xe1\xde(\xa9\x831\xd9\xcf\x1c\x07,1V\x9e\x81={\xa5Z2^\x98qC\xf6aLy\xe7me\xc0\xec\xf6%Q#.\xd9k\xb4\xa6\xc5i\xa0UW\x83M\x91\xb9\xd6\xfc8\xc1!\xbc\x10\xf4\xf9\xe5\xf8q\xca\x89\xe89;\x08|#^\xb3\x81%\xae\xa7\x93\xf7\xf7\xe3K\xf4\xc5t\xb6\xa2\tx\xcb\xc3\xfbV\xf4&m\x93\x10m\x90\\\r\x18\x07/\xd6\xbf+^I\xff\xe5\xe7\x85e\x9e\x01?\xc7\xd0\xbfx~\xf0\x90c\xed:\x08\x1enf\x04\xaam\x90\xfb\xa9\xd1Lg\x81|e\xcdN\xe1IWX\xaf\xc4+\xa2\xfb\xc4\x9a\xfb\xd0\xf2\xca\xa69\xf8\xc9\x1d\xc9>7v\x1e\xd7H\x9c\xb7$\x8bS&\xc4(j:3\xad\x9c\xe5\x1f\xf9\xc6O\x89\x95mV]\xd2\n\xd3w\xc7\xfc\xbd\xd2\xcd\x99\xa0cC\x1a`4\x97\xaeq\xf4\xaa\x85S\xaf\xca\xbaj\xab\xd8+H\x85\x1d\xe6#\xf0\xde\xe9O\xcak{\xc7\xe1F\x15\xacY\x10\x92\xef!\xe1\xd8dV\x1fa\x8al\x0c,\xf3\xf9P\xed\xf0^\x17\x9c\'\xe3n\t\x17~\x97\x9c\xf5T\x99\t\xc3ux]\x83\x08\xc4\xb9\x94\xe6\xb0\xb3\xfe\x95\xa9J6\x7fu\xc2\xc4\xa9\xf5\xfe\xfa Y8\x06+\xea9\x8d\xc0{:\x9c\xa8\xfc\x92\x13\xce\x1d\'\x81\x01\xf9\xc1$D\x00\x92\xaa1\xfdS\xee\xe7\xd4Q\xec\x81\x19\xc0?DY\x1a\xba/l\x90\xc3)\x86\x16L\x00\xf6\x81\xa5\x05\x86\xf2T\xa4\xf9\x98\xf2\r\xf9`0R\xcbq~\xcb5H\xa5\x9a\xf8\x9d;\x81\xfe1\xf4.\xa7\xc3g\xb6n\xfckP\x82\xb4X\x85\x87\xc9\xe6\xca_m\xa4\xf3,\xda\xa0\x9b\x00\t\x8aw\xebg\xb1\xbc\x01\xe7\xeb0\xfb^J@xZ}\x9e\xeav\x1a}\xb9&:\xf7\xfa\xe5\x17\x96o0Z\x15\x12h\xdf\x16\x05\x1b\xdd>\xc4\xad\xed\x14>\xe87Q\x9d\x04\xa3\x06i\xef\xe5\xca\x112)%\x93CX\xe7\t\xf3\xf7\xbd\xa7\x84\xe1\x0f\x88N6\xff2\x8c\x1c9\xd0\xb2\xe3\x7f\xb4\xd2\xa2\x92\xf3i\xa0DEe\xfc\xb9n\x8b\x84\x94\xce\xeeP\xa2\t\x9a\xa9\x03`\x02Q{Q\x95|R\x90\xc0\x06\x9fT\x06I\xb9"\xab\x05A\x0f\xa7\xd1_\xb8\xd1SJq\xc9\x19\x95$^wX\xe1\xc6\rA\xed\xab\xdc@\xbe\x9a\x97\xe0\xd2\x12g\x13\x16\xa6\xf4 \x1a\xc3\x92\x11\x8d\xb4\xcc=\xdd\xca\xbaG\x81\xa1\xddhd\xa7\x88\xc7\x94{<\x12\x9d\xfc\xa9X`N\xcc<\x9db\x9cC?\xa2\xf7\xbc^\x9f\xf0\x11\xfa\x9a\xc1Rf\x19\x9c\xeb\xf6\xd8\xde\xe2B\xb8\xbfs\xf3\x12\xc9]\xb0U\xf89e\xae\r\xfdH+*CV\x80\xc8\xa8\x86R\xee\xf7\xfeR\xe0b,\xd08\t\xb9\xa8`\xb9\xae\x9eV\x1e\xbf\xfb5\x80\x8d\xbb!J\x04\xa6\x86w\xa6<\x12#\x96\xf0$Z\x1bB\xdf\x039~\xaf\x91\xe2\xfa\xd2\xbdG\x84\x9eX\xb0\x00e\xc9\xa8\'L\x98\xaa\xedJ>a\xe4w\x1c\x17z\xea\x7f\xfa\x11\xa3s\x98\xdb\xd6zs\xfc\xffx\xc5cZ\xfb\xcc\xbd\x8c\xfc\x90/ \xadqv\'\x9b\xac\x99\x88\xa0HgAs2\xf8\xc3 \xb3\xf1\xc5>I\xf4\xab\xe7\xef\xf5h\xa9t2N\x97\xea\xd0\xee\xdap\x02\x82K\xfc$\nP\x00\xa7\x1a\x94\xe0h\xff\x06m/\xc9\x82$ojE\xb5\x9c\x8c\xca\x95_\x1b\xb4\xa9\x08\x88$\xc0!^\x9b\xe52\xf6E\xd4\x0c-2y\xfd\xc7\xe9\xbd\x11\x9e\xa5\xb6)\'\n\xc1Z\x9a\x84\xe9\xc7\x87O@\xf6\xa0\xe6z;\x9e\xa5\xd0o\x87!\xd7\xd7\t\xfe\xe5Y[\xedW\xd4!\x15\xf4\xb9\x85\xf2S\x1c\xc4\x90\xccE\xac\xfa5~\x80(\xb3\xa2\x12\xd8\x10!=;\xd6\xca\x99\x15\x16\xfa\x9d;\xc4\x06\xdch\xdbK\x9byp\x1a\x10X\xdd\x05is\x18T\xba\xca\xad\xbcJ\x08V*s\x93x\t\x1eJOC\x0f\xfe\xcf\xf0\xc0\xfb:\x90\xef\x1a\x18&\xf1\x92.\x81N\xd6\xcb\x81\xe7\x86h\xb7\xf2\x15L\xd5\x16\x0c\xc2:\x13\xed\xbb\x1c\xf6\x86\x1e\xf64\x93tv\x1f\x05\'\xa57\xb1T\xaa\xe7=\xe5\xf1\x1a\x85\x1b\x8a,\x04D)\xb1R\xdc\xc8\\\x98\x8a\x8c``\x9a\x90\x0b\xde@O\x90\xcd\xea\x84\x95\x94\xe3/hN\xff\xd2tfy\xb0c\x1c\x9f\x90\xed@\xc8\xd64\xe3\x1e7is\xf1\xd7\xb6\xb5\xbd\x072\xe7\xe8\xc2\xd6R|\xa1R\x17Z\xfa\xa1eY\xd9_\x96\x08\x84\xd71jlA\xfa^\xca\xaf_\x92kE\xc9\xb3(\x87\xe4\x13m\xb7z|\xa4\x83"\xd2\xc8\xb8._\xf2\xe6Q5v\xfe\x0bN*\xd2\x01g+P\x9e\xf6\r\xac\x0b\xe2H\xf2\xb21\xbd5\x13\x15\xdaN|Hy\xfb\x91\xec]\x08q\xda\x92\xd7\x8a\\\xdf\xb7\x88c\xacz\xc9]M\x05V\x9c)d\xac\xb0$\xfe\x0f\xef\xec\x88%\x10\xb3|\x1a?"\xd6N\x1a\rS@F\xe5\xcd6F\xb9\x10MJ\xb4;\xe2^\xe6D\xa2\xba\xdc\x0c\n\xef\x92 :\xca\xea\xf8\x8a\x84\x86\xe6\t\xd5eb6\x1dL\xd1)\x03\x00k\xec\xd4\x03\xb7\',\xf8\x8cL\xf6\xfeU=\xafh\xbc^<\x7fW0\x84\t\xab\xee+\xf3\xb4\xfdkDc\xc3\xcc\xd0H\x92\x1b\\-n\xae\xa6(\x8aI>\x03\x17\x84\xe2\xe1\x89\'W\x7f+\xee\x82\xcb\x0f\xc6\xc3\xca2CD\xdc\xd3\xdc\xa4u\x96\x94M`>\x84\xe9\x7f\xc0\x9d\xe1\x84&\xee\xc7\xdb\xa1\x96\x89\x14\xe0M\xf0ilt\xab\x1e-\xcb\xca(\xbd\xe6\x06\x95i\xd4\xa6#\x91\xae\x93\xd5\x87M@w\xd2\n\xe5\n\x8b\t\x16\x1br\xa2\x17\xb7@1\xaa\x18-\x16(\xcc\x10e\xec\xdb\xe2;\x8b\xfaf\x9a2\x97\x80%\x85\xc0\xc4\xca\xb4H\xbf\xb1\x90Z\xfb\x1e\xc2\xfd00\xd2]I\x0b\x7f\x13\xc7\xda\xd9O7\xb0)x\xaf\x8718\x7fv\x19\x9fV@H\xea\xff\x92\xdbt\x96\x82\'\xe6\xb0>t\xba+*9r\x0e\xe6\\\n0\xc7\xa5&\xb3R\x10\xcb\x1e7\xe9\x80\xbf\xd1\xbb\xc7\x9f\xae\x05C\xad\xefR1\xdbh\xbb\xcc\x18T\xfc\xb9\xb3\xa4I\xc0\x96\xef\x80\x96\xed5\x03Ic\xee\xc3\x9e\xe7\xbc\xed\xfc/\xbf{\xe3\xae\xfbeh\x89{\x96\x1f\xd4q\x1f\xaa9w\xae\xf8\x90\x85\xc6\xd8U!\x0f\xcc\x9a\xa1\x89V\xc7\xf8\x89A5<\xd1"\xfd\xbb\xc8q\x8dqH\xd4\xaf\x90Z\xbdn&\x96\x9a\x8a\xaax\x9e\xe8\xb8\'<\xd7\xc4pD\xcb\x00\x8c\xfd\xba\'\xe4j\xd3\x8a\x91\xbaT\xcc\xc2k\xed\xbce^\xc4\xe1\x0c\xe7&\xdaZ\x9c\x8e\x84\xe5\x83\x9bhl\xbe6\x95\x0e\x1cG\xd2\xac\xa9\x03\xe3(\x99+\xea\x0e\x95\x1e\xf7\xf0s\x1f\xe9g\xaf\xb9}k\xecT\xff\x15a&\'\xbc&\x86\x89fO\xef\xb4\xe7\xa88\xf2\xb1/k:\x1b\xc1\x08\\\xf4\x0c$n\x1a/\x0b\xbex\x9f\xab\xa8\x17\x113\x98\x8ato\x9e\x87~{h\xd0\xa4\t\\D\x82\xa5\xfa@\xed\x10\xcbX\xe3\xa8\x11z\xea\x7f\xfa\x11\xa3s\x98\xdb\xd6zs\xfc\xffx\xc5cZ\xfb\xcc\xbd\x8c\xfc\x90/ \xadqv\'\x9b\xac\x99\x88\xa0HgAs2\xf8\xc3 \xb3\xf1\xc5>I\xf4\xab\xe7\xef\xf5h\xa9t2N\x97\xea\xd0\xee\xdap\x02\x82K\xfc$\nP\x00\xa7\x1a\x94\xe0h\xff\x06m/\xc9\x82$ojE\xb5\x9c\x8c\xca\x95_\x1b\xb4\xa9\x08\x88$\xc0!^\x9b\xe52\xf6E\xd4\x0c-2y\xfd\xc7\xe9\xbd\x11\x9e\xa5\xb6)\'\n\xc1Z\x9a\x84\xe9\xc7\x87O@\xf6\xa0\xe6z;\x9e\xa5\xd0o\x87!\xd7\xf2\xc9AC>m\xbeu\xa8\xcc\xaa\xd0\x95\xc8\xacQ[g\xff\x98\x875\x17<\xf1\xfa\x9ck\xefD\xb7Q\xccr-67>U\t\x97G\x82\x8b[[|\xdd\x8fo%\xf6\xbb9i\x88e\x993\xb3\x17)\x14\xdb-\x1ajZ\xc5\x9c3C\x0ff\x9a\xc2\xe4m\xa1\xd2xooh\n\xac>\xfdF8\xc4\xb7t\x9bYOr\xc3R\xdb\x9f\xbbS(Bf\xb4#m\x14\xfe0\xbe\xd6\xeaB\x168As\xf5xUx\t\x0e\x96\x07\x94\x9f\xb3\x81\xeem\x86\xcc\x84\x8d\x94Q\xd3\xf7\x07\x9d\x8b\x13\xb2\xcc\xec}\xb5~m\x00\xfeu\xdb&\xf3N=\xc4\xa4\xc6\xd5\x9fD\xa2\xfaf1\x08\xe5H\xe1\xb7\x91\xac\xcd\x0eTyo]\xbe00\x9eZ=O\xde\x12\x0c\xb6\x06\xf5\xber\x06\xfalV!K~\x15\xb1/>\xa0\xf9\xa4\x96Z\xf9yf\xd9q\x1bd\x89&\x9c\xe6\xcfkE.\r_]\xe2\xa9B\x11{:\x19\xc8#\x18f\xab$,K\xca\xba\xeavN(\x16\x83\xe5CR\xa5\x11\xac\'\x06(t\x9b<\xa6\xca\xd1\'\x1c\x19\xb16#-\xd1E\x07\xa7\xfa\rI\x93\x9c\xad\xd9 \x1f|<\xa7%\xe9 ^\t\xee\x98\xa6\xa9wj\x8a\xddYP+\xeb\xb8\xee\xabJ\x132C\xba\xcf\x92#\x85\n\xd6\x96\xe4t\x8b\xef\x18\xf6\xb2Pw\rf\xe4\xd3U)\xcc-\x04m\x11\x87\xa5t\x1dSme\xf5w?\xdcM\xddm\xab\xf8\x1f\xfb\x8bPh\xcd[\xb0E\xeb\x98\x98\xb9o`\x97\nt\x92K\x16\x8f\x14\xd3=Zwtn^N\xc2N\x97\xfd4w\xce0\xd9\xc9s\xd2\xf1\x0f\xdb-X\xe8\xe3h\xf2\n\x13r\xf1#\xa7Q\xcd4\xa3\xe3s\xa6\xa3\xd7\xeb\x0c\xc9~\x18\x03\n\xd7Z\xe9ya\xd2#\x1ay\xd9\x15\x8e\x1b\x9f8=V\xec\x9f\xe8B0\xf6\x8b^\xc9\xf7\x8bS\xe3\x06i\x7f\x8d2v\x02\xa2\xd4\x12\xb1\x9d\x0e}\xd0\xcc\x1bL\x97\xf4\xfe\x84\xeeU\x9fP\xb4T\xe2\xa1/RE\xdc\xd2j[\xa2HF \xed\xa6\xe0\x8d\xe6\t\xd1\xc2\x0fb\xba\x15Q#{\xf2D\x02\xf3\xa7\xd8\xa5\xfc\xc8\xa3d%N\xdcX30\x18\xbe\xa1\x14\x89\xa1\x8aE\x11\x97\xa5&\x9f\xaab\x1d\xb6i\xef\x00<\xe8 V]\xd15!oR\x96\xafl!3\xb8Pm\xe2\t\xaf(\xe6W\xce~\x07!\xcb\x8c\t+\xc5\xe0\x97\xd18\xdd\xac\xef\x91e\xe4\x07+I\xcbfG\xc4\xfcO\xe2\xe4\x9a\xc0\xff\x86\xad\x1e\xad^D?\x86\x97+*\xdd\xa7V\xea \xf1y\xe8t\x9b\xce\xd1D \xc7\xcdd\x8f\x0c\xe6\xe1n@\xacK\xe6\xe6\x9e\x89\xdc\xf5`3?M\xda\x9en\x16$\xd7\xee\xe1\xd2\xa1\xe5Ih\x9e\x9e\x9c\xd6&\xfa$\xac\x84\x10n-\x19\x94\x97\xad\x88\xea}\xc6B\xd4\xef9\x1dO\x913T\xde\xba(\xef2\xec\xb1^b.!\x1d\x8b\xa5\xa3{\xbbqL`5A\x94\xfcx\xb2>\x89\tTx=a\x96I}\x95\xe5\xc5\xff\xc1\xfa\xd8\r\xe0\xdcB\xc8\x94\xb5\xd8\xe6N}\xca(>\x0c\xb8)b\x9fZ\x85FW\'\tf7=[MlQ_\x16NE\x89z_Q]\x14\xff\xda\x9e\xace\xe6\x8e\xf9\x15\xa9e\xca\xa0\x1e[\xc7\x14S\xafo\xec\x7f\xbc\x89\xa8?\x82\x11\xe76\xb9B\x11~\xaaG\xd8s\xdd&\x7f\xedD\xb40?DWJ\xdc,\x97\xfb\xd3\xf0\x067Je\xda\x17\xef\x90CK\xc2\xa3B\xab\xfb\xa1r\x1d9B+\xab\xec\t\xe6\xedB\xbfz\xdc\xac\x9a9\xc9\xc6\xad`\xba\x92\xc6\xccp\xbf\xc7\xce{\x87\x99\x8dy\xbe\n\xaf<\xff:N%S\xc2\'\x1a\xfb\x19\xcbZ\xd9F\x83\xb0\x87\x9cU\x1c\xf1E\x19E-\xfc\x90\xb1JY\x1b\x9f8=V\xec\x9f\xe8B0\xf6\x8b^\xc9\xf7\x8bS\xe3\x06i\x7f\x8d2v\x02\xa2\xd4\x12\xb1\x9d\x0e}\xfb\x80gN\x81M\xc5\\\xdb\xa3 \x0c[\xf5\x8d\xa8\xb2\xefb3\x8c\x8c\x07\xf3\xa3\xcdx\x15!\xe7{R\x96\x1b\x12g\xcf\x87@38\xb0j/#`\xcaS\xcc\xcd\xf0\xd8\xec\x83|\xbdY\xd9\x1bQ\x921~\x10{\x16"\xdb{\x9d\xbe\x06*\xc0\xc1\xe4=\xa0\xea\xd0\x9b\xab\xd1{\xb6o\x1a\x8bw\xc2\xb5\x8b\xaa@\xd6\x81t\x8cX\xe6rv4\xe4 TB\xb5]\x10\n\xfa*\x12\xc9>\xed\x16\x1d\xb6\x19\x9d\xb9dg\xe6\x99t\n8\xd1\xb2\x8b\xcd/\xee\xb0a\xfe\xa9D\xf7\x14\xd6o@\xc2\xa7D\x93\x18\xd0\n\xe8\xef\xff \xf9\xf4\'\xe1y\x08\x82\xd5K^\xa1\x15w\xf4\x95t3=\xbd\xbc\xd7,R\xf3E\xc8\'\xa3\xe5\xf6\xe1k\x07kXs\xe7d\x18\xae\xdb\xf2f^\xa5\xbea\xb9\x17\x88\x13vS\x1cl\x8c7\xf1\xdb\xa1\xd9j\x87x\xe8\xdfM\xaa\x13>q\xe0\xbbuD\'\xb9\x02.=\x1e\\)\x08(\x976\xde\x96\x91\xff\xb02\xe2U\xf7\x8a\x16D\xf0El\x8eQ]\xf8,\xd9\xffco\xa2\x92\xd9\xe8\xd3\x81\xe5\xd4\x0e\x0e\x1aP\x1e\x16\x1a\xf8\xb6\xc2\x8c\xb9\xe7O\x07)\xe5\x19\x87\xef\x92\x9c\x92S7s3?\x1a\x05\x90\x01W\xb8\xc1\xcd\xe7M\xd1\t\x9e%=\xd3MOj\nLJ\xa7\xa9\xd3:\xc5ok\xb5\x8b\xad\xdeo8\x12\n\xd9\xbd\x80\xa9\xe9\xc5\xc9 \xaeh\xfc\xfb\xac\x06z\x84Lm\xc3v\xedD\xd5]@>\xa1\xcc\xcd\xf0\xd8\xec\x83|\xbdY\xd9\x1bQ\x921~\x10-NrfMN\xb8\xbf\xe3{I\xcddq\x88\xd1\x92\x17\xe5z6Z\xb6\x94=.\xcd\xfe\xb4Of\xca\x82\xf3E\xab\xfa\x89@\xa8\x12\xaa\xbe\xd8\xecf1\xb2'

一个没被加入的接口

这个接口用于获取用户常听排行榜。

public function record($uid, $type=1){
		$url='http://music.163.com/weapi/v1/play/record?csrf_token=';
		$data=array(
			'uid'=>$uid,
			'type'=>$type,
			'csrf_token'=>'',
		);
		return $this->curl($url,$this->prepare($data));
	}

type=1时只返回weekData, type=0时返回allData。建议加入

关于国外访问api的解码

/*
 * 从NeteaseMusicWEB页扒下来的,国外请求加密内容解密方法.
 * Authors:Netease
 *
 */
function bNj(){
        var yE = function (jR) { //定义函数yE,参数jR
            if (jR < -128) { //若jR<-128
                return yE(128 - (-128 - jR)) //返回yE(jR+256)
            } else if (jR >= -128 && jR <= 127) { //若-128≤jR≤127
                return jR //返回jR
            } else if (jR > 127) { //若jR>127
                return yE(-129 + jR - 127) //返回yE(jR-256)
            } else { //否则(jR不为数字时)
                throw new Error("1001") //错误1001
            }
        };
        var bNi = function (jR, cq) { //定义函数bNi,参数jR,cq
            return yE(jR + cq) //返回yE(jR+cq)
        };
        var bNh = function (QF, biw) { //定义函数bNh,参数(array)QF,(array)biw
            if (QF == null) { //若QF==null
                return null //返回null
            }
            if (biw == null) { //若biw==null
                return QF //返回QF
            }
            var pJ = []; //定义(array)pJ
            var bNg = biw.length; //定义bNg为biw长度
            for (var i = 0, cF = QF.length; i < cF; i++) { //循环,次数为循环一次QF
                pJ[i] = bNi(QF[i], biw[i % bNg])
            }
            return pJ
        };
        var bNc = function (QM) {
            if (QM == null) {
                return QM
            }
            var pJ = [];
            var bMX = QM.length;
            for (var i = 0, cF = bMX; i < cF; i++) {
                pJ[i] = yE(0 - QM[i])
            }
            return pJ
        };
        var bMW = function (biP, Iv) {
            biP = yE(biP);
            Iv = yE(Iv);
            return yE(biP ^ Iv)
        };
        var bvv = function (Iu, bjf) {
            if (Iu == null || bjf == null || Iu.length != bjf.length) {
                return Iu
            }
            var pJ = [];
            var bMR = Iu.length;
            for (var i = 0, cF = bMR; i < cF; i++) {
                pJ[i] = bMW(Iu[i], bjf[i])
            }
            return pJ
        };
        var bvw = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
        var bMO = function (ej) {
            var ES = [];
            ES.push(bvw[ej >>> 4 & 15]);
            ES.push(bvw[ej & 15]);
            return ES.join("")
        };
        var bMN = function (Cv) {
            var cF = Cv.length;
            if (Cv == null || cF < 0) {
                return new String("")
            }
            var ES = [];
            for (var i = 0; i < cF; i++) {
                ES.push(bMO(Cv[i]))
            }
            return ES.join("")
        };
        var bvx = function (QT) {
            if (QT == null || QT.length == 0) {
                return QT
            }
            var bjy = new String(QT);
            var pJ = [];
            var cF = bjy.length / 2;
            var cq = 0;
            for (var i = 0; i < cF; i++) {
                var nS = parseInt(bjy.charAt(cq++), 16) << 4;
                var nP = parseInt(bjy.charAt(cq++), 16);
                pJ[i] = yE(nS + nP)
            }
            return pJ
        };
        var bML = function (dT) {
            if (dT == null || dT == undefined) {
                return dT
            }
            var Il = encodeURIComponent(dT);
            var Cv = [];
            var bvy = Il.length;
            for (var i = 0; i < bvy; i++) {
                if (Il.charAt(i) == "%") {
                    if (i + 2 < bvy) {
                        Cv.push(bvx(Il.charAt(++i) + "" + Il.charAt(++i))[0])
                    } else {
                        throw new Error("1009")
                    }
                } else {
                    Cv.push(Il.charCodeAt(i))
                }
            }
            return Cv
        };
        var bME = function (uF) {
            var cA = 0;
            cA += (uF[0] & 255) << 24;
            cA += (uF[1] & 255) << 16;
            cA += (uF[2] & 255) << 8;
            cA += uF[3] & 255;
            return cA
        };
        var cfl = function (cA) {
            var uF = [];
            uF[0] = cA >>> 24 & 255;
            uF[1] = cA >>> 16 & 255;
            uF[2] = cA >>> 8 & 255;
            uF[3] = cA & 255;
            return uF
        };
        var bMz = function (eR, Vq, cF) {
            var kb = [];
            if (eR == null || eR.length == 0) {
                return kb
            }
            if (eR.length < cF) {
                throw new Error("1003")
            }
            for (var i = 0; i < cF; i++) {
                kb[i] = eR[Vq + i]
            }
            return kb
        };
        var Vr = function (eR, Vq, Re, bMx, cF) {
            if (eR == null || eR.length == 0) {
                return Re
            }
            if (Re == null) {
                throw new Error("1004")
            }
            if (eR.length < cF) {
                throw new Error("1003")
            }
            for (var i = 0; i < cF; i++) {
                Re[bMx + i] = eR[Vq + i]
            }
            return Re
        };
        var bMw = function (cF) {
            var cH = [];
            for (var i = 0; i < cF; i++) {
                cH[i] = 0
            }
            return cH
        };
        var bMv = [82, 9, 106, -43, 48, 54, -91, 56, -65, 64, -93, -98, -127, -13, -41, -5, 124, -29, 57, -126, -101, 47, -1, -121, 52, -114, 67, 68, -60, -34, -23, -53, 84, 123, -108, 50, -90, -62, 35, 61, -18, 76, -107, 11, 66, -6, -61, 78, 8, 46, -95, 102, 40, -39, 36, -78, 118, 91, -94, 73, 109, -117, -47, 37, 114, -8, -10, 100, -122, 104, -104, 22, -44, -92, 92, -52, 93, 101, -74, -110, 108, 112, 72, 80, -3, -19, -71, -38, 94, 21, 70, 87, -89, -115, -99, -124, -112, -40, -85, 0, -116, -68, -45, 10, -9, -28, 88, 5, -72, -77, 69, 6, -48, 44, 30, -113, -54, 63, 15, 2, -63, -81, -67, 3, 1, 19, -118, 107, 58, -111, 17, 65, 79, 103, -36, -22, -105, -14, -49, -50, -16, -76, -26, 115, -106, -84, 116, 34, -25, -83, 53, -123, -30, -7, 55, -24, 28, 117, -33, 110, 71, -15, 26, 113, 29, 41, -59, -119, 111, -73, 98, 14, -86, 24, -66, 27, -4, 86, 62, 75, -58, -46, 121, 32, -102, -37, -64, -2, 120, -51, 90, -12, 31, -35, -88, 51, -120, 7, -57, 49, -79, 18, 16, 89, 39, -128, -20, 95, 96, 81, 127, -87, 25, -75, 74, 13, 45, -27, 122, -97, -109, -55, -100, -17, -96, -32, 59, 77, -82, 42, -11, -80, -56, -21, -69, 60, -125, 83, -103, 97, 23, 43, 4, 126, -70, 119, -42, 38, -31, 105, 20, 99, 85, 33, 12, 125];
        var EH = 64;
        var Rk = 64;
        var bvB = 4;
        var bMq = function (pu) {
            var bvF = [];
            if (pu == null || pu == undefined || pu.length == 0) {
                return bMw(Rk)
            }
            if (pu.length >= Rk) {
                return bMz(pu, 0, Rk)
            } else {
                for (var i = 0; i < Rk; i++) {
                    bvF[i] = pu[i % pu.length]
                }
            }
            return bvF
        };
        var bMj = function (Ru) {
            if (Ru == null || Ru.length % EH != 0) {
                throw new Error("1005")
            }
            var VJ = [];
            var cq = 0;
            var bMh = Ru.length / EH;
            for (var i = 0; i < bMh; i++) {
                VJ[i] = [];
                for (var j = 0; j < EH; j++) {
                    VJ[i][j] = Ru[cq++]
                }
            }
            return VJ
        };
        var bMb = function (bvQ) {
            var nS = bvQ >>> 4 & 15;
            var nP = bvQ & 15;
            var cq = nS * 16 + nP;
            return bMv[cq]
        };
        var bvS = function (VU) {
            if (VU == null) {
                return null
            }
            var bvU = [];
            for (var i = 0, cF = VU.length; i < cF; i++) {
                bvU[i] = bMb(VU[i])
            }
            return bvU
        };
        var bLS = function (ED, pu) {
            if (ED == null) {
                return null
            }
            if (ED.length == 0) {
                return []
            }
            if (ED.length % EH != 0) {
                throw new Error("1005")
            }
            pu = bMq(pu);
            var Wc = pu;
            var Wd = bMj(ED);
            var HL = [];
            var bLR = Wd.length;
            for (var i = 0; i < bLR; i++) {
                var Wm = bvS(Wd[i]);
                Wm = bvS(Wm);
                var Wn = bvv(Wm, Wc);
                var bLO = bNh(Wn, bNc(Wc));
                Wn = bvv(bLO, pu);
                Vr(Wn, 0, HL, i * EH, EH);
                Wc = Wd[i]
            }
            var bvV = [];
            Vr(HL, HL.length - bvB, bvV, 0, bvB);
            var cF = bME(bvV);
            if (cF > HL.length) {
                throw new Error("1006")
            }
            var pJ = [];
            Vr(HL, 0, pJ, 0, cF);
            return pJ
        };
        var bLL = function (Rz, bN) {
            if (Rz == null) {
                return null
            }
            var bvW = new String(Rz);
            if (bvW.length == 0) {
                return []
            }
            var ED = bvx(bvW);
            if (bN == null || bN == undefined) {
                throw new Error("1007")
            }
            var pu = bML(bN);
            return bLS(ED, pu)
        };
        this.bLB = function (Rz, bN) {
            if(!bN){
                var bN = "fuck~#$%^&*(458";
            }
            var bLA = bLL(Rz, bN);
            var Ww = new String(bMN(bLA));
            var RA = [];
            var bLr = Ww.length / 2;
            var cq = 0;
            for (var i = 0; i < bLr; i++) {
                RA.push("%");
                RA.push(Ww.charAt(cq++));
                RA.push(Ww.charAt(cq++))
            }
            return RA.join("")
        }
    };
    var settmusic = (new bNj).bLB;
    exports.decode = function(encodedData){
        return JSON.parse(decodeURIComponent(settmusic(encodedData)));
    }

还没读完来着,应该可以转换吧。。。
image

v3的api返回的json似乎并非简单的gzip压缩

如题。虽然请求头里面有Accept-Encoding: gzip一句,但经我试验返回的数据不能用gzip解压缩(没有头1F 8B),并且去掉这一句后返回的数据没有变化,所以我猜测应该采用了另一种加密方式

null url result

some songs return null result
{"data":[{"id":1045123,"url":null,"br":0,"size":0,"md5":null,"code":404,"expi":1200,"type":null,"gain":0.0,"fee":0,"uf":null,"payed":0,"flag":0,"canExtend":false}],"code":200}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.