Скрипт массовой загрузки аудио из vkontakte.ru
Так что сильно не пинать, лучше посоветуйте, как сделать лучше!
# -*- 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()
Комментарии
Отправить комментарий