Telecharger Mp3 du site mp3boo via Terminal Linux

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

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)