Скрипт массовой загрузки аудио из vkontakte.ru

Это мой первый скрипт на python, с которым впервые я познакомился 2 дня назад :)
Так что сильно не пинать, лучше посоветуйте, как сделать лучше!



# -*- coding: utf-8 -*-
import sys,urllib2,urllib,re,time
import progressbar

print '\n\
   MLAV ver 0x01 - (c) 2010 Gar|k\n\
   http://c0dedgarik.blogspot.com/\n\n\
   The mass loader of audio from vkontakte.ru\n\n'

if len(sys.argv) != 2:
 print ' USAGE:\n %s group_name' % sys.argv[0]
 sys.exit(-1)

def get_search_page(offset=0,q=sys.argv[1]):
 host = 'http://vkontakte.ru/gsearch.php?section=audio&q=%s&offset=%d' % (urllib.quote(q),offset)
 headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13',
'Host' : 'vkontakte.ru',
'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8',
'Connection' : 'close',
'Cookie' : --зайди в контакт и в адресе напечатай javascript:alert(document.cookie) вставь сюда этот текст--}
 time.sleep(1)
 conn = urllib2.Request(host, None, headers)
 return urllib2.urlopen(conn).read()

def lol(math):
 if math.lastindex==1:
  return math.group(1).lstrip(' ')
 else: return math.group(0)

data=get_search_page()

s=re.findall('\xcd\xe0\xe9\xe4\xe5\xed. (.*) \xe0\xf3\xe4\xe8\xee\xe7\xe0\xef\xe8',data)
count_zap=int(s[0].replace(' ',''))

print '%d audio records on demand "%s" are found' % (count_zap,sys.argv[1])

li={}
link_reg=re.compile('return operate\((\d+),(\d+),(\d+),[\x22\x27](.*)[\x22\x27],(\d+)\);')
name_reg=re.compile('(.*).*(.*).*<\/div')

for i in xrange(0,count_zap,100):
 print ' offset %d analysis...' % i
 data=get_search_page(offset=i)
 r=link_reg.findall(data)
 a=name_reg.findall(data)

 for x,y in map(None,r,a):
  title=re.sub('(.*)',lol,y[1]) # вырезаем всякие хрени
  if title not in li: # тут бы еще проверочку производить на регистр символов и искать совпадения в артисте y[0]
# в общем языка я не знаю поэтому тут такая белебердятина...
   link='http://cs' + x[1] + '.vkontakte.ru/u' + x[2] + '/audio/' + x[3] + '.mp3'
   li[title]=(link,y[0])

print 'Start download'

def loadProgress(bl, blsize, size):
    dldsize = min(bl*blsize, size)
    p = float(dldsize) / size
    bar.update(p)

for title,(link,artist) in li.items():
 bar = progressbar.ProgressBar(maxval=1.0, widgets=[
      '%s - %s '%(artist,title), 
      progressbar.Bar(left='[', marker='=', right=']'), 
      progressbar.Percentage()
      ]).start()
 urllib.urlretrieve(link, '%s - %s.mp3'%(artist,title), loadProgress) 
 bar.finish()
blog comments powered by Disqus
сюда туда