- Сообщения
- 1,590
- Репутация
- 341
Довел до ума и переписал функцию. Люблю парсить страницы =)
Используйте на здоровье. Один минус - Скачивает только первые 50 песен.
Используйте на здоровье. Один минус - Скачивает только первые 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