Что нового

[Сеть, интернет] Запись потокового видео и аудио

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Довел до ума и переписал функцию. Люблю парсить страницы =)

Используйте на здоровье. Один минус - Скачивает только первые 50 песен.
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>

$MainForm = GUICreate("Скачивание музыки с контакта", 352, 220, 192, 124)
GUICtrlCreateTab(8, 8, 329, 201)
GUICtrlCreateTabItem("Главная")
$ProgressDownload = GUICtrlCreateProgress(16, 152, 313, 17)
$ID_Login = GUICtrlCreateInput("Логин", 16, 65, 145, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$ID_Pass = GUICtrlCreateInput("Пароль", 176, 65, 153, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD))
GUICtrlSetState(-1, $GUI_DISABLE)
$Download_label = GUICtrlCreateLabel("Статус: ", 16, 104, 313, 41)
GUICtrlCreateLabel("Введите Логин и Пароль: ", 16, 40, 136, 17)
$Cancel_But = GUICtrlCreateButton("Старт", 112, 176, 121, 25)
$Login_But = GUICtrlCreateButton("Логин", 226, 37, 100, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
		Case $Cancel_But
			LoadMusics()
    EndSwitch
WEnd

Func LoadMusics()
	$String = BinaryToString(InetRead("http://vkontakte.ru/audio"))
	GUICtrlSetData($Cancel_But, "Отмена")
If StringInStr($String, "Чтобы просматривать эту страницу, нужно зайти на сайт") Then
    GUICtrlSetState($Login_But, $GUI_ENABLE)
    GUICtrlSetState($ID_Login, $GUI_ENABLE)
    GUICtrlSetState($ID_Pass, $GUI_ENABLE)
	GUICtrlSetData($Download_label, "Статус:"&@CRLF&"Нет авторизации. Введите Логин и Пароль в форму и нажмите Логин")
    Do
        $nMsg = GUIGetMsg()
    Until $nMsg = $Login_But
    $login = GUICtrlRead($ID_Login)
    $pass = GUICtrlRead($ID_Pass)
    InetRead("http://vkontakte.ru/login.php?m=1&email="&$login&"&pass="&$pass)
	GUICtrlSetState($Login_But, $GUI_DISABLE)
    GUICtrlSetState($ID_Login, $GUI_DISABLE)
    GUICtrlSetState($ID_Pass, $GUI_DISABLE)
    $String = BinaryToString(InetRead("http://vkontakte.ru/audio"))
EndIf
	$URLs = StringRegExp ($String, '(?i)(?U).*value="(.+),.+".+', 3)
	$Names = StringRegExp ($String, '(?i)(?U).*onclick=".+">(.+)</span><span class="user">.*', 3)
For $i = 0 To UBound($Names) - 2
	$Names[$i] = StringRegExpReplace($Names[$i],'(</a>|</b>|<span class="title">|<a href="".+onclick="Audio\.showLyrics.+false;">|&#.+;|">|\:)',"")
	$Names[$i] = StringRegExpReplace($Names[$i],'(\\|/)',"_")
	$Names[$i] = StringStripWS($Names[$i],7)
Next

For $i = 0 To UBound($URLs) - 2
	If Not FileExists(@ScriptDir & "\Music") Then DirCreate(@ScriptDir & "\Music")
    $hDownload = InetGet($URLs[$i], @ScriptDir & "\Music\" &$Names[$i]&".mp3",1,1)
    GUICtrlSetData($Download_label, "Статус:"&@CRLF&"Загрузка: " & $Names[$i])
    GUICtrlSetState($Cancel_But, $GUI_ENABLE)
    Do
        $Data = InetGetInfo($hDownload)
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $Cancel_But
				GUICtrlSetData($Download_label, "Статус:"&@CRLF&"Отменено пользователем.")
                GUICtrlSetData($ProgressDownload, 0)
				GUICtrlSetData($Cancel_But, "Старт")
                Return
        EndSwitch
        GUICtrlSetData($ProgressDownload, $Data[0]/$Data[1]*100)
    Until InetGetInfo($hDownload, 2)
    InetClose($hDownload)
Next
GUICtrlSetData($Cancel_But, "Старт")
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Medic84,
Посмотрите этот скрипт CreatoR`a.
Я им пользовался, скачивает быстрее и симпатичнее.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
madmasles [?]
Я им пользовался, скачивает быстрее и симпатичнее.
Лень переделывать, да и скрипт Creator'a у меня тормозит из за ListViewProgress
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341

Ну Вот в общем то - что я напилил за сегодня. :scratch:
На Рабочий проект пока не очень тянет, много моментов надо допиливать, но поработать - сойдет =)

VKMD.zip
 

komorov74

Новичок
Сообщения
81
Репутация
0
А видео так слабо сделать :laugh: ??? Только не убогим Fly а MP4 что бы хотябы ссылки на скачку выдавало!!!!!! Скажу ха это 6 СПАСИБ!!!!!!!!!!!1
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
komorov74
У меня времени нет на это. Я сейчас VK_API пишу, как время будет - покажу как это можно сделать. Тем более на самом VK_API
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Arei
Я его доделывать начал =) Она теперь базируется на VK API... Поэтому убрал, до выхода UDF
 
Автор
T

tref777

Новичок
Сообщения
38
Репутация
2
Решил завершить написание программы таким кодом:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListBoxConstants.au3>
#include <EditConstants.au3>
#include <ProgressConstants.au3>
#include <GUIConstantsEx.au3>

#NoTrayIcon

Global $sURL = 'http://vk.com/audio' 
Global $sSongName
Global $sLog
Global $sLink
Global $sDir = @ScriptDir


$MainWin = GUICreate("VKSave", 400, 450, -1, -1)
GUISetBkColor(0xFFFFFF) 
GUISetState()
$icon = GUICtrlCreateIcon('C:\Users\И\Desktop\au3\VKSave\B.ico', 1, 10, 400)
$dl = GUICtrlCreateButton("Скачать", 250, 350, 120, 25)
$StartList = GUICtrlCreateButton("Войти", 250, 300, 120, 25)
$quit = GUICtrlCreateButton("Выйти", 250, 400, 120, 40)
$DirButton = GUICtrlCreateButton("Обзор", 100, 400, 120, 40)
GUICtrlSetBkColor($DirButton, 0x4682B4)
GUICtrlSetColor($DirButton, 0xFFFFFF)
GUICtrlSetBkColor($StartList, 0x4682B4)
GUICtrlSetColor($StartList, 0xFFFFFF)
GUICtrlSetBkColor($quit, 0x4682B4)
GUICtrlSetColor($quit, 0xFFFFFF)
$oEmailLabel = GUICtrlCreateLabel('Телефон или e-mail:', 10, 280, 125, 25)
$oPassLabel = GUICtrlCreateLabel('Пароль:', 10, 330, 125, 25)
GUICtrlSetColor($oEmailLabel, 0x808080)
GUICtrlSetColor($oPassLabel, 0x808080)
$oEmail = GUICtrlCreateInput('login', 10, 300, 170, 25)
$oPass = GUICtrlCreateInput('pass', 10, 350, 170, 25, $ES_PASSWORD)
$mylist = GUICtrlCreateListView("Исполнитель         |Название песни         |Размер файла          ", 2, 2, 396, 270)
GUICtrlSetBkColor($mylist, 0xFFFFFF)
GUICtrlSetLimit(-1, 200)
GUICtrlSetState($dl, $GUI_DISABLE)
GUICtrlSetBkColor($dl, 0xDCDCDC)
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$msg = 0
    
While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()
    Select
        Case $msg = $quit
            Exit
        Case $msg = $dl
            $sRecord = GUICtrlRead(GUICtrlRead($mylist), 2)
            $sLink = GetLink($sRecord)
            $aName = StringRegExp($sRecord, '(.*?\|.*?)\|', 3)
            $sName = StringReplace($aName[0], '|', '-')
            DlSong($sLink, $sName, $sDir)
            ConsoleWrite($sLink & @CRLF &  $sRecord)
        Case $msg = $DirButton
                $sDir = FileSelectFolder('Выберите папку', @DesktopDir)    
        Case $msg = $StartList
                GUICtrlSetState($StartList, $GUI_DISABLE)
                GUICtrlSetBkColor($StartList, 0xDCDCDC)
            If Not Connect() Then
                MsgBox(0, '', 'ресурс vk.com не доступен')
                Exit
            EndIf
            If Login() Then
                $sSrc = GetAudioSource()
                GetAudioList($sSrc)
                GUICtrlSetState($dl, $GUI_ENABLE)
                GUICtrlSetBkColor($dl, 0x4682B4)
                GUICtrlSetColor($dl, 0xFFFFFF)
                GUICtrlSetColor($StartList, 0xFFFFFF)
                GUICtrlSetState($oEmail, $GUI_DISABLE)
                GUICtrlSetState($oPass, $GUI_DISABLE)
            Else 
                MsgBox(0, '', 'логин или пароль введены неверно')
                GUICtrlSetState($StartList, $GUI_ENABLE)
                GUICtrlSetBkColor($StartList, 0x4682B4)
                GUICtrlSetColor($StartList, 0xFFFFFF)
            EndIf   
    EndSelect       
    sleep(10)
WEnd



Func Login()
    $sEmail = GUICtrlRead($oEmail)
    $sPass = GUICtrlRead($oPass)
    $oHTTP.Open("POST","http://login.vk.com/?act=login")
    $oHTTP.setTimeouts(5000, 5000, 15000, 15000)
    $oHTTP.SetRequestHeader("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*")
    $oHTTP.SetRequestHeader("Accept-Language", "ru")
    $oHTTP.SetRequestHeader("Referer","http://vkontakte.ru")
    $oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
    $oHTTP.SetRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")
    $oHTTP.SetRequestHeader("Host","login.vk.com")
    $oHTTP.SetRequestHeader("Proxy-Connection", "Keep-alive")
    $oHTTP.Send('email='&$sEmail&'&pass='&$sPass)
    $sData = $oHTTP.ResponseText
    If StringInStr($sData, 'Не удается войти') Then
        Return 0
    Else
        Return 1
    EndIf
EndFunc

Func GetAudioSource()
    $oHTTP.Open('GET', 'http://vk.com/audio', 0) 
    $oHTTP.Send()
    $sData = $oHTTP.ResponseText
    Return $sData
EndFunc

Func DlSong($sLink, $sName, $sDir)
    $DlWin = GUICreate('Загрузка', 100, 10, -1, -1, $WS_POPUP)
    GUISetState(@SW_SHOW)
    $oProgress = GUICtrlCreateProgress(0, 0, 100, 10)
    $sName = StringReplace($sName, "'", "")
    $hFile = InetGet($sLink, $sDir & '\' & $sName & '.mp3', 0, 1)
    $iSize = InetGetSize($sLink)
    $iPercent = 0
    While $iPercent < 100
        $iReady = InetGetInfo($hFile, 0)
        $iPercent = ($iReady/$iSize) * 100
        GUICtrlSetData($oProgress, $iPercent)
        sleep(10)
    WEnd
    GUICtrlSetData($oProgress, 100)
    sleep(1000)
    GUIDelete($DlWin)   
EndFunc

Func GetLink($sRecord)
    $aSong = StringRegExp($sRecord, '.*?\|.*?\|', 3)
    $start = StringInStr($sLog, $aSong[0]) + StringLen($aSong[0]) + 1
    $end = StringInStr($sLog, '.mp3', 0, 1, $start)
    $count = $end - $start
    $sCut = StringMid($sLog, $start, $count)
    $sLink = $sCut & '.mp3'
Return $sLink
EndFunc 



Func Connect()
    If ping('vk.com') Then
        Return 1
    Else
        Return 0
    EndIf
EndFunc 

Func GetAudioList($sSrc)
    GUISetState(@SW_DISABLE, $MainWin)
    $WinForWait = GUICreate('Пожалуйста подождите...', 180, 40, -1, -1, $WS_POPUP+$WS_BORDER+$WS_DLGFRAME)
    GUISetBkColor(0xFFFFFF, $WinForWait)
    GUICtrlCreateLabel('Построение списка...', 30, 10, 240, 20)
    GUISetState(@SW_SHOW, $WinForWait)
    GUISetState(@SW_DISABLE, $WinForWait)
    $aSrcElement = StringRegExp($sSrc, '(?s)<input type="hidden" id="audio_info.*?Audio\.selectPerformer.*?udio_remove_wrap fl_r', 3)
    For $i = 0 To UBound($aSrcElement) - 1
        $aDlLink = StringRegExp($aSrcElement[$i], '(?s)http://cs.[^<>]*?mp3', 3)
        $aPerformer = StringRegExp($aSrcElement[$i], '(?s)selectPerformer\(event,(.*?)\);', 3)
        $aSongName1 = StringRegExp($aSrcElement[$i], '(?s)<span class="title">([^<>]*?)<\/span><span', 3)
        $aSongName2 = StringRegExp($aSrcElement[$i], '(?s)cancelEvent\(event\);">([^<>]*?)<\/a> <\/span><span', 3)
        $aPerformer[0] = StringReplace($aPerformer[0], "'", "")
        
        If IsArray($aSongName1) Then
            $iSongSize = InetGetSize($aDlLink[0])
            $iSongSize = $iSongSize/1000000
            $aFormatSize = StringRegExp($iSongSize, '.*?\..', 3)
            If IsArray($aFormatSize) Then
                GUICtrlCreateListViewItem('' & $aPerformer[0] & '|' & $aSongName1[0] & '|' & $aFormatSize[0] & ' Мб' & '', $mylist)
                $sLog &= $aPerformer[0] & '|' & $aSongName1[0] & '| ' & $aDlLink[0] & @CRLF
            Else
                GUICtrlCreateListViewItem('' & $aPerformer[0] & '|' & $aSongName1[0] & '|' & $aFormatSize[0] & ' Мб' & '', $mylist)
                $sLog &= $aPerformer[0] & '|' & $aSongName1[0] & '| ' & '?' & @CRLF
            EndIf   
        EndIf
        If IsArray($aSongName2) Then
            $iSongSize = InetGetSize($aDlLink[0])
            $iSongSize = $iSongSize/1000000
            $aFormatSize = StringRegExp($iSongSize, '.*?\..', 3)
            If IsArray($aFormatSize) Then
                GUICtrlCreateListViewItem('' & $aPerformer[0] & '|' & $aSongName2[0] & '|' & $aFormatSize[0] & ' Мб' & '', $mylist)
                $sLog &= $aPerformer[0] & '|' & $aSongName2[0] & '| ' & $aDlLink[0] & @CRLF
            Else
                GUICtrlCreateListViewItem('' & $aPerformer[0] & '|' & $aSongName2[0] & '|' & $aFormatSize[0] & ' Мб' & '', $mylist)
                $sLog &= $aPerformer[0] & '|' & $aSongName2[0] & '| ' & '?' & @CRLF
            EndIf
        EndIf   
    Next
    GUISetState(@SW_ENABLE, $MainWin)
    GUIDelete($WinForWait)
EndFunc
 
Верх