Downloading File
Filename: Simple Youtube Downloader
;Youtube Simple Downloader by Ford_Lawnmower irc.abjects.net #mIRC
menu channel,status,menubar {
Youtube Simple Downloader: dialog $iif(!$dialog(YTSimpleDownloader),-m YTSimpleDownloader,-v) YTSimpleDownloader
}
alias -l WshRunitSilent {
var %comname $+(WshRunSilent,$ticks)
.comopen %comname WScript.Shell
if ($com(%comname)) {
if (!$com(%comname,run,3,bstr,$1-,uint,0,string,true)) {
echo -st *error* WshRunSilent $com(%comname).error
var %return 0
}
else var %return 1
.comclose %comname
return %return
}
}
;VideoToAudio ffmpeg.exeDirectory;infile;outfile;cleanup command here
alias -l VideoToAudio {
tokenize 59 $1-
var %start $ctime, %dname $replace($+(YTVideoToAudio,$mkfn($3)),$chr(32),_), %cleanup $4
var %quality $input(Please select an audio quality,omr,Quality Settings Needed,160,64,128,160,192,224,256,320)
if (%quality) {
dialog $iif($dialog(%dname),-v,-md) %dname YTVideoToAudio
dcheck did -a %dname 8 $nopath($2)
dcheck did -a %dname 9 $nopath($3)
dcheck did -a %dname 11 Conversion in progress......
ShowProgress %dname
if ($exists($qt($3))) .remove $qt($3)
if ($WshRunitSilent($1 -i $qt($2) -vn -ar 44100 -ac 2 -ab $+(%quality,k) -f mp3 $qt($3))) {
dcheck did -a %dname 11 Conversion Complete in $duration($calc($ctime - %start))
.timer $+ %dname off
%cleanup
}
else dcheck did -a %dname Conversion Failed!
}
}
alias -l ShowProgress {
var %count $iif($calc($gettok($nopath($did($1,1)),1,46) + 1) > 8,1,$calc($gettok($nopath($did($1,1)),1,46) + 1))
dcheck did -g $1 1-7 $+(FFmpeg\,%count,.ico)
.timer $+ $1 -m 1 250 ShowProgress $1
}
alias -l GetCount {
echo -a getcount $iif($calc($gettok($nopath($did($1,1)),1,46) + 1) > 8,1,$calc($gettok($nopath($did($1,1)),1,46) + 1))
return $iif($calc($gettok($nopath($did($1,1)),1,46) + 1) > 8,1,$calc($gettok($nopath($did($1,1)),1,46) + 1))
}
alias -l dcheck {
if ($dialog($3)) $1-
}
dialog -l YTVideoToAudio {
title "Video to Audio Conversion"
size -1 -1 132 56
option dbu
icon 1, 2 24 17 19
icon 2, 20 24 17 19
icon 3, 38 24 17 19
icon 4, 56 24 17 19
icon 5, 74 24 17 19
icon 6, 92 24 17 19
icon 7, 110 24 17 19
text "", 8, 0 1 132 8, center
text "", 9, -2 16 134 8, center
text "TO", 10, 51 8 25 8, center
text "", 11, 0 46 132 8, center
text "", 12, 0 0 0 0
}
dialog -l YTSimpleDownloader {
title "Youtube Downloader"
size -1 -1 202 51
option dbu
text "Link:", 1, 0 4 25 8, right
text "Save to:", 2, 0 15 25 8, right
edit "", 3, 26 3 175 10
edit "", 4, 26 14 151 10
button "Browse", 5, 179 14 22 10
radio "Audio Only", 6, 8 38 42 10
radio "Video Only", 7, 54 38 38 10
button "Download", 8, 163 37 37 12
text "", 9, 0 27 201 8
radio "Both", 10, 97 38 31 10
}
on *:dialog:YTSimpleDownloader:Sclick:5,8: {
getwget
if ($did == 5) did -ra $dname 4 $sdir($mircdir,Select a Directory)
else {
tokenize 32 $did(3) $did(4) $iif($did(6).state,Audio,$iif($did(8).state,Both,Video)) $did(4)
if ($regex($1,/.*youtube\.com\/watch\?v=[\S]{11}/Si)) {
YTGetDownloadLinks $left($gettok($1,2,61),11) $left($gettok($1,2,61),11)
}
}
}
;Link select and download starts here.
alias -l YTGetDownloadLinks {
var %file $+(temp\,$1)
if (!$isdir(temp)) mkdir temp
if ($WshVbscriptDownload($+(http://www.youtube.com/watch?v=,$1),%file)) {
var %dname $+(YT_GetDownloadLinks,~,$1)
dialog $iif($dialog(%dname),-v,-m) %dname YT_Download_Selector
did -a %dname 13 $2-
did -a %dname 14 $iif($isdir($did(YTSimpleDownloader,4)),$did(YTSimpleDownloader,4),$mircdirYoutube\)
did -a %dname 15 $iif($did(YTSimpleDownloader,6).state,Audio,$iif($did(YTSimpleDownloader,10).state,Both,Video))
dialog -x YTSimpleDownloader
bread %file 1 $file(%file).size &file
if ($bfind(&file,1,url_encoded_fmt_stream_map).text) {
if ($bintween(&file,<meta name="title" content=",">,1)) did -a %dname 13 $fix&#($v1)
var %count 1
while ($bintween(&file,url%3D,$+(%,26itag),%count)) {
hadd -m %dname %count $gettok($decodeuri($decodeuri($v1)),1,59)
inc %count
}
%count = 1
while ($hget(%dname,%count)) {
var %link $v1
if ($dialog(%dname)) did -eva %dname %count $GetQuality(%link)
inc %count
}
}
.remove %file
}
}
alias -l GetQuality {
var %in $1-
noop $regex(%in,/quality=(.*?)&/i)
return $+($iif($regml(1),$regml(1),Small),-,$gettok($gettok(%in,-1,47),-1,45))
}
;$bintween by Ford_Lawnmower Syntax = $bintween(&binvar,starttext,endtext,matchnum)
alias -l bintween {
var %count = 1, %mark = 0, %mark2 = 0
while (%count <= $4) {
if ($bfind($1, %mark2, $2).text) {
%mark = $calc($bfind($1, %mark2, $2).text + $len($2))
if ($bfind($1, %mark, $3).text) {
%mark2 = $bfind($1, %mark, $3).text
}
else { return 0 }
}
else { return 0 }
inc %count
}
return $bvar($1, $iif(%mark > 0,%mark,1), $calc(%mark2 - %mark)).text
}
alias -l DecodeUri return $regsubex($1-,/\%([0-9a-f]{2})/gi,$chr($base(\t,16,10)))
alias -l WshVbscriptDownload {
var %comname $+(WshVbscriptDownload,$ticks,$r(1,1000))
.comopen %comname MSScriptControl.ScriptControl
if ($com(%comname)) {
var %Success $com(%comname,language,4,string,vbscript)
inc %Success $Execute(%comname,Set MicrosoftXmlhttp = CreateObject("Microsoft.Xmlhttp"))
inc %Success $Execute(%comname,$+(MicrosoftXmlhttp.Open "GET",$chr(44),$qt($1),$chr(44),False))
inc %Success $Execute(%comname,MicrosoftXmlhttp.Send)
if ($evaluate(%comname,MicrosoftXmlhttp.Status)) {
inc %Success $Execute(%comname,set AdodbStream = CreateObject("Adodb.Stream"))
inc %Success $Execute(%comname,AdodbStream.type = 1)
inc %Success $Execute(%comname,AdodbStream.open)
inc %Success $Execute(%comname,AdodbStream.write MicrosoftXmlhttp.responseBody)
;$iif(!$isid,echo 04 -sat Downloading $1 $bytes($evaluate(%comname,AdodbStream.Size)).suf)
inc %Success $Execute(%comname,AdodbStream.savetofile $+($qt($2),$chr(44),2))
inc %Success $Execute(%comname,AdodbStream.close)
if (%Success != 10) echo -st *error* WshVbscriptDownload Download Failed!
else {
$iif(!$isid,echo 09 -sat Download $1 Complete)
var %return 1
}
}
.comclose %comname
return %return
}
}
alias -l WshVbscriptSleep {
var %comname $+(WshVbscriptSleep,$ticks,$r(1,1000))
.comopen %comname MSScriptControl.ScriptControl
if ($com(%comname)) {
var %Success $com(%comname,language,4,string,vbscript)
inc %Success $Execute(%comname,Dim Sleepstart $chr(44) Sleepend)
inc %Success $Execute(%comname,Sleepstart = Time())
inc %Success $Execute(%comname,Sleepend = DateAdd("s" $chr(44) $1 $chr(44) Sleepstart))
inc %Success $Execute(%comname,While Sleepend >= Time() $crlf Wend)
if (%Success == 5) var %return 1
}
.comclose %comname
return %return
}
alias -l Execute return $com($1,executestatement,3,bstr,$2-)
alias -l Evaluate {
noop $com($1,eval,3,bstr,$2-)
return $com($1).result
}
On *:start: {
if (!$exists(wget\wget.exe)) getwget
}
On *:dialog:YT_GetDownloadLinks~*:close:*: if ($hget($dname)) hfree $dname
On *:dialog:YT_GetDownloadLinks~*:Sclick:1-12: {
$iif(!$isdir(Youtube),mkdir Youtube)
$iif(!$isdir(wget),mkdir wget)
if ((!$exists(wget\wget.exe)) || (!$exists($ffmpeg))) {
echo -gat I am missing some of the files needed to download your video.
echo -gat Please try your download after I gather the missing files.
getwget
}
else {
var %fn $mkfn($did(13)), %ext $gettok($did($did),2,45), %id $gettok($dname,2,126), %idext $+(%id,%ext)
var %dir $did(14)
var %selection $did(15)
run -n wget\wget.exe -bo $qt($+($mircdir,wget\,%id,%ext)) -O $qt($+(%dir,%fn,.,%ext)) $hget($dname,$did)
dialog $iif($dialog(%idext),-v,-md) %idext YTDownloadProgress
did -a %idext 1 %fn
did -a %idext 10 %selection
did -a %idext 11 %dir
did -a %idext 12 %ext
YTProgressCheck %idext
dialog -x $dname
}
}
alias -l YTProgressCheck {
var %file $+(wget\,$1), %dname $1, %data $remove($read(%file,$calc($lines(%file) - 1)),..)
if ($dialog(%dname)) {
tokenize 32 %data
if (!$5) {
did -a %dname 2 $bytes($calc($remove($1,k) * 1000)).suf
did -a %dname 3 $2
did -a %dname 4 $3
did -a %dname 5 $4
.timer $+ %dname 1 1 YTProgressCheck %dname
}
else {
did -a %dname 2,3,5 Complete
did -a %dname 4 $3-4
.remove $qt(%file)
if ($did(%dname,10) != Video) {
var %sel $did(%dname,10), %dir $did(%dname,11), %ext $did(%dname,12), %fn $did(%dname,1)
var %command $iif($did(%dname,10) == Audio,.remove $qt($+(%dir,%fn,.,%ext)))
var %fn2 $iif($exists($qt($+(%dir,$did(%dname,1),.mp3))), $input($did(%dname,1) already exists.$&
$crlf Please enter a new file name.,eoq,FileName Conflict,$did(%dname,1),),$did(%dname,1))
if (%fn) VideoToAudio $+($qt($ffmpeg),;,$qt($+(%dir,%fn,.,%ext)),;,$qt($+(%dir,%fn2,.,mp3)),;,%command)
}
dialog -x %dname
}
}
}
alias -l GetWget {
if (!$isdir(wget)) {
if ($input(You must download some files to continue. $crlf Dowload them now ?,yq,Youtube Simple DownloaderMissing Files,,)) {
mkdir wget
}
else halt
}
if (!$exists(wget/wget.exe)) WshVbscriptDownload http://fordlawnmower.googlecode.com/files/wget wget/wget.exe
if (!$exists(wget/libssl32.dll)) WshVbscriptDownload http://fordlawnmower.googlecode.com/files/libssl32 wget/libssl32.dll
if (!$exists(wget/libintl3.dll)) WshVbscriptDownload http://fordlawnmower.googlecode.com/files/libintl3 wget/libintl3.dll
if (!$exists(wget/libiconv2.dll)) WshVbscriptDownload http://fordlawnmower.googlecode.com/files/libiconv2 wget/libiconv2.dll
if (!$exists(wget/libeay32.dll)) WshVbscriptDownload http://fordlawnmower.googlecode.com/files/libeay32 wget/libeay32.dll
GetFFmpeg
}
alias -l GetFFmpeg {
$iif(!$isdir(FFmpeg),mkdir FFmpeg)
if (!$exists($ffmpeg)) WshVbscriptDownload http://fordlawnmower.googlecode.com/files/ffmpeg ffmpeg/ffmpeg.exe
var %count 1
while (%count <= 8) {
if (!$exists($+(ffmpeg/,%count,.ico))) WshVbscriptDownload $+(http://fordlawnmower.googlecode.com/files/,%count,.ico) $+(ffmpeg/,%count,.ico)
inc %count
}
}
alias -l FFmpeg return $mircdirFFmpeg\ffmpeg.exe
alias -l fix&# {
return $regsubex($replace($regsubex($1-,/\&\#([0-9]{1,});/g,$utf8(\t)),",",&,&,>,>,<,<,',',$chr(9),$chr(32)),$&
/([$\|%\[\]\}\{][^\s]*)/g,$+($chr(2),$chr(2),\t))
}
alias -l UTF8 {
if ($version >= 7) return $chr($1)
elseif ($1 < 255) { return $chr($1) }
elseif ($1 >= 256) && ($1 < 2048) { return $+($chr($calc(192 + $div($1,64))),$chr($calc(128 + $mod($1,64)))) }
elseif ($1 >= 2048) && ($1 < 65536) { return $+($chr($calc(224 + $div($1,4096))),$chr($calc(128 + $mod($div($1,64),64))),$chr($calc(128 + $mod($1,64)))) }
elseif ($1 >= 65536) && ($1 < 2097152) {
return $+($chr($calc(240 + $div($1,262144))),$chr($calc(128 + $mod($div($1,4096),64))),$chr($calc(128 + $mod($div($1,64),64))),$&
$chr($calc(128 + $mod($1,64))))
}
}
alias -l div { return $int($calc($1 / $2)) }
alias -l mod {
var %int $int($calc($1 / $2))
return $calc($1 - (%int * $2))
}
alias -l H2U { return $utf8($base($1,16,10)) }
dialog -l YT_Download_Selector {
title "Youtube Download Selector"
size -1 -1 159 57
option dbu
button "", 1, 2 4 37 12, hide disable
button "", 2, 41 4 37 12, hide disable
button "", 3, 80 4 37 12, hide disable
button "", 4, 119 4 37 12, hide disable
button "", 5, 2 17 37 12, hide disable
button "", 6, 41 17 37 12, hide disable
button "", 7, 80 17 37 12, hide disable
button "", 8, 119 17 37 12, hide disable
button "", 9, 2 30 37 12, hide disable
button "", 10, 41 30 37 12, hide disable
button "", 11, 80 30 37 12, hide disable
button "", 12, 119 30 37 12, hide disable
text "", 13, 3 46 154 8, center
text "", 14, 0 0 0 0
text "", 15, 0 0 0 0
}
dialog -l YTDownloadProgress {
title "Youtube Downloads"
size -1 -1 98 54
option dbu
text "", 1, 1 2 96 8, center
text "", 2, 37 15 58 8
text "", 3, 37 24 59 8
text "", 4, 37 33 59 8
text "", 5, 37 42 59 8
text "Size:", 6, 2 15 32 8, right
text "Complete:", 7, 2 24 32 8, right
text "Speed:", 8, 2 33 32 8, right
text "Remaining:", 9, 2 42 32 8, right
text "", 10, 1 10 0 6, center
text "", 11, 1 10 0 6, center
text "", 12, 1 10 0 6, center
}


