Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/env python
- # -*- coding: utf-8 -*-
- # курл нужен чтобы получить линк по которому нас отослали
- import pycurl
- # для того чтобы забирать вывод из курла
- import cStringIO
- import urllib
- # для парсинга страницы
- import lxml.html
- import os
- # регулярки
- import re
- email = ''
- password = ''
- # ID нашего приложения
- appID = ''
- # путь куда качаем
- path = "download"
- if appID == '': appID = raw_input("VK Application ID: ");
- def getAuthUserRawData():
- global email, password
- email = raw_input("Email: ")
- password = raw_input("Password: ")
- return
- # LOGIN INTO VK.COM
- def authIntoVk(email, password):
- url = 'https://login.vk.com/?act=login&soft=1&utf8=1&'
- buf = cStringIO.StringIO()
- c = pycurl.Curl()
- c.setopt(c.URL, url)
- c.setopt(c.FOLLOWLOCATION, 1)
- c.setopt(c.COOKIEJAR, "cookie.txt")
- c.setopt(c.COOKIEFILE, "cookie.txt")
- c.setopt(c.WRITEFUNCTION, buf.write)
- postFields = '_origin=https://oauth.vk.com'
- postFields += '&email=' + email + '&pass=' + password
- c.setopt(c.POSTFIELDS, postFields)
- c.setopt(c.POST, 1)
- c.perform()
- c.close()
- buf.close()
- return
- # GET TOKEN
- def GetTokens():
- global appID
- url = 'http://api.vkontakte.ru/oauth/authorize?'
- # тут id нашего приложения
- url += 'client_id='+appID
- url += '&scope=audio'
- url += '&redirect_uri=http://api.vk.com/blank.html'
- url += '&display=page'
- url += '&response_type=token'
- buf = cStringIO.StringIO()
- # for suppress output
- storage = cStringIO.StringIO()
- c = pycurl.Curl()
- c.setopt(c.URL, url)
- c.setopt(c.FOLLOWLOCATION, 1)
- c.setopt(c.COOKIEJAR, "cookie.txt")
- c.setopt(c.COOKIEFILE, "cookie.txt")
- c.setopt(c.HEADERFUNCTION, buf.write)
- # for suppress output
- c.setopt(c.WRITEFUNCTION, storage.write)
- c.perform()
- tokenURL = c.getinfo(c.EFFECTIVE_URL)
- c.close()
- buf.close()
- storage.close()
- return tokenURL
- if os.path.isfile('cookie.txt') != True: getAuthUserRawData()
- authIntoVk(email, password)
- link = GetTokens()
- access_token = re.search('access_token=([0-9A-Fa-f]+)&', link)
- expires_in = re.search('expires_in=([0-9A-Fa-f]+)&', link)
- user_id = re.search('user_id=([0-9A-Fa-f]+)', link)
- if access_token is None:
- print 'Не удалось, возможно не правильно указан ID приложения или что-то еще =)';
- exit()
- access_token = access_token.group(1)
- expires_in = expires_in.group(1)
- user_id = user_id.group(1)
- # PARSING!!!!!!!!
- url = "https://api.vkontakte.ru/method/audio.get.xml?uid=" + user_id + "&access_token=" + access_token
- page = urllib.urlopen(url)
- html = page.read()
- print "Список музла получен, парсим..."
- artistMas = []
- titleMas = []
- urlMas = []
- number = 0
- print "Парсим на предмет исполнителей..."
- doc = lxml.html.document_fromstring(html)
- for artist in doc.cssselect('artist'):
- artistMas.append(artist.text)
- number = number + 1
- print "OK"
- print "Парсим на предмет названий..."
- for title in doc.cssselect('title'):
- titleMas.append(title.text)
- print "OK"
- print "Парсим на предмет ссылок..."
- for urlm in doc.cssselect('url'):
- urlMas.append(urlm.text)
- print "OK"
- print ""
- if os.path.exists(path):
- "Папка уже есть, начинаем докачку"
- else:
- os.makedirs(path)
- print "Нам нужно скачать кучу файлов. Вычисляем количество..."
- print number
- answer = raw_input("Готов?: ")
- if answer == "y":
- print "Пошла закачка, пошла родимая!"
- else:
- print "Вот же какой трусливый! Ну и ладно!"
- exit()
- for i in xrange(0, number-1):
- print "Загружается:"
- print i
- print " "
- filename_new = path+"/"+artistMas[i]+ " - " + titleMas[i] + ".mp3";
- if os.path.exists(filename_new):
- print "Этот файл уже загружен, переходим к следующему"
- else:
- downCmd = "wget -P" + path + " " + urlMas[i]
- os.popen(downCmd)
- p = re.compile(r"[0-9a-zA-Z]+\.mp3$")
- filename = p.findall(urlMas[i])
- try:
- os.rename(path+"/"+filename[0], path+"/"+artistMas[i]+ " - " + titleMas[i] + ".mp3")
- except:
- print "Невозможно переименовать, оставляю изначальное имя файла!"
- print " "
- print "Задание завершено! Удачи!"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement