Скачать видео с Вконтакте.РУ
Наткнулся я тут вконтакте на довольно интересную группу:»Советские психоделические мультики») ну и т.к. у меня анлим и надо что-то качать, решил качнуть все мультфильмы из группы)) Собственно начал думать как это сделать, есть онлайн сервисы, также есть плагин для Firefox и userjs для Opera, но есть одно большое но в любом из этих способов нужно качать по одному файлу, да и к тому же ручами заходить копировать и т.д и т.п.,
вроде есть какой-то софт под винду, но хрен с ним, под линукс чёт даж искать не стал. Вся прелесь в программировании: если нет нежного тебе софта, напиши) Хотел в начале написать скрипт на bash’е, но потом передумал и решил написать на python. Собственно вот, что получилось:
import httplib
import re
import os
#param
url = 'линк до списка с видео'
email = 'мыло'
id = 'айди'
hash = 'хэш пароля'
#
def pb_str(prc, ch, width) :
return ch * int((prc * width) / 100)
plinks = re.compile('<div class="aname"><a href="(video-[0-9]*_[0-9]*)">')
phost = re.compile('http://(.*)/assets/videos/[a-f0-9]*\.vk.flv')
pvtag = re.compile('so\.addVariable\(\'vtag\',\'(.*?)\'\);')
pvkid = re.compile('so\.addVariable\(\'vkid\',\'(.*?)\'\);')
pname = re.compile('<h1>.*» (.*)</h1>')
width = 60
print 'Скачивание списка видеофайлов...'
conn = httplib.HTTP('vkontakte.ru')
conn.putrequest('GET', url)
conn.putheader('Host', 'vkontakte.ru')
conn.putheader('Cookie', 'remixemail='+email+';remixmid='+id+';remixpass='+hash)
conn.endheaders()
conn.getreply()
content = conn.getfile().read()
conn.close()
all = plinks.findall(content)
print 'Готово'
print str(len(all))+' файлов для скачки'
count = 0
for i in all:
count += 1
conn.connect('vkontakte.ru',80)
conn.putrequest('GET', 'http://vkontakte.ru/'+i)
conn.putheader('Host', 'vkontakte.ru')
conn.putheader('Cookie', 'remixemail='+email+';remixmid='+id+';remixpass='+hash)
conn.endheaders()
conn.getreply()
content = conn.getfile().read()
conn.close()
vtag = pvtag.search(content).group(1)
vkid = pvkid.search(content).group(1)
name = unicode(pname.search(content).group(1), 'cp1251')
print str(count)+' : '+name
filename = name +'.flv'
conn.connect('vkadre.ru',80)
conn.putrequest('GET', 'http://vkadre.ru/get_video?vkid='+vkid+'&vtag='+vtag)
conn.putheader('Host', 'vkadre.ru')
conn.endheaders()
link = conn.getreply()[2]['Location']
host = phost.search(link).group(1)
conn.close()
if os.path.isfile(filename):
fstat = os.stat(filename)
conn.connect(host,80)
conn.putrequest('GET', link)
conn.putheader('Host', host)
conn.endheaders()
size = conn.getreply()[2]['Content-Length']
conn.close()
if fstat.st_size < int(size):
conn.connect(host,80)
conn.putrequest('GET', link)
conn.putheader('Host', host)
conn.putheader('Range', 'bytes='+str(fstat.st_size)+'-')
conn.endheaders()
conn.getreply()
flv_file = open(filename, 'ab')
src_flv = conn.getfile()
get = fstat.st_size
while True:
kb = src_flv.read(1024)
get += 1024
if not kb:
break
flv_file.write(kb)
perc = round(get/(float(size))*100,3)
if perc > 100:
perc = 100.0
print '\r' + str(perc).rjust(7) + '% [' + \
pb_str(perc, '*', width).ljust(width, ' ') + ']',
flv_file.close()
conn.close()
print ' Ok'
else:
print ' Ok'
else:
conn.connect(host,80)
conn.putrequest('GET', link)
conn.putheader('Host', host)
conn.endheaders()
size = conn.getreply()[2]['Content-Length']
flv_file = open(filename, 'wb')
src_flv = conn.getfile()
get = 0
while True:
kb = src_flv.read(1024)
get += 1024
if not kb:
break
flv_file.write(kb)
perc = round(get/(float(size))*100,3)
print '\r' + str(perc).rjust(7) + '% [' + \
pb_str(perc, '*', width).ljust(width, ' ') + ']',
flv_file.close()
conn.close()
print ' Ok'
print 'Все файлы скачаны'
Собстенно скрип тянет страничку со списком видео вытаскивает, линки на них и скачивает по одному название файла берётся из названия видео. Т.к. скорость анлима у меня не ахти и нат на фряхе я ещё не настроил в следствии чего инет нужно иногда отрубать на ноуте, в скрип добавил возможность докачки файла. Т.е. после запуска он проверяет если файл с таким именем уже существует и его размер меньше необходимого то докачивает иначае переходит к следующему файлу. В винде скорее всего будут проблемы с кодировками, но мне как-то пока пофиг, переходить на винду не собираюсь)
более новая версия скрипта лежит тут
30.11.2008 в 22:40
задрот
01.12.2008 в 07:40
задрот
01.12.2008 в 09:55
)
10.01.2009 в 17:46
Напишите пожалуйста скрипт по оперу в винде.Очень удобно было бы.
буду очень благодарен!
11.01.2009 в 01:25
музыка, видео
11.01.2009 в 02:46
Напишите пожалуйста скрипт по оперу в винде.Очень удобно было бы.
буду очень благодарен!
11.01.2009 в 10:25
музыка, видео
01.04.2009 в 22:19
рассуждения о сервисах и програмах для контакта
http://msoft32.narod.ru
02.04.2009 в 07:19
рассуждения о сервисах и програмах для контакта
http://msoft32.narod.ru
29.06.2009 в 06:25
спасибо большое, очень удобная вещь!
29.06.2009 в 15:25
спасибо большое, очень удобная вещь!
14.07.2009 в 20:18
8)
15.07.2009 в 05:18
8)
04.05.2010 в 17:07
Замечательно! Я тоже сначала хотел bash-скрипт написать, но вы сократили мне работу. Спасибо!