Publié le 26-08-2012
Bien le bonsoir !
Ça commençait à faire un bout de temps que je n’avais pas poster sur ce site un petit script alakon permettant de jouer les vilains pirates voleurs de musique ! Je vais donc rectifier la chose ce soir en vous proposant un script python permettant de télécharger les sons d’une page soundcloud, c’est bien entendu largement améliorable, mais pour une chose pondue vite fait mal fait c’est déjà pas mal ;)
Le script récupère tout les titres disponibles sur une page soundcloud, les enregistre sur l’ordinateur au format auteur-titre.mp3 et la banane sur le kiwi, tag le mp3 pour qu’on puisse le retrouver facilement dans son lecteur multimédia préféré !
A noter que la librairie mutagen permettant le tag des mp3 à la volée n’est pas fournie avec python, donc pour que le script fonctionne sans soucis il suffit de commenter la partie tagging ;)
Voici donc le bousin :
# Name: Soundcloud Download
# Version: 0.1
# Author: y0no (Based on n0wz soundcloud Downloader)
import os
import sys
import urllib2
import re
import json
from mutagen.mp3 import EasyMP3
from urllib import urlretrieve
def affichemenu():
print ("-----------------------(DOWNLOAD)-----------------------")
print ("USAGE: %s [url]" % (sys.argv[0]))
print ("EXEMPLE: %s http://soundcloud.com/dexisfeelingbad\n" % (sys.argv[0]))
def main(argv):
if len(sys.argv) >= 2:
sURL = sys.argv[1]
oURL = urllib2.urlopen(sURL)
sPage = oURL.read()
sTracksList = re.findall("window.SC.bufferTracks.push\((.*?)\)", sPage)
if sTracksList:
for sTrack in sTracksList:
sTrack = json.loads(sTrack)
sName = sTrack['title']
sAuthor = sTrack['user']['username']
sLink = sTrack['streamUrl']
sFile = os.getcwd() + "/" + sAuthor + " - " + sName + ".mp3"
print("\nAuthor: %s" % (sAuthor))
print("Name: %s" % (sName))
print("Link: %s" % (sLink))
print("Download... :"),
urlretrieve(sLink, sFile)
print("Done")
####### id3tag (optional) #######
song = EasyMP3(sFile)
song['title'] = sName
song['artist'] = sAuthor
song['album'] = "SoundCloud"
song.save()
##################################
else:
print("\nNo track found...")
else:
affichemenu()
if __name__ == "__main__":
main(sys.argv[1:])