Telecharger Mp3 du site mp3boo via Terminal Linux

Soyez le premier à donner votre avis sur cette source.

Snippet vu 2 851 fois - Téléchargée 13 fois

Contenu du snippet

#!/usr/bin/python
# -*- coding: utf-8 -*-

import mechanize
import cookielib
import urllib
import bs4 as BeautifulSoup
import time,sys,os
import zipfile

class Connection:
    def __init__(self):
        self.nomArtiste=""
        self.listeAlbum=[]

        # Browser
        self.br = mechanize.Browser()

        # Cookie Jar
        self.cj = cookielib.LWPCookieJar()
        self.br.set_cookiejar(self.cj)

        # Browser options
        self.br.set_handle_equiv(True)
        self.br.set_handle_redirect(True)
        self.br.set_handle_referer(True)
        self.br.set_handle_robots(False)

    def saisirArtiste(self):
        print "Saisir le nom de l'artiste rechercher"
        recherche=raw_input("Recherche: t")
        self.nomArtisteDossier=recherche.title()
        self.nomArtiste=recherche.split()
        assemble=""
        
        for mot in self.nomArtiste:
            assemble=assemble+"-"+mot

        self.nomArtiste=assemble
            

    def rechercheArtiste(self):
    
        
        r = self.br.open('http://mp3boo.me/search'+self.nomArtiste)
        self.html = r.read()
        self.soup = BeautifulSoup.BeautifulSoup(self.html)
        h2=self.soup.find_all('h2')
        h2=str(h2)
        
        if h2[5]=='0':

            print "Erreur dans la recherche n"
            return False

        
        
        

    def htmlParser1(self):
        
        self.albumdiv=self.soup.find_all('div',attrs={"class":u"album"})
        
        

        for self.div in self.albumdiv:
            div=self.div.find('a')
            titre=div.text
            lien=str(div).split()[1][6:-1]
            self.listeAlbum.append([{'titre':titre},{'lien':lien}])
        

    def htmlParser2(self):
        print "nRecherche du lien et telechargementnn"
        self.soup = BeautifulSoup.BeautifulSoup(self.html)
        self.lienZip=self.soup.find_all('div',attrs={"class":"download-album"})
        self.lienZip=str(self.lienZip).split()[4][24:-2]
    
        #print self.lienZip
        
    def selectionnerAlbum(self):
        affichage=self.nomArtiste.split('-')
        affichage=" ".join(affichage)
        
        print "nn==== %s ===="%affichage.title()
        print "==========="+"="*len(affichage)
        for i,album in enumerate(self.listeAlbum):
            print str(i+1)+"-"+album[0]['titre']

        choixOk=False
        while(choixOk is False):
            self.choix=raw_input("n Selectionner un album:t")

            if int(self.choix)-1 <0 or int(self.choix)-1>= len(self.listeAlbum):
                print "Le n° d'album n'existe pas"
            else:
                self.lienPage=self.listeAlbum[int(self.choix)-1][1]['lien']
                return True
        

    def lienAlbum(self):
        
        #print self.lienPage
        r = self.br.open(self.lienPage)
        self.html = r.read()

    def telechargement(self):

        self.nomFichier=self.listeAlbum[int(self.choix)-1][0]['titre']+".zip"
        print "Debut du telechargement"
        print"========================"
        print self.nomFichier+':'
        urllib.urlretrieve(self.lienZip,self.nomFichier,self.reporthook)
        print "nFin du telechargement nn"

        return self.nomFichier

    def reporthook(self,count, block_size, total_size):
        global start_time
        calculBlock=CalculBlock()

        
        if count == 0:
            start_time = time.time()
            return
        duration = time.time() - start_time
        progress_size = int(count * block_size)
        speed = int(progress_size / (1024 * duration))
        percent = int(count * block_size * 100 / total_size)
        calculBlock.calcul(percent)
        
        sys.stdout.write("r %d MB/ %d MB, %d KB/s, %s %d%% %s" %
                         (progress_size / (1024 * 1024),total_size/(1024*1024) ,speed, calculBlock.ConvertirDuree(duration),percent,calculBlock.affichage()))
        sys.stdout.flush()
       
       

class CalculBlock:
    def __init__(self):
        self.nombreOk="#"
        self.nombreNo="-"
        self.progressBar="[]"
        
    
    def affichage(self):

        self.progressBar="["+self.nombreOk*"#"+self.nombreNo*"-"+"]"
        return self.progressBar
        
    def calcul(self,percent):
        nb=30
        self.nombreOk=percent*nb/100
        self.nombreNo=nb-self.nombreOk
        
    def ConvertirDuree(self,duration):
        
        return time.strftime('%Hh %Mmin %Ssec', time.gmtime(duration))
        

class Decompression:

    def extractionFichier(self,fichier,artiste):
    
        password="www.mp3boo.com"
        zfile = zipfile.ZipFile(fichier)
        dossier=artiste+" : "+fichier[:-4]
        dirname=os.getcwd()+"/"+dossier
        os.mkdir(dirname)
    
        for name in zfile.namelist():
            zfile.setpassword(password)
            print "Decompression de " + name + " dans " + dossier
            zfile.extract(name, dirname)

            

#Programme Principale
artisteTrouver=False

connection=Connection()
decompression=Decompression()

while artisteTrouver is False:
    connection.saisirArtiste()
    artisteTrouver=connection.rechercheArtiste()

connection.htmlParser1()
lien=connection.selectionnerAlbum()
connection.lienAlbum()
connection.htmlParser2()
fichier=connection.telechargement()

decompression.extractionFichier(fichier,connection.nomArtisteDossier)

Compatibilité : 1.0

A voir également

Ajouter un commentaire Commentaire
Whismeril Messages postés 18608 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 septembre 2023 629
25 mai 2015 à 18:48
Bonjour merci d'utiliser la coloration syntaxique.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (Fokadog)