This is a project that I just started working on. This script will search kohit.net and retrieve 0 to 30 results. The results can then be selected and downloaded using mirc sockets.
You can download as many songs as you want at a time, however, each download will open a separate
progress bar dialog. I plan to change this to a single download manager but at this point I am focusing on adding more content and sites to the script.
You can find this dialog from any menu, under mIRC Music Downloader.
To use it, just enter a artist or song name or both and click search.
To download, just select one of the results and click Download.
After you have some music downloaded you can click "play file" to view or listen to music.
All downloads are stored in the current directory(ie mircdir) \mIRCMusic\Artist_Name\songtitle.mp3 For instance c:\mymircdir\mIRCMusic\Ozzy_Osbourne\Crazy_Train.mp3
Update Added a second search site and page numbers :) Now you can view all of the results for your search if you want :)
Added
FYI -- There is some code here that is not currently being used, but I will be implementing it soon.
;mIRC Music Downloader By Ford_Lawnmower irc.mindforge.org #USA-Chat
;
;This section is part of an unfinished edition to this script. Stay Tuned :)
;syntax airmp3 artist_name Song_name If no Artist then use /airmp3 - song_name Song name is Optional UnderScores are required
alias airmp3 {
var %sockname $+(airmp3G,$ticks)
sockopen %sockname www.airmp3.net 80
sockmark %sockname www.airmp3.net $+(/search/,$FRD($1),/,$FRD($2),$iif(!$2,mp3/,/mp3/))
}
On *:sockopen:airmp3*: {
echo -a $gettok($sock($sockname).mark,1,32) $gettok($sock($sockname).mark,2,32)
sockwrite -nt $sockname GET $gettok($sock($sockname).mark,2,32) HTTP/1.1
sockwrite -nt $sockname Host: $gettok($sock($sockname).mark,1,32) $+ $str($crlf,2)
sockwrite -nt $sockname Connection: keep-alive 30
sockwrite -nt $sockname $crlf
}
On *:sockread:airmp3G*: {
if ($sockerr > 0) { echo -at socket error airmp3 -->> $sockerr }
else {
var %airmp3 | sockread %airmp3
if (Location: isin %airmp3) { redirect $remove(%airmp3,Location: ) | echo -a redirecting | sockclose $sockname }
}
}
On *:sockread:airmp3R*: {
if ($sockerr > 0) { echo -at socket error airmp3 -->> $sockerr }
else {
sockread &airmp3
bwrite airmp3.pat -1 -1 &airmp3
var %count $calc(%count + 1)
while ($bintween(&airmp3,<a title=",",%count)) {
echo -a $v1 $+(http://www.airmp3.net/,$bintween(&airmp3,$+($v1,",$chr(32),href="),">,1))
inc %count
}
}
}
alias -l redirect {
var %sockname $+(airmp3R,$ticks)
sockopen %sockname www.airmp3.net 80
sockmark %sockname www.airmp3.net $remove($1,http://www.airmp3.net)
}
;Start of Working Script
;www.dilandau.com
alias -l dilandau {
var %sockname $+(dilandau,$ticks)
sockopen %sockname www.dilandau.com 80
sockmark %sockname $+(/download_music/,$replace($2-,$chr(32),% $+ 20),-,$1,.html) 0 0 $1
}
On *:sockopen:dilandau*: {
if ($dialog(M_D)) {
if (!$sockerr) {
sockwrite -nt $sockname GET $gettok($sock($sockname).mark,1,32) HTTP/1.1
sockwrite -n $sockname Host: www.dilandau.com $+ $str($crlf,2)
$iif($dialog(M_D),did -r M_D 9)
}
else { echo -st Socket Error $nopath($script) | sockclose $sockname | return }
}
else { sockclose $sockname | return }
}
On *:sockread:dilandau*: {
if (!$sockerr) {
var %dilandau, %count 1 | sockread %dilandau
if ($between(%dilandau,<h2 class="title" title=",">,1)) {
sockmark $sockname $puttok($sock($sockname).mark,$replace($v1,$chr(32),_),2,32)
}
if ($dialog(M_D)) && ($between(%dilandau,<a class="button" href=",",1)) {
did -a M_D 9 $replace($+($gettok($sock($sockname).mark,2,32),$chr(7),$replace($v1,$chr(32),% $+ 20)),_,$chr(32))
}
while ($between(%dilandau,rel="nofollow">,</a><a,%count)) {
sockmark $sockname $puttok($sock($sockname).mark,$replace($v1,$chr(32),_),3,32)
inc %count
}
if (<div id="footer_bottom_bg"></div> isin %dilandau) {
if ($gettok($sock($sockname).mark,3,32)) {
var %stop $v1, %start 1
$iif($dialog(M_D),did -r M_D 15)
while (%start <= %stop) {
$iif($dialog(M_D),did -a M_D 15 %start)
inc %start
}
$iif($dialog(M_D),did -c M_D 15 $gettok($sock($sockname).mark,4,32))
}
sockclose $sockname
return
}
}
else { echo -st Socket error $script | sockclose $sockname | return }
}
;syntax kohit artist-name-Song-name
alias kohit {
var %sockname $+(kohitF,$ticks)
sockopen %sockname $+($1,-search-downloads.kohit.net) 80
sockmark %sockname $+($1,-search-downloads.kohit.net) $+(/_/,$2)
}
On *:sockopen:kohitF*: {
if ($dialog(M_D)) {
if (!$sockerr) {
$iif($dialog(M_D),did -a M_D 5 Searching $gettok($sock($sockname).mark,1,32) $gettok($sock($sockname).mark,2,32) ....)
.timer 1 4 did -a M_D 5
$iif($dialog(M_D),did -r M_D 9)
sockwrite -nt $sockname GET $gettok($sock($sockname).mark,2,32) HTTP/1.1
sockwrite -n $sockname Host: $gettok($sock($sockname).mark,1,32) $+ $str($crlf,2)
}
else { echo -st socket error $nopath($script) | return }
}
else { sockclose $sockname }
}
On *:sockread:kohitF*: {
if ($sockerr > 0) { echo -at socket error kohit -->> $sockerr }
else {
var %kohit | sockread %kohit
if (<a href="http:// isin %kohit) && (MP3 Free"> isin %kohit) {
if ($dialog(M_D)) { did -a M_D 9 $fixchars($between(%kohit,Free">,</a>,1)) $chr(7) $between(%kohit,<a href="," class=,1) }
else { sockclose $sockname }
}
if ($regex(%kohit,/Page\s(\d+)\s\/\s(\d+)?/)) && ($dialog(M_D)) {
var %current $regml(1), %end $regml(2), %start 1
did -r M_D 15
while (%start <= %end) {
did -a M_D 15 %start
inc %start
}
did -c M_D 15 %current
}
}
}
;syntax is /kohitD full path to download page
alias kohitD {
var %sockname $+(kohitD,$ticks)
sockopen %sockname $gettok($1,$calc($gettok($1,0,47) - 2),47) 80
sockmark %sockname $gettok($1,$calc($gettok($1,0,47) - 2),47) $+(/_/,$nopath($1))
}
On *:sockopen:kohitD*: {
if (!$sockerr) {
sockwrite -nt $sockname GET $gettok($sock($sockname).mark,2,32) HTTP/1.1
sockwrite -nt $sockname Host: $gettok($sock($sockname).mark,1,32) $+ $str($crlf,2)
}
else { echo -st Socket error $nopath($script) | sockclose $sockname | return }
}
On *:sockread:kohitD*: {
if ($sockerr > 0) { echo -at socket error kohitD -->> $sockerr }
else {
var %kohitD | sockread %kohitD
if (Download Now: isin %kohitD) {
sockclose $sockname
getfile $between(%kohitD,<a href=",",1) $_($replace($gettok($between(%kohitD,<u>,</u>,1),1,45),$chr(32),_)) $mkfn($_($replace($gettok($between(%kohitD,<u>,</u>,1),2,45),$chr(32),_)))
}
if (declared broken. isin %kohitD) && ($dialog(M_D)) {
did -a M_D 5 Sorry :( Broken Link!!
.timer 1 4 $!iif($dialog(M_D),did -a M_D 5,noop)
sockclose $sockname
return
}
}
}
alias -l _ { return $regsubex($1,/^_|_$/g,$null) }
Alias GetFile {
var %sockname = $+(Getfile,$ticks)
if (!$isdir(mIRCMusic)) { mkdir mIRCMusic }
if (!$isfile($+(mIRCMusic\,$2,\) $+ $+($3,.mp3))) {
sockopen %sockname $gettok($remove($1,http://),1,47) 80
sockmark %sockname $+(mIRCMusic\,$mkfn($2),\) $gettok($remove($1,http://),1,47) $remove($1,$gettok($1,1,47),$gettok($1,2,47),//) $+($3,.mp3) 0 0
}
else {
sockopen %sockname $gettok($remove($1,http://),1,47) 80
sockmark %sockname $+(mIRCMusic\,$mkfn($2),\) $gettok($remove($1,http://),1,47) $remove($1,$gettok($1,1,47),$gettok($1,2,47),//) $+($3,$ticks,.mp3) 0 0
}
}
On *:sockopen:GetFile*:{
if (!$sockerr) {
sockwrite -nt $sockname GET $gettok($sock($sockname).mark,3,32) HTTP/1.0
sockwrite $sockname Host: $gettok($sock($sockname).mark,2,32) $+ $crlf $+ $crlf
}
else { echo -st Socket Error $nopath($script) }
}
On *:sockread:GetFile*:{
if ($gettok($sock($sockname).mark,5,32) == 0) {
var %GetFile.var | sockread %GetFile.var
if (Content-Length: isin %GetFile.var) && (1502 !isin %GetFile.var) {
sockmark $sockname $sock($sockname).mark $calc($remove(%GetFile.var,Content-Length:))
if ($gettok($sock($sockname).mark,7,32) > 1000) { downloader $sockname }
elseif (!$gettok($sock($sockname).mark,7,32)) {
$iif($dialog(M_D),did -a M_D 5 Bad or Missing File!!)
.timer 1 4 $!iif($dialog(M_D),did -a M_D 5,noop)
sockclose $sockname
return
}
}
if (Content-Type: text/html isin %GetFile.var) {
$iif($dialog(M_D),did -a M_D 5 Bad or Missing File!!)
.timer 1 4 $!iif($dialog(M_D),did -a M_D 5,noop)
sockclose $sockname
return
}
if (%GetFile.var == $null) {
sockmark $sockname $puttok($sock($sockname).mark,1,5,32)
if ($dialog($sockname)) {
did -a $sockname 1 $gettok($sock($sockname).mark,4,32) $bytes($gettok($sock($sockname).mark,7,32),m).suf
}
}
}
else {
sockread &GetFile
set %GetFile.done $calc(%GetFile.Done + $bvar(&GetFile,0))
if ($isdir($gettok($sock($sockname).mark,1,32))) {
bwrite $qt($gettok($sock($sockname).mark,1,32) $+ $gettok($sock($sockname).mark,4,32)) -1 -1 &GetFile
if ($file($gettok($sock($sockname).mark,1,32) $+ $gettok($sock($sockname).mark,4,32)).size == $gettok($sock($sockname).mark,7,32)) {
if ($dialog($sockname)) {
did -a $sockname 2 ||||||||||||||||||||||||||||||||||||||||
did -a $sockname 4 100 $+ %
did -a $sockname 1 Download Complete $gettok($sock($sockname).mark,1,32) $+ $gettok($sock($sockname).mark,4,32) $gettok($sock($sockname).mark,7,32)
dialog -x $sockname
}
sockclose $sockname
}
if ($round($calc($file($gettok($sock($sockname).mark,1,32) $+ $gettok($sock($sockname).mark,4,32)).size / $gettok($sock($sockname).mark,7,32) * 100),0) == $gettok($sock($sockname).mark,6,32)) {
if ($dialog($sockname)) {
did -a $sockname 4 $gettok($sock($sockname).mark,6,32) $+ %
did -a $sockname 2 ||
sockmark $sockname $puttok($sock($sockname).mark,$calc($gettok($sock($sockname).mark,6,32) + 5),6,32)
}
}
}
else {
mkdir $gettok($sock($sockname).mark,1,32)
bwrite $qt($gettok($sock($sockname).mark,1,32) $+ $gettok($sock($sockname).mark,4,32)) -1 -1 &GetFile
if ($file($gettok($sock($sockname).mark,1,32) $+ $gettok($sock($sockname).mark,4,32)).size == $gettok($sock($sockname).mark,7,32)) {
if ($dialog($sockname)) {
did -a $sockname 1 Download Complete $gettok($sock($sockname).mark,1,32) $+ $gettok($sock($sockname).mark,4,32) $gettok($sock($sockname).mark,7,32)
}
else {
echo -a Download Complete 100%
}
sockclose $sockname
}
if ($round($calc($file($gettok($sock($sockname).mark,1,32) $+ $gettok($sock($sockname).mark,4,32)).size / $gettok($sock($sockname).mark,7,32) * 100),0) == $gettok($sock($sockname).mark,6,32)) {
if ($dialog($sockname)) {
did -a $sockname 4 $gettok($sock($sockname).mark,6,32) $+ %
did -a $sockname 2 ||
sockmark $sockname $puttok($sock($sockname).mark,$calc($gettok($sock($sockname).mark,6,32) + 5),6,32)
}
}
}
}
}
On *:SockWrite:GetFile*: {
if ($sockerr) {
echo -a Download has failed badly - $sockerr
halt
}
}
alias -l Downloader {
if (!$dialog($1)) { dialog -md $1 mIRC_Downloader }
else { dialog -v $1 mIRC_Downloader }
}
On *:Dialog:GetFile*:Sclick:3: {
if ($gettok($sock($dname).mark,1,32)) {
dialog -x $dname
.remove $+($gettok($sock($dname).mark,1,32),$gettok($sock($dname).mark,4,32))
sockclose $sockname
}
}
On *:Dialog:GetFile*:Sclick:5: { dialog -x $dname }
On *:Dialog:GetFile*:init:*: {
did -a $dname 1 Found file $gettok($sock($dname).mark,1,32) $+ $gettok($sock($dname).mark,4,32)
did -a $dname 4 0 $+ %
}
dialog -l mIRC_Downloader {
title "mIRC Downloader"
size -1 -1 120 48
option dbu
text "", 1, 0 0 121 24, center
edit "", 2, 16 25 82 10, read
button "Cancel", 3, 89 36 29 12
text "", 4, 16 35 25 8
button "Close", 5, 56 36 29 12
}
dialog -l M_D {
title "mIRC Music Downloader"
size -1 -1 200 232
option dbu
text "Artist", 1, 43 6 25 8, center
text "Song Name", 2, 132 6 33 8, center
text "Search Site", 3, 34 26 41 8, center
text "Results", 4, 88 50 25 8, center
text "", 5, 0 208 201 8, center
edit "", 6, 10 15 90 10, autohs
edit "", 7, 104 15 88 10, autohs
combo 8, 10 35 87 10, sort drop
combo 9, 8 60 186 144, sort hsbar vsbar
button "Close", 10, 12 218 37 12, cancel
button "Download", 11, 106 218 37 12
button "Search", 12, 152 218 37 12
button "Play File", 13, 59 218 37 12
text "Page Number", 14, 133 26 33 8
combo 15, 105 35 88 10, drop
}
On *:Dialog:M_D:edit:6-7: { did -rac $dname 15 1 }
On *:Dialog:M_D:init:*: {
did -ac $dname 8 www.kohit.net
did -a $dname 8 www.dilandau.com
did -ac $dname 15 1
}
On *:Dialog:M_D:Sclick:8,11-13,15: {
if ($did == 8) {
did -r $dname 9,15
did -ac $dname 15 1
}
if ($did == 12) || ($did == 15) {
if ($did($dname,6).text) || ($did($dname,7).text) {
if ($did($dname,8).seltext == www.kohit.net) {
kohit $replace($did($dname,6).text $did($dname,7).text,$chr(32),-) $iif($calc($did($dname,15).seltext - 1),$v1)
}
if ($did($dname,8).seltext == www.dilandau.com) {
dilandau $did($dname,15).seltext $replace($did($dname,6).text $did($dname,7).text,$chr(32),% $+ 20)
}
}
else {
did -a $dname 5 Please Enter a Artist or Song to Search!
.timer 1 4 if ($!dialog($dname)) { did -a $dname 5 }
}
}
if ($did == 11) {
if ($did($dname,9).seltext) {
if ($did($dname,8).seltext == www.kohit.net) {
kohitD $gettok($did($dname,9).seltext,2,7)
}
if ($did($dname,8).seltext == www.dilandau.com) {
var %link $gettok($did($dname,9).seltext,2,7)
getfile %link $iif($gettok($gettok($did($dname,9).seltext,1,7),-1,45),$mkfn($replace($v1,$chr(32),_)),Misc) $mkfn($replace($gettok($nopath(%link),1,46),$chr(32),_,% $+ 20,_))
}
}
else {
did -a M_D 5 Please Select a Song to Download!
.timer 1 4 if ($!dialog($dname)) { did -a $dname 5 }
}
}
if ($did == 13) {
if ($isdir(mircmusic)) { if ($sfile(mircmusic\,mIRC Music Downloader by Ford_Lawnmower)) { run $v1 } }
else { did -a $dname 5 Download some Music first! | .timer 1 4 if ($!dialog($dname)) { did -a $dname 5 } }
}
}
alias -l DidOpen {
dialog $iif($dialog($1),-v,-md) $1 $1
}
menu * {
mIRC Music Downloader:DidOpen M_D
}
;alias to force redirect consistantly
alias -l FRD { return $+($upper($left($1,1)),$lower($right($1,$calc($len($1) - 1)))) }
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
}
if ($calc(%mark2 - %mark) > 960) && ($version < 6.32) { return 0 }
else { return $bvar($1, $iif(%mark > 0,%mark,1), $calc(%mark2 - %mark)).text }
}
alias -l fixchars {
var %fixmatch = $regex($1-,/(&#.*?;)/g), %fixtext = $1-
while (%fixmatch) {
%fixtext = $replace(%fixtext,$regml(%fixmatch),$chr($remove($regml(%fixmatch),&#,;)))
dec %fixmatch
}
return %fixtext
}
;alias by Gummo
alias -l between {
noop $regex($1,/\Q $+ $2 $+ \E(.*?)\Q $+ $3 $+ \E/gi)
return $regml($4)
}
What jonesy44 said :)
I have http://www.hawkee.com/snippet/6250/ <<--- THIS SCRIPT for searching with the bot JDavis.
@Mhz I'll consider adding some folder options on the next re-write.
Sorry there is nothing I can do about the bad links atm. However, at some point, I will be adding more search engines to this script. It's just a matter of finding sites with consistent enough results to be worth adding.
Thank you jeroen :)
Thanks Phoenix- :)
Thanks PATX :)
@GlobalAnomaly It's possible to do that but I don't think it is necessary. A mp3 virus is a real long shot and would need a exploit in your media player to get in. Also the script excludes small files that would most often hold viruses. I addition, all of these files come from servers that are scanned for viruses on a regular basis.
More often than not you will get viruses from P2P.
It's something to think about though :) I might just try and figure out how to do it out of curiosity but I probably won't be adding it to this script.
Thanks for the comment :)
FordLawnmower ... you are absolutely incredible.
This works perfect and I wouldn't want anything changed from it at all.
The search works great and returns so many results, the download bar (which I didn't expect) was great and I downloaded so fast from it. You made a directory for the name and made it play in WMP, which is great.
This script deserves a 10/10.