zoukankan      html  css  js  c++  java
  • python 网易云音乐

    import math
    import random
    from Crypto.Cipher import AES
    from Crypto.Cipher import AES
    from binascii import b2a_hex, a2b_hex
    import codecs
    import requests
    import base64
    import rsa
    
    
    class downmusic(object):
        f="00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
        e="010001"
        g= "0CoJUm6Qyw8W8jud"
        strs='''
        content-type: application/x-www-form-urlencoded
        cookie: _iuqxldmzr_=32; _ntes_nnid=cb19ce2c34b69416ecbc14b408135460,1552790636492; _ntes_nuid=cb19ce2c34b69416ecbc14b408135460; WM_TID=SaK%2F0APMDZNFERABVUY8g8TC1JG0uMnX; JSESSIONID-WYYY=wWJCh%5CPCwCiC2NAw%5CY1hRYfUVetiDrYuzX5dbU8wubkzrowYl%5C3z%2FoOiIqbmWn3El%2Fzna7WCD%2BuylihabpSnXghsOli62vhRNeKmTWNs5TwRyxthmpED1UR32j8%2F0M8tYQ2NJo11N533Hu9uU17ov05P9y6N7gHWev7yYQ00UDhS6qPI%3A1557235777412; WM_NI=9pUW0to5KVtrdu9a28u6eZMAvkLE0nBYZuRno7mWyQaHV8MfbvR8rh4vpZ1AOXApJPjXHA%2B%2B50ISN7ucK4SHWJ6fIboQ3KzVAgkIOQbHS1AzkSmYuWGslZIVJTm8Jl3fTFA%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee8bc172bb97bbb9c1728aa88ab6c55a878a8baaf3628f9797b1d544aa958eb3d32af0fea7c3b92afbb09bb8b380adeb85b7f77aa8abf782b134b7eaabbbd04bb6b584a6b36682879696d166ade9a3b8fc5ba3989ad9d06ea2aa9ed9f164f8aac0bbb44b8d888f91c95caa8888a2aa21f7f087b4cd3db7bd85d5d2449596fa87cc6aad8ffdacf95e83b9a5aace5ba2989dd2c472a98da3baf85d85ada4bbcc5e8a8ca3d9c968f1ba9ca7c437e2a3; playerid=99500353
        origin: https://music.163.com
        referer: https://music.163.com/
        user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36
        '''
        def __init__(self, line):
            super(downmusic, self).__init__()
            self.ids = '{ids: "['+line+']", level: "standard", encodeType: "aac", csrf_token: ""}'
            self.get_random_str=self.get_random_str()
            self.ase_encrypts=self.ase_encrypt(self.ids,self.g)
            params=self.ase_encrypt(self.ase_encrypts.decode('utf-8'),self.get_random_str).decode('utf-8')
            encseckey=self.rsa_encrypt(self.e,self.get_random_str,self.f)
            self.data={'params':params,'encseckey':encseckey}
            self.header=self.gen_headers(self.strs)
       
        def get_random_str(self):
            str='abcdefghigklmnopqretuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789'
            res=''
            for x in range(16):
                index=math.floor(random.random()*len(str))
                res += str[index]
            return res
    
        def ase_encrypt(self,text,key):
            iv='0102030405060708'
            pad=16-len(text.encode('utf-8'))%16
            text=text+pad*chr(pad)
            key1=str.encode(key)
            encryptor=AES.new(key1,AES.MODE_CBC,str.encode(iv))
            msg=base64.b64encode(encryptor.encrypt(str.encode(text)))
            return msg
    
        def rsa_encrypt(self,value,text,modulus):
            text=text[::-1]
            rs=int(codecs.encode(text.encode('utf-8'),'hex_codec'),16)**int(value,16)%int(modulus,16)
            return format(rs,'x').zfill(256)
    
        def gen_headers(self,s):
            ls = s.split('
    ')
            lsl = []
            ls = ls[1:-1]
            headers = {}
            for l in ls:
                l = l.split(': ')
                lsl.append(l)
            for x in lsl:
                headers[str(x[0]).strip('    ')] = x[1]
            return headers
    
        def getdata(self):
            res=requests.post('https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=',data=self.data,headers=self.header)
            print(res.text)
            exit()
    
    obj=downmusic('523946593')
    
    aa=obj.getdata()
    print(aa)
    # afile=open('./a.txt','r+')
    # for line in afile:
    #     if(line != ''):
    #         ids='{"ids":"['+line.strip()+']","level":"standard","encodeType":"aac","csrf_token":""}'
    #         print(ids)
    # afile.close()
  • 相关阅读:
    SpringBoot第五篇:整合Mybatis
    SpringBoot第四篇:整合JDBCTemplate
    SpringBoot第三篇:配置文件详解二
    分享一篇去年的项目总结
    Oracle生成多表触发器sql
    Oracle 设置用户密码永不过期
    Oracle建表提示SQL 错误: ORA-00904: : 标识符无效
    MySql数据备份
    ETL全量多表同步简述
    ETL全量单表同步简述
  • 原文地址:https://www.cnblogs.com/chengfengchi/p/10851074.html
Copyright © 2011-2022 走看看