# -*- coding: utf-8 -*-
#!/usr/bin/env python
import urllib2
import sys, re, os, argparse
from urllib import urlretrieve
parser = argparse.ArgumentParser(description='audioposk.com music downloader')
parser.add_argument("-artist", type=str, help='example: the-offspring or papa-roach, rammstein. \
Script download all tracks from first page')
args = parser.parse_args()
def progressBar(count, blockSize, totalSize):
percent = int(count*blockSize*100/totalSize)
sys.stdout.write("%2d%%" % percent)
sys.stdout.write("\b\b\b")
sys.stdout.flush()
def getTrack(fullPath, goodName):
sys.stdout.write(goodName + '...')
urlretrieve(fullPath, goodName, reporthook=progressBar)
print "\n"
def downloadTrack(artist):
tracks_url = 'http://www.audiopoisk.com/artist/'+artist+'/'
html = urllib2.urlopen(tracks_url).read()
regex = re.compile(r'/files/'+artist+r'/.+\.mp3')
tracks = set(regex.findall(html))
for track in tracks:
fullPath = 'http://www.audiopoisk.com' + track
goodName = urllib2.urlopen(fullPath).info().get('Content-Disposition')[22:-1]
goodName = goodName.replace(' (audiopoisk.com)', '')
getTrack(fullPath, goodName)
#urlretrieve(fullPath, goodName)
if __name__ == '__main__':
downloadTrack(args.artist)
в функции downloadTrack если закоментить вызов getTrack, и раскоментить вызов urlretrieve и вставить перед этим вызовом print goodName то скрипт при выполнении напечатает все +100500 названий треков найденных на странице, и скачает только последний. В то время как если urlretrieve вынести в отдельную функцию, будет все норм, каждый трек будет скачан.
p.s. что то пустые строки между методами не остаются при вставке кода с тегом python