获取歌词

前两天,突然想完善一下之前的那个将歌词转换为wp格式的代码,就是输入歌曲名直接导出我的自定义wp格式

那就动手吧,首先,我们要问一下网易云(毕竟云村忠实用户)我要的歌在他曲库中的id是多少,api格式如下: http://music.163.com/api/search/get/web?csrf_token=hlpretag=&hlposttag=&s={搜索内容}&type=1&offset=0&total=true&limit=20

  • limit:返回数据条数(每页获取的数量),默认为20,可以自行更改
  • offset:偏移量(翻页),offset需要是limit的倍数
  • type:搜索的类型
    • type=1 单曲
    • type=10 专辑
    • type=100 歌手
    • type=1000 歌单
    • type=1002 用户
    • type=1004 MV
    • type=1006 歌词
    • type=1009 主播电台

用浏览器试了下成功返回了id,于是写入代码(用的是python):

data = requests.get(url)#url就是上面那个

加一点字符串判断截取,成功获取到id

接下来,通过id获取歌词,api如下:(这个我按照自己的修改过了,是获取原歌词+外文歌词) http://music.163.com/api/song/lyric?os=pc&id={id}&lv=-1&tv=-1"

与上面代码一样,获取!

然后返回的结果就不太对劲:{"code":-460,"msg":"Cheating"}

判断我是机器人了,可见这个接口有反爬虫措施(更正:上面那个接口也有,只不过一定次数内不会触发,大概是一个ip五到十次吧)

搜索了一下,看到大佬们讨论过这个反爬虫,cookie中有值叫_ntes_nuid,他的32位值是有一个编码的

然而……重点来了!不知道网易云是由于后台校验会增加服务器压力还是干脆懒得写的原因,32位值有编码没有解码!随便传什么上去后台都能通过!

于是,打开浏览器开api的网页界面,f12,直接把整个header拉下来,成功获取数据

接下来,就是复杂的整理歌词过程,不知道网易云那帮程序员怎么写的,用户上传的歌词格式有好多,我写了一堆正则表达还有if才能把所有歌都整理好

v2.0用了点库函数,用列表把歌词整理成了外文中文交叉的形式

代码下载地址

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注