пятница, 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))
}