Основан 26 Июля 2013 года
freehacks.ru fhacks.me fhacks.pw fhacksnplmzxaaoo.onion

Показано с 1 по 1 из 1
  1. #1
    Trust
    TopicStarter
    Аватар для ul1k317

    Статус
    Offline
    Регистрация
    26.08.2013
    Сообщений
    823
    Репутация
    395 + / -
    Web-программист

    Сохраняем музыку из Вконтакте

    Код:
    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    
    # курл нужен чтобы получить линк по которому нас отослали
    import pycurl
    
    # для того чтобы забирать вывод из курла
    import cStringIO
    import urllib
    
    # для парсинга страницы
    import lxml.html
    import os
    
    # регулярки
    import re
    
    email = ''
    password = ''
    
    # ID нашего приложения (нам нужно создать приложение в vk это занимает 1 минуту)
    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 "Задание завершено! Удачи!"
    php, mysql, mssql, js, html, css, ajax, administrating, it consulting, etc.

  2. 5 пользователя(ей) сказали cпасибо:

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  

Информация на сайте предоставлена исключительно в ознакомительных целях, использование знаний в противозаконных целях преследуется по закону! Администрация не несет ответственности за ваши деяния.