Вот накидал пару дней назад, может кому тоже понадобится. Можно скачивать по автору, по направлению музыки, вообщем по всему что можно ввести в поиск vkontakte.ru Основные параметры: Code: YouLogin = "youemail@gmail.com" Ваше мыло YouPassword = "youpass" Ваш пароль TracksKey = "psy" Критерий поиска MaxTracks = "200" # Сколько треков скачивать. PHP: #------------------------------------------------------------------------------- # Name: vkmsearch.py # Greetz: KAS_ONE (thanks you for idea!) # Author: dex # Created: 18.01.2011 # Copyright: (c) dex aka De-visible 2011 # Site/Blog: http://netc0ding.blogspot.com # Icq: 22-3333-575 #------------------------------------------------------------------------------- #!/usr/bin/env python # -*- coding:windows-1251 -*- import cookielib import urllib import urllib2 import re, time, sys #Datas YouLogin = "youemail@gmail.com" # Your email YouPassword = "youpass" # your password TracksKey = "psy" # What search? MaxTracks = "200" # tracks count def trace(message, type_ = ""): print " "+type_+" [ "+message+" ]" def aboutMe(): print "\n","-"*10 trace("Author: dex aka De-visible","[!!!]") trace("Site/Blog: netc0ding.blogspot.com","[!!!]") trace("ICQ#: 223333575","[!!!]") print "-"*10,"\n" def Logins(Login = "", # Auth function Password = ""): trace("try to become authorized") time.sleep(1) cook = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cook)) urllib2.install_opener(opener) datas = { 'act':'login', 'q':'1', 'al_frame':'1', 'expire':"", "captcha_sid":"", "captcha_key":"", "from_host":"vkontakte.ru", "email":Login, "pass":Password } headers = { "User-Agent":"Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" } params = urllib.urlencode(datas) req = urllib2.Request('http://login.vk.com/?act=login',params,headers) try: page = urllib2.urlopen(req).read() except: trace("Login is Fuck") return {"ERROR":page} if 'parent.onLoginDone' in page: trace("Login is OK") return {"OK":cook} else: trace("Login is Fuck") return {"NO":page} def createlink(one,two,three): #http://cs4431.vkontakte.ru/u42272533/audio/98c665cbd408.mp3 [2,3,4] return 'http://cs'+one+'.vkontakte.ru/u'+two+'/audio/'+three+'.mp3' def SearchMusic(name, cookie, maxsize = 0): # Music search function time.sleep(1) trace("search music, key = {"+name+"}") link = "http://vkontakte.ru/gsearch.php?section=audio&q="+name+"&name=1" link_for_search = link cook = cookielib.CookieJar() cook = cookie opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cook)) headers = { "Referer":"http://vkontakte.ru/groups.php", "User-Agent":"Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",'Accept-Charset': 'windows-1251,utf-8;q=0.7,*;q=0.7', "Keep-Alive": "115", "Connection":"keep-alive" } opener.addheaders.append(("User-Agent","Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6")) urllib2.install_opener(opener) pages_ = int(maxsize)/100 if pages_ <> 0: mp3 = [] for i in range(0,pages_): if i <>0: link = link_for_search + "&offset=" + str(i*100) try: page = urllib2.urlopen(link).read() except: page="" if page <> '': audio = re.findall(r"return operate(.*?)\;",page) for track in audio: t = track[1:-1].split(',') mp3.append({'name':t[3][1:-1],"link":createlink(t[1],t[2],t[3][1:-1])}) count = len(mp3) trace(str(count)+" tracks are found") return mp3 else: mp3 = [] try: page = urllib2.urlopen(link_for_search).read() except: page="" if page <> '': audio = re.findall(r"return operate(.*?)\;",page) for track in audio: t = track[1:-1].split(',') mp3.append({'name':t[3][1:-1],"link":createlink(t[1],t[2],t[3][1:-1])}) count = len(mp3) trace(str(count)+" tracks are found") return mp3 def Download(music,cookie): time.sleep(1) cj = cookielib.CookieJar() cj = cookie opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) urllib2.install_opener(opener) link = music["link"] track = "" name = music["name"] try: info = urllib2.urlopen(link).info() bytes = re.findall(r"Content\-Length\: (.*?)\r\n",str(info)) byte_ = bytes.pop() byte_ = int(byte_) size = byte_/1024/1024 trace("File size = "+str(size)+"mb") except: pass try: trace("link = "+'\"'+link+'\"') trace("Download.... ") track = urllib2.urlopen(link).read() except: return "None" return {"name":name,"file":track} def save_music(music): name = music["name"] tfile = music["file"] try: with open(name+'.mp3','wb') as myfile: myfile.write(tfile) except: return False trace("Save file "+name+'.mp3') return True def main(): aboutMe() logs = Logins(YouLogin,YouPassword) if "OK" in logs: datas = SearchMusic(TracksKey, logs["OK"],MaxTracks) count_ = 0 for one_data in datas: to_data = Download(one_data,logs["OK"]) count_ += 1 if (save_music(to_data)): print " ok" if (count_ == int(MaxTracks)) or (count_ > int(MaxTracks)): break trace('The task is executed, completed') trace('Tracks count = '+str(count_)) aboutMe() raw_input() sys.exit(0) else: aboutMe() trace('Exit...(3 sec)') time.sleep(4) sys.exit(0) if __name__ == "__main__": main() Код без пробелов на дампе: _http://dumpz.org/29144/ Будут улучшения, пока просто было необходимо, вот и написал.
норм.. но все же... как с повторением? как с количеством минут прослушивания в день? ведь в вк есть такое ограничение!
я писал такой на Perl: PHP: #usr/bin/perl use LWP::UserAgent; use HTTP::Request; use HTTP::Cookies; $| = 1; ###################### $login = 'user@mail.ru'; $password = "CoolPass"; $count = 0; $begin = 1; ###################### $ua = LWP::UserAgent->new('Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.6.30 Version/10.61'); $ua->cookie_jar(HTTP::Cookies->new(file => 'cookie.txt', autosave => 1)); $req = HTTP::Request->new(POST => 'http://login.vk.com/?act=login'); $req->content_type('application/x-www-form-urlencoded'); $req->content("email=".$login."&pass=".$password); push @{$ua->requests_redirectable}, POST; $res = $ua->request($req); $req = HTTP::Request->new(GET => 'http://vkontakte.ru/audio.php'); $res = $ua->request($req); $result = $res->as_string(); @matches = $result =~ m#return operate\(.*?,'(.*?)',\d*?\)#ig; $count = ($#matches+1) unless $count<=0; if($begin>=2) { $begin -= 2; for($i=0;$i<=$begin;$i++) { shift @matches; } } for($i=0;$i<$count;$i++) { $req = HTTP::Request->new(GET => $matches[$i]); $matches[$i] =~ m#audio/(.*?)\.mp3$#i; print "Loading ".$1.".mp3... "; $res = $ua->request($req,$1.".mp3"); if($res->is_success) { print "ok\n"; } else { print "bad!\n"; } } print "Done."; скачивает из трек листа
как это 0_о у меня все работает... пахать не будет только если будут символы $,@,% и т.д., потому что интерпретируется как переменная
Может mp3 сервис сделать из этого. оч удобно, зашел на сайт набрал, прослушал и скачал... это не сложно реализовать правда на пыхе токо смогу
+1. Откуда информация, просто каждый день качаю хз по сколько треков и все в норме, а вот с повторениями пока не решил, что можно сделать. Простой парсинг на одинаковость слов в названии песни, не прокатит... Ну вообщем пока думаем).
Подскажите как получить название файла mp3 vkontakte hash кто знает алгоритм хеша названия файла mp3 vkontakte? вот ссылка http://cs4956.vkontakte.ru/u76692345/audio/0cfc7f3a1... это Camo & Krooked Reincarnation 2ой трек в моём плейлисте. Ну или где почитать. Если зайти с другого ip ссыль не работает. Т.е. как минимум хэш привязан к ip.
не совсем: Code: Меняется ли хеш от времени [Camo & Krooked - Reincarnation] ip filename time 178.140.70.200 85d2b9d27c92 28.09.11 01:19 178.140.70.200 1f4d29716bec 28.09.11 09:54