пятница, 18 марта 2011 г.

Загрузчик музыки вКонтакте

param(
    [string]$url,
    [string]$targetpath
)

function replaceCharacters($str){
    [char[]]$replaceChars=@('<','>',':','"','/','\','|','?','*',',','&','#',';',' ')
    #[char[]]$replaceChars=@('<','>',':','"','/','\','|','?','*')
    $replaceChars | foreach {
        $str = $str.Replace($_,"_")
    }
    return $str.Trim()
}

$progress = {
    param($eArgs)
    Write-Progress -Activity "Информация о загрузке файла" -CurrentOperation "Загрузка файла" -Id 1 -PercentComplete $eArgs.ProgressPercentage
}

$webclient = New-Object System.Net.WebClient
$content = $webclient.DownloadString($url)
$webclient.add_DownloadProgressChanged($progress)
#Поиск ссылок
$reg = [regex]"id=`"audio_info([0-9_]+)`" value=`"(http://[a-zA-Z0-9_.]+(/[a-zA-Z0-9]+)+\.mp3)"
$matches = $reg.Matches($content)

foreach ($matche in $matches){
    $id = $matche.Groups[1].Value
    $dwnldstr = $matche.Groups[2].Value
    #поиск названия
    $reg = [regex]"\<span id="`"title$($id)`"\" >([^\<]+)\"
    $soundName =  (replaceCharacters $reg.Matches($content)[0].Groups[1].Value) + ".mp3"

    "Качаем `"$soundName`"...." | Out-Host
    #$webclient.DownloadFile($matche.Value, $targetdirectory + $matche.Value.ToString().Split([Char[]]@("/"))[-1])
    $webclient.DownloadFile($dwnldstr, (Join-Path $targetpath $soundName))
}

4 комментария:

Maksim Agafonov комментирует...

вот это правильно!.. а то про всякие там ad, иксчангу пишет...

Анонимный комментирует...

Согласен,ждем сертификации по сайту вКонтакте

Efimov Gennady комментирует...

:)
не.. на самом деле был интересен именно механизмы работы с Web, аутентификация, методы запросов (POST/GET), работа с кукисами, регулярные приложения...
А предыстория следующая: коллега спросил, есть ли у меня какие-либо программы для скачки.. на что я ответил.. да там скриптом можно залудить :)
ну и собственно, пятница, вечер, работать неохота, но развлекать себя чем-то надо.. вот собственно и развлек..

кстате здесь не работает аутентификация и куки... выложу вскоре.. может пригодиться кому-нибудь, кто захочет что-либо автоматизировать с привлечением web...

Efimov Gennady комментирует...

Регулярные выражения*