日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python 根據列表批量下載網易云音樂的免費音樂

瀏覽:155日期:2022-07-03 13:15:37

運行效果

python 根據列表批量下載網易云音樂的免費音樂

代碼

# -*- coding:utf-8 -*-import requests, hashlib, sys, click, re, base64, binascii, json, osfrom Crypto.Cipher import AESfrom http import cookiejar'''Website:http://cuijiahua.comAuthor:Jack CuiRefer:https://github.com/darknessomi/musicbox'''class Encrypyed():'''解密算法'''def __init__(self):self.modulus = ’00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7’self.nonce = ’0CoJUm6Qyw8W8jud’self.pub_key = ’010001’# 登錄加密算法, 基于https://github.com/stkevintan/nw_musicbox腳本實現def encrypted_request(self, text):text = json.dumps(text)sec_key = self.create_secret_key(16)enc_text = self.aes_encrypt(self.aes_encrypt(text, self.nonce), sec_key.decode(’utf-8’))enc_sec_key = self.rsa_encrpt(sec_key, self.pub_key, self.modulus)data = {’params’: enc_text, ’encSecKey’: enc_sec_key}return datadef aes_encrypt(self, text, secKey):pad = 16 - len(text) % 16text = text + chr(pad) * padencryptor = AES.new(secKey.encode(’utf-8’), AES.MODE_CBC, b’0102030405060708’)ciphertext = encryptor.encrypt(text.encode(’utf-8’))ciphertext = base64.b64encode(ciphertext).decode(’utf-8’)return ciphertextdef rsa_encrpt(self, text, pubKey, modulus):text = text[::-1]rs = pow(int(binascii.hexlify(text), 16), int(pubKey, 16), int(modulus, 16))return format(rs, ’x’).zfill(256)def create_secret_key(self, size):return binascii.hexlify(os.urandom(size))[:16]class Song():'''歌曲對象,用于存儲歌曲的信息'''def __init__(self, song_id, song_name, song_num, song_url=None):self.song_id = song_idself.song_name = song_nameself.song_num = song_numself.song_url = ’’ if song_url is None else song_urlclass Crawler():'''網易云爬取API'''def __init__(self, timeout=60, cookie_path=’.’):self.headers = {’Accept’: ’*/*’,’Accept-Encoding’: ’gzip,deflate,sdch’,’Accept-Language’: ’zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4’,’Connection’: ’keep-alive’,’Content-Type’: ’application/x-www-form-urlencoded’,’Host’: ’music.163.com’,’Referer’: ’http://music.163.com/search/’,’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36’}self.session = requests.Session()self.session.headers.update(self.headers)self.session.cookies = cookiejar.LWPCookieJar(cookie_path)self.download_session = requests.Session()self.timeout = timeoutself.ep = Encrypyed()def post_request(self, url, params):'''Post請求:return: 字典'''data = self.ep.encrypted_request(params)resp = self.session.post(url, data=data, timeout=self.timeout)result = resp.json()if result[’code’] != 200:click.echo(’post_request error’)else: return resultdef search(self, search_content, search_type, limit=9):'''搜索API:params search_content: 搜索內容:params search_type: 搜索類型:params limit: 返回結果數量:return: 字典.'''url = ’http://music.163.com/weapi/cloudsearch/get/web?csrf_token=’params = {’s’: search_content, ’type’: search_type, ’offset’: 0, ’sub’: ’false’, ’limit’: limit}result = self.post_request(url, params)return resultdef search_song(self, song_name, song_num, quiet=True, limit=9):'''根據音樂名搜索:params song_name: 音樂名:params song_num: 下載的歌曲數:params quiet: 自動選擇匹配最優結果:params limit: 返回結果數量:return: Song獨享'''result = self.search(song_name, search_type=1, limit=limit)if result[’result’][’songCount’] <= 0:click.echo(’Song {} not existed.’.format(song_name))else:songs = result[’result’][’songs’]if quiet:song_id, song_name = songs[0][’id’], songs[0][’name’]song = Song(song_id=song_id, song_name=song_name, song_num=song_num)return songdef get_song_url(self, song_id, bit_rate=320000):'''獲得歌曲的下載地址:params song_id: 音樂ID<int>.:params bit_rate: {’MD 128k’: 128000, ’HD 320k’: 320000}:return: 歌曲下載地址'''url = ’http://music.163.com/weapi/song/enhance/player/url?csrf_token=’csrf = ’’params = {’ids’: [song_id], ’br’: bit_rate, ’csrf_token’: csrf}result = self.post_request(url, params)# 歌曲下載地址song_url = result[’data’][0][’url’]# 歌曲不存在if song_url is None:click.echo(’Song {} is not available due to copyright issue.’.format(song_id))else:return song_urldef get_song_by_url(self, song_url, song_name, song_num, folder):'''下載歌曲到本地:params song_url: 歌曲下載地址:params song_name: 歌曲名字:params song_num: 下載的歌曲數:params folder: 保存路徑'''if not os.path.exists(folder):os.makedirs(folder)fpath = os.path.join(folder, str(song_num) + ’_’ + song_name + ’.mp3’)if sys.platform == ’win32’ or sys.platform == ’cygwin’:valid_name = re.sub(r’[<>:'/|?*]’, ’’, song_name)if valid_name != song_name:click.echo(’{} will be saved as: {}.mp3’.format(song_name, valid_name))fpath = os.path.join(folder, str(song_num) + ’_’ + valid_name + ’.mp3’)if not os.path.exists(fpath):resp = self.download_session.get(song_url, timeout=self.timeout, stream=True)length = int(resp.headers.get(’content-length’))label = ’Downloading {} {}kb’.format(song_name, int(length/1024))with click.progressbar(length=length, label=label) as progressbar:with open(fpath, ’wb’) as song_file:for chunk in resp.iter_content(chunk_size=1024):if chunk:song_file.write(chunk)progressbar.update(1024)class Netease():'''網易云音樂下載'''def __init__(self, timeout, folder, quiet, cookie_path):self.crawler = Crawler(timeout, cookie_path)self.folder = ’.’ if folder is None else folderself.quiet = quietdef download_song_by_search(self, song_name, song_num):'''根據歌曲名進行搜索:params song_name: 歌曲名字:params song_num: 下載的歌曲數'''try:song = self.crawler.search_song(song_name, song_num, self.quiet)except:click.echo(’download_song_by_serach error’)# 如果找到了音樂, 則下載if song != None:self.download_song_by_id(song.song_id, song.song_name, song.song_num, self.folder)def download_song_by_id(self, song_id, song_name, song_num, folder=’.’):'''通過歌曲的ID下載:params song_id: 歌曲ID:params song_name: 歌曲名:params song_num: 下載的歌曲數:params folder: 保存地址'''try:url = self.crawler.get_song_url(song_id)# 去掉非法字符song_name = song_name.replace(’/’, ’’)song_name = song_name.replace(’.’, ’’)self.crawler.get_song_by_url(url, song_name, song_num, folder)except:click.echo(’download_song_by_id error’)if __name__ == ’__main__’:timeout = 60output = ’Musics’quiet = Truecookie_path = ’Cookie’netease = Netease(timeout, output, quiet, cookie_path)music_list_name = ’music_list.txt’# 如果music列表存在, 那么開始下載if os.path.exists(music_list_name):with open(music_list_name, ’r’) as f:music_list = list(map(lambda x: x.strip(), f.readlines()))for song_num, song_name in enumerate(music_list):netease.download_song_by_search(song_name,song_num + 1)else:click.echo(’music_list.txt not exist.’)

以上就是python 根據列表批量下載網易云音樂的免費音樂的詳細內容,更多關于python 網易云音樂下載的資料請關注好吧啦網其它相關文章!

標簽: 網易云 Python
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
五月激激激综合网色播| 国产中文在线播放| 久久久成人网| 免费人成黄页网站在线一区二区| 日韩国产精品久久久久久亚洲| 青青草视频一区| 岛国av在线网站| 日本伊人午夜精品| 激情婷婷亚洲| 91p九色成人| 亚洲婷婷免费| 国产精品chinese| 婷婷亚洲综合| 国产精品久久| 99国产精品久久久久久久成人热| 国产精品亚洲综合色区韩国| 久久精品青草| 欧美91在线|欧美| 欧美日韩国产免费观看视频| 日本久久一区| 婷婷综合在线| 一二三区精品| 日韩欧美自拍| 免费看久久久| 亚洲人妖在线| 午夜视频精品| 日韩高清中文字幕一区二区| 日本色综合中文字幕| 欧洲激情综合| 精品一区91| 91一区二区| 综合亚洲色图| 欧美一区三区| 樱桃视频成人在线观看| 久久国产乱子精品免费女| 亚洲综合国产| 91看片一区| 久久精品国内一区二区三区| 日韩av黄色在线| 综合在线一区| 日韩中文字幕区一区有砖一区| 99久久精品国产亚洲精品| 高清一区二区三区av| 亚洲另类av| 91精品国产调教在线观看| 精品成av人一区二区三区| 中文字幕亚洲精品乱码| 激情综合激情| 啪啪国产精品| 国产99在线| 精品视频在线一区二区在线| 欧美日本久久| 国产99久久久国产精品成人免费| 蜜桃久久久久久久| 影音先锋久久| 欧美日韩国产免费观看视频| 日韩精品一区二区三区免费观影| 国产精品黑丝在线播放| 国产精品成人a在线观看| 精品久久一区| 国产精品99久久精品| 麻豆精品新av中文字幕| 国内精品99| 欧美激情麻豆| 日本在线一区二区三区| 91久久久精品国产| 国产精品porn| 男人的天堂久久精品| 蜜桃成人av| 日韩伦理一区| 日韩av有码| 久久精品国产久精国产爱| 日韩超碰人人爽人人做人人添| 视频一区在线视频| 国产色播av在线| 日韩久久精品网| 蜜桃一区二区三区在线| 亚洲视频www| 亚洲aa在线| 国产黄色精品| 日韩在线中文| 亚洲黄色在线| 日韩av中文字幕一区| 久久精品一区二区国产| 欧美一级鲁丝片| 国产精品免费看| 91麻豆精品激情在线观看最新 | а√天堂8资源中文在线| 日本一二区不卡| 国产福利电影在线播放| 久久久久蜜桃| 一区二区91| 国产精成人品2018| 久久影院午夜精品| 亚洲欧美日韩在线观看a三区| 日韩精品电影一区亚洲| 国产一区二区久久久久| 国产高清一区二区| 欧美激情视频一区二区三区在线播放| 久久av导航| 国产高清久久| 国产精品乱战久久久| 久久久久久久久丰满| 亚洲精品视频一二三区| 国产精品1区在线| 好吊日精品视频| 国产精品乱战久久久| 激情久久中文字幕| 久久国产视频网| 欧美一区二区三区激情视频 | 中文字幕日韩亚洲| 国产成人1区| 亚洲国内精品| 欧美一区影院| 一本一道久久a久久精品蜜桃| 国产日产高清欧美一区二区三区| 日本美女一区| 欧美影院精品| 久久蜜桃精品| 国产精品黄色| 亚洲精品影院在线观看| 99精品电影| 亚洲欧美成人综合| 亚洲精品护士| 激情婷婷亚洲| 精品久久影院| 欧美伊人久久| 午夜在线播放视频欧美| 国产videos久久| 青草国产精品久久久久久| 欧美精品一区二区久久| 精品视频一区二区三区在线观看| 综合亚洲色图| 亚洲午夜黄色| 亚洲黄色中文字幕| 你懂的国产精品| 日韩国产在线观看| 香蕉久久久久久久av网站| 麻豆精品国产91久久久久久| 久久亚州av| 日韩三级视频| 亚洲免费播放| 国产一区不卡| 国产欧美日韩精品高清二区综合区| 鲁大师成人一区二区三区 | 精品一区视频| 欧美视频久久| 久久三级福利| 久久国产欧美日韩精品| 久久亚洲精品伦理| 91精品国产成人观看| 欧美激情视频一区二区三区在线播放| 首页亚洲欧美制服丝腿| 免费日韩av片| 亚洲综合日韩| 国产在线日韩| 自拍日韩欧美| 尤物在线精品| 蜜臀av性久久久久蜜臀aⅴ流畅| 爽好久久久欧美精品| 亚洲一区有码| 日韩高清一区二区| av不卡在线| 午夜亚洲福利在线老司机| 夜夜精品视频| 首页国产欧美久久| 色综合视频一区二区三区日韩 | 日韩欧美中文字幕在线视频| 亚洲日韩中文字幕一区| 性色一区二区| 免费久久99精品国产| 婷婷综合一区| 国产免费播放一区二区| 卡一卡二国产精品| 日韩1区2区| 久久久9色精品国产一区二区三区| 日韩国产网站| 99热精品在线| 亚洲a成人v| 国产精品成人自拍| 91偷拍一区二区三区精品| 亚洲欧洲高清| 亚洲女同中文字幕| 亚洲综合专区| 欧美有码在线| 精品久久在线| 亚洲欧美综合| 日韩在线观看中文字幕| 久久av偷拍| 日韩欧美一区二区三区在线观看| jiujiure精品视频播放| 视频一区日韩精品| 久久一区亚洲| 久久人人88| 深夜福利一区| 水蜜桃久久夜色精品一区| 99成人在线| 久久中文精品| 亚洲色诱最新| 国产精品欧美大片|