BadRobot
Inscrit le: 07 Sep 2007 Messages: 1
|
Posté le: Ven Sep 07, 2007 8:10 am |
Sujet du message: [Deezer.com] Téléchargement de mp3 possible
|
|
Slt a tous,
g trouve ce script sur le net alors je lé modifier mais il est terible, sa permet de téléchargé des mp3 sur le site deezer.com.
| Code: | ###############################################
# D E Z E E R R E B E L L I O N v2.0 #
# ---------------------------------- #
# By BadRobot(c) 2007 #
###############################################
import sys
import string
import httplib, urllib
###############################################
# AMF Request Encoding #
###############################################
def EncodeString(string):
size = len(string)
car1 = (size/0xFF) & 0xFF
car2 = (size - car1*0xFF)
return "\x02%c%c%s" % (car1,car2, string)
def EncodeLong(val):
car1 = val & 0xFF
car2 = (val >> 8) & 0xFF
car3 = (val >> 16) & 0xFF
car4 = (val >> 24) & 0xFF
return "%c%c%c%c" % (car4,car3,car2,car1)
###############################################
# AMF Response Decoding #
###############################################
# read a boolean
def ReadBool(file):
return ord(file.read(1))
# read a byte
def ReadByte(file):
return ord(file.read(1))
# read a integer
def ReadInt(file):
car1 = ord(file.read(1))
car2 = ord(file.read(1))
return int(car1)*16+int(car2)
# read a long
def ReadLong(file):
car1 = ord(file.read(1))
car2 = ord(file.read(1))
car3 = ord(file.read(1))
car4 = ord(file.read(1))
return car1 << 24 | car2 << 16 | car3 << 8 | car4
# read a double (missing)
def ReadDouble(file):
return
# read a string (with size specified)
def ReadString(file, size):
return file.read(size)
# read an encoded string
def ReadEncodedString(file):
size = ReadInt(file)
return ReadString(file, size)
# read an object
def ReadObject(file):
ret = {}
key = ReadEncodedString(file)
type = ReadByte(file)
while type!=9:
val = ReadData(file,type)
ret[key] = val
key = ReadEncodedString(file)
type = ReadByte(file)
return ret
# read date (always return 0)
def ReadDate(file):
ReadDouble(file)
ReadInt(file)
return 0
# read an array
def ReadArray(file):
ret = []
size = ReadLong(file)
for i in range(size):
type = ReadByte(file)
data = ReadData(file, type)
ret.append((type,data))
return ret
# read a mixed array
def ReadMixedArray(file):
ReadLong()
return ReadObject()
# read a custom class
def ReadCustomClass(file):
typeID = ReadEncodedString(file)
val = {}
val["value"] = ReadObject(file)
val["type"] = typeID
return val
# read any data with known type
def ReadData(file, type):
if (type==0):
ReadLong(file)
ReadLong(file)
return 0
if (type==1):
return ReadBool(file)
if (type==2):
return ReadEncodedString(file)
if (type==3):
return ReadObject(file)
if (type==5 or type==6):
return 0
if (type==7):
return ReadInt(file)
if (type==8):
return ReadMixedArray(file)
if (type==10):
return ReadArray(file)
if (type==11):
return ReadDate(file)
if (type==13):
return 0
if (type==15):
return ReadXML(file)
if (type==16):
return ReadCustomClass(file)
return
# read header
def ReadHeader(file):
header = []
ReadInt(file) #read the version (ignore)
nb_items = ReadInt(file) #read nb of header items
for i in range(nb_items):
name = ReadEncodedString(file)
req = ReadBool(file)
size = ReadLong(file)
type = ReadByte(file)
content = ReadData(file, type)
header.append((name,type,content))
return header
# read body
def ReadBody(file):
items = []
nb_items = ReadInt(file) #read nb of header items
for i in range(nb_items):
target = ReadEncodedString(file)
response = ReadEncodedString(file)
size = ReadLong(file)
type = ReadByte(file)
content = ReadData(file, type)
items.append((target, response, type, content))
return items
def DecodeResponse(file):
return (ReadHeader(file),ReadBody(file))
################################################
## Track Download
################################################
def InitSession():
params = "\x00\x00\x00\x00\x00\x01\x00\x1erp_search_release2.initSession\x00\x02\x2f\x31\x00\x00\x00\x05\x0a\x00\x00\x00\x00"
h = httplib.HTTP('www.deezer.com:80')
h.putrequest("POST", "/flashservices/gateway.php")
h.putheader("Content-length", "%d" % len(params))
h.putheader("Content-type",'application/x-amf')
h.putheader('Accept', 'text/plain')
h.putheader('Host', 'www.deezer.com')
h.putheader('Referer','http://www.deezer.com/new_index3.swf?version=1-0-6')
h.endheaders()
h.send(params)
reponse, msg, entetes = h.getreply()
header, body = DecodeResponse(h.getfile())
result, x, i,session_id = body[0]
return session_id
def GetTrackKey(id,session_id):
params = "\x00\x00\x00\x00\x00\x01\x00\x19rp_search_release2.getKey\x00\x02\x2f\x32\x00\x00\x00\x61\x0a\x00\x00\x00\x02"+EncodeString(session_id)+EncodeString(id)
h = httplib.HTTP('www.deezer.com:80')
h.putrequest("POST", "/flashservices/gateway.php")
h.putheader("Content-length", "%d" % len(params))
h.putheader("Content-type",'application/x-amf')
h.putheader('Accept', 'text/plain')
h.putheader('Host', 'www.deezer.com')
h.putheader('Referer','http://www.deezer.com/new_index3.swf?version=1-0-6')
h.endheaders()
h.send(params)
reponse, msg, entetes = h.getreply()
header, body = DecodeResponse(h.getfile())
result, x, i,track_key = body[0]
return track_key
def DownloadTrack(file,id):
session_id = InitSession();
track_key = GetTrackKey(id,session_id)
print 'downloading track (%s)...' % file
h = httplib.HTTP('proxy-e.blogmusik.net:80')
h.putrequest("GET", "/cacheDiffusion.php?ID="+ID+"&KEY="+track_key+"&SESSION_ID="+session_id)
h.putheader('Accept', 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5')
h.putheader('User-Agent','Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0')
h.putheader('Host', 'proxy-e.blogmusik.net')
h.endheaders()
reponse, msg, entetes = h.getreply()
data = h.getfile().read()
output = open(file, 'wb')
output.write(data)
output.close()
print 'track downloaded'
return
#################################################
# Main Code (make request and download) #
#################################################
# Display banner
print '-----[ Deezer Rebellion v2.0 - by BadRobot ]-----\n'
# First, ask for keywords
keywords = raw_input("Enter your keywords : ")
params = "\x00\x00\x00\x00\x00\x01\x00\x19rp_search_release2.search\x00\x02\x2f\x34\x00\x00\x00\x12\x0a\x00\00\x00\x01"+EncodeString(keywords)
h = httplib.HTTP("www.deezer.com:80")
h.putrequest("POST", "/flashservices/gateway.php")
h.putheader("Content-length", "%d" % len(params))
h.putheader("Content-type",'application/x-amf')
h.putheader('Accept', 'text/plain')
h.putheader('Host', 'www.deezer.com')
h.endheaders()
h.send(params)
reponse, msg, entetes = h.getreply()
if (reponse == 200):
header, body = DecodeResponse(h.getfile())
#get the first item
target, response, type, content = body[0]
type,data = content[0]
list = data["value"]
serverInfo = list["serverInfo"]
org_data = serverInfo["initialData"];
# List all tracks returned by the server
cpt = 0
for type,data in org_data:
#print data
cpt = cpt + 1
str_type, titre = data[1]
#titre = unicode(titre, 'utf-8').encode('latin-1')
str_type, album = data[5]
str_type, auteur = data[8]
#auteur = unicode(auteur, 'utf-8').encode('latin-1')
print '%02d - %s (%s)' % (cpt, titre,auteur)
# Ask for one track
numeros = raw_input("Select track: ")
for numero in string.split(numeros):
numero = int(numero)
#print 'You asked for track %d' % numero
if (numero>0 and numero<=len(org_data)):
type,data = org_data[numero-1]
str_type, ID = data[9]
str_type, file = data[1]
file = unicode(file, 'utf-8').encode('latin-1')
DownloadTrack(str(numero)+'-'+file+'.mp3',ID)
else:
print 'bad track number'
else:
print 'An error occured while contacting deezer'
|
Fetes pété les coms lol et me remerssié pas surtou. |
|