python 网易云音乐uc缓存转换mp3

前几天帮老爸的导航下载歌曲,发现都要会员,找资源较麻烦,用python写个网易云的缓存转换mp3的程序吧。

转换的根本方法就是对缓存uc文件的数据和0xa3(163)进行异或(^)运算啦。

流程:

1、对缓存文件的数据和0xa3(163)进行异或(^)运算

2、用歌曲ID用网易云提供的API去获取歌曲信息

3、数据保存为mp3文件

python版本:python3、python2

代码很简单:

# -*- coding:utf-8 -*-

import os
import re
import requests

UC_PATH = './Cache/'  # 缓存路径 例 D:/CloudMusic/Cache/
MP3_PATH = './'  # 存放歌曲路径
RUL = 'https://api.imjad.cn/cloudmusic/?type=detail&id={0}'
headers = {
	"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36",
	"Connection": "keep-alive",
	"Accept": "text/html,application/json,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
	"Accept-Language": "zh-CN,zh;q=0.8"
}


class Transform():
	def do_transform(self):
		files = os.listdir(UC_PATH)
		for file in files:
			if not file[-3:] == '.uc':  # 后缀uc结尾为歌曲缓存
				continue
			print(file)
			mp3_content = None
			with open(UC_PATH + file, mode='rb') as uc_file:
				mp3_content = bytearray(uc_file.read())
				for i, byte in enumerate(mp3_content):
					byte ^= 0xa3
					mp3_content[i] = byte
			if not mp3_content:
				continue
				
			song_name = self.get_song_info_by_file(file)
			mp3_file_name = MP3_PATH + '%s.mp3' % (song_name)
			with open(mp3_file_name, 'wb') as mp3_file:
				mp3_file.write(mp3_content)

	def get_song_info_by_file(self, file_name):
		match_inst = re.match('\d*', file_name)  # -前面的数字是歌曲ID,例:1347203552-320-0aa1, 1347203552是歌曲ID
		if match_inst:
			song_id = match_inst.group()
		else:
			song_id = file_name

		try:
			url = RUL.format(song_id)  # 请求url例子:https://api.imjad.cn/cloudmusic/?type=detail&id=1347203552
			response = requests.get(url, headers=headers)
			jsons = response.json()
			song_name = jsons['songs'][0]['name']
			singer = jsons['songs'][0]['artists'][0]['name']
			return song_name + " - " + singer
		except:
			return song_id


def check_path():
	global UC_PATH, MP3_PATH

	if not os.path.exists(UC_PATH):
		print('缓存路径错误: %s' % UC_PATH)
		return False
	if not os.path.exists(MP3_PATH):
		print('目标路径错误: %s' % MP3_PATH)
		return False

	if UC_PATH[-1] != '/':  # 容错处理 防止绝对路径结尾不是/
		UC_PATH += '/'
	if MP3_PATH[-1] != '/':
		MP3_PATH += '/'
	return True


if __name__ == '__main__':
	if not check_path():
		exit()

	transform = Transform()
	transform.do_transform()

以后会再仓库跟进,欢迎star:GitHub - Grente/cloudMusicTransform: 网易云音乐uc缓存转换mp3

  • 15
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值