from ctypes import *
import os
import hashlib
import urllib2
import binascii
import time
import json
libcloudmusic = cdll.LoadLibrary(os.getcwd() + '/cloudmusic.so')
def decrypt(enc_data):
cloudmusic_decrypt = libcloudmusic.cloudmusic_decrypt
cloudmusic_decrypt.argtype = [c_char_p,c_char_p]
data = ' '*(len(enc_data)/2)
cloudmusic_decrypt(enc_data,data)
data = data.replace('\000', '')
return data.strip()
def encrypt(data):
cloudmusic_encrypt = libcloudmusic.cloudmusic_encrypt
cloudmusic_encrypt.argtype = [c_char_p,c_char_p]
encdata = ' ' * 2 * (len(data) + 16-len(data)%16)
cloudmusic_encrypt(data,encdata)
return encdata
def getmd5(s):
md5 = hashlib.md5()
md5.update(s)
return md5.hexdigest()
def getparams(uri, data):
s = 'nobody%suse%smd5forencrypt' % (uri, data)
md5 = getmd5(s)
constid = '36cd479b6b5'
params = '%s-%s-%s-%s-%s' % (uri, constid, data, constid, md5)
return encrypt(params)
def request(url, data):
headers = {'User-Agent':'android'}
req = urllib2.Request(url)
http = urllib2.urlopen(url,data=data)
content = http.read()
return content
def playlist_info(playlistid):
url = 'http://music.163.com/eapi/v3/playlist/detail'
uri = '/api/v3/playlist/detail'
tpl = '''{"id":" ","n":"1000","t":" ","s":"5","c":"[]",
"e_r":"true","header":{"os":"android","requestId":"1469863382839_317",
"mobilename":"MI4LTE","osver":"4.4.4","resolution":"1920x1080",
"buildver":"139278","MUSIC_U":"***","channel":"netease",
"appver":"3.5.2","deviceId":"***"}}
'''
d = json.loads(tpl)
d['id'] = playlistid
d['t'] = int(time.time())*1000
data = json.dumps(d)
params = getparams(uri, data)
postdata = 'params=%s' % (params)
raw_data = request(url, postdata)
enc_data = binascii.b2a_hex(raw_data)
dec_data = decrypt(enc_data)
print dec_data
if __name__ == '__main__':
playlist_info('374082787')