mIRC Lyrics Finder

By Dani_l11 on Mar 12, 2011

Here it is: the mIRC Lyrics Finder.

Image

You can open it by typing /lyrics or right mouse click -> Lyrics.
It currently searches two site: http://songteksten.net and http://alivelyrics.com. I'm planning on adding more later.

Features:
-Easy lyrics search
-100% Result if correct title and artist are supplied (and lyrics is on website)
-Small algorithm to make sure you always get the best lyrics match
-Toggling between auto select of the lyrics and manual
-Saving lyrics
-Loading lyrics
-Easy clipboard function
-Progress of the search is visible
-If the lyrics loaded isn't the correct one, you can try the next one (Next lyrics button)

Feedback and/or comments are appreciated :)

Added another website! Alivelyrics.com.

Update:
It will now search songteksten.net, and if it's not on that site it will check alivelyrics.com!

dialog lyrics {
  title "Lyrics Finder by Dani l11"
  size -1 -1 218 251
  option dbu
  text "Status:", 1, 3 240 21 10
  edit "", 2, 8 11 198 172, multi return vsbar
  text "Displaying:", 3, 9 2 28 8
  text "None", 4, 38 2 151 8
  button "Copy lyrics to clipboard", 5, 8 184 63 10
  button "Save this lyrics", 6, 73 184 51 10
  check "Automatically save found lyrics", 7, 128 185 86 9
  button "Find!", 8, 165 198 38 11
  edit "", 9, 48 210 111 10
  box "Find lyrics", 10, 4 194 210 42
  text "Song name:", 11, 8 211 37 8
  text "Artist/Band:", 12, 8 221 36 8
  edit "", 13, 48 221 111 10
  text "", 14, 26 240 184 10
  button "Load Lyrics", 15, 165 222 38 11, multi
  button "Next lyrics", 16, 165 210 38 11
  list 17, 193 -3 17 15, hide size
  check "Automatically select lyrics from webpage", 23, 8 201 115 8
  list 18, 195 -1 17 15, hide size
  list 19, 197 1 17 15, hide size
  list 20, 199 3 17 15, hide size
  list 21, 201 5 17 15, hide size
  list 22, 201 5 17 15, hide size
}
on *:dialog:lyrics:close:0:{
  if ($dialog(selsong)) dialog -x selslong selsong
  sockclose lyric*
}
on *:dialog:lyrics:sclick:15:{
  var %p = $sfile(*.txt,Select Lyrics,Select) 
  if (lyrics !isin %p) did -ra lyrics 14 Please select a valid lyrics!
  else {
    var %x = $remove(%p,$mircdir)
    did -ra lyrics 4 $remove(%p,$mircdir,lyrics\,.txt)
    did -r lyrics 14
    did -r lyrics 2
    var %y = 1
    while ($lines(%p) >= %y) {
      did -a lyrics 2 $read(%p,%y) $+ $crlf
      inc %y
    }
  }
} 

on *:dialog:lyrics:init:0:{
  if (!$finddir($mircdir,lyrics,0)) { mkdir lyrics
    writeini lyrics\settings.ini settings autoselect ON
    writeini lyrics\settings.ini settings autosave OFF
  echo -a Thanks for using Lyrics Finder by Dani l11. }
  did -f lyrics 9
  if ($readini(lyrics\settings.ini,settings,autosave))  did -c lyrics 7
  if ($readini(lyrics\settings.ini,settings,autoselect))  did -c lyrics 23
  else did -b lyrics 16
}
alias lyrics { dialog -md lyrics lyrics }
menu * {
  -
  Lyrics:{  dialog -md lyrics lyrics }
  -
}
on *:dialog:lyrics:sclick:6:{
  if (!$did(lyrics,2)) || (!$did(4)) || ($did(4) == none) halt
  write -c $qt(lyrics\ $+ $did(4) $+ .txt)
  var %x = 1
  while (%x <= $did(lyrics,2).lines) {
    write -n $qt(lyrics\ $+ $did(4) $+ .txt) $did(lyrics,2,%x) $+ $crlf
    inc %x
  }
  run $qt(lyrics\ $+ $did(4) $+ .txt)
}
on *:dialog:lyrics:sclick:7:{
  if ($did(7).state)  writeini lyrics\settings.ini settings autosave ON
  else remini lyrics\settings.ini settings autosave off
}
on *:dialog:lyrics:sclick:23:{
  did -b lyrics 16
  if ($did(23).state) { writeini lyrics\settings.ini settings autoselect ON
  did -e lyrics 16 }
  else remini lyrics\settings.ini settings autoselect off
}
on *:dialog:lyrics:sclick:5:{
  var %x = 1,%z
  while (%x <= $did(lyrics,2).lines) {
    var %z = %z $+ $did(2,%x) $+ $crlf
    inc %x
  }
  clipboard %z
}
on *:dialog:lyrics:sclick:16:{
  if ($sock(lyrics)) halt
  if (%lysn != $did(9)) || (%lysa != $did(13)) { did -ra $dname 14 Error. Use the 'Find Lyrics' button to search. | halt }
  unset %lylist
  did -ra lyrics 14 Connecting to Songteksten.net
  sockopen lyricssongteksten songteksten.net 80
}
on *:dialog:lyrics:sclick:8:{
  if ($sock(lyrics*)) sockclose lyrics*
  if (!$did(9)) { did -ra $dname 14 Error. Please fill in a songname. | halt }
  if ($len($did(9)) <= 2) { did -ra $dname 14 Error. Songname has to be atleast 3 characters. | halt }
  set %lysn $did(9)
  set %lysa $did(13)
  unset %lylist
  unset %npl
  set %songsite 1
  if ($dialog(selsong)) dialog -x selsong selsong
did -r lyrics 17-22
  unset %cp
  did -ra lyrics 14 Connecting to Songteksten.net
  sockopen lyricssongteksten songteksten.net 80
}

on *:sockopen:lyricsalivelyrics:{
  if (!$dialog(lyrics)) { sockclose $sockname | halt }
  unset %lylist
  Sockwrite -nt $sockname GET $iif(%npl,%npl,/cgi-bin/aseek.cgi?q= $+ $replace(%lysn,$chr(32),+)) HTTP/1.1
  sockwrite -nt $sockname Host: search.alivelyrics.com
  sockwrite -nt $sockname $crlf
  unset %npl
}
on *:sockread:lyricsalivelyrics:{
  if (!$dialog(lyrics)) { sockclose $sockname | halt }
  if ($sockerr) { did -ra lyrics 14 Sockerror: $sockerr | sockclose $sockname | halt }
  var %s
  sockread %s
  if (<p>Try to compose less restrictive search query or check spelling. == %s) { did -ra lyrics 14 Lyrics not found | sockclose $sockname | halt }
  if (<a href="http://www.alivelyrics.com/* iswm %s) {
    if (*http://www.alivelyrics.com/*/*/*.html* !iswm %s) { did -ra lyrics 14 Alivelyrics.com - Lyrics didn't match format | halt }
    var %ar = $gettok($remove(%s,http://),3,47)
    var %sn = $remove($gettok($gettok(%s,2,34),5,47),.html)
    var %sli = $gettok(%s,2,34)
    if ($did(lyrics,23).state) {
      if (%lysa) {
        if (%ar isin $remove(%lysa,$chr(32))) || ($remove(%lysa,$chr(32)) isin %ar) {
          if ($remove(%lysn,$chr(32)) == %sn) did -a lyrics 17 %sli
          if ($remove(%lysn,$chr(32)) isin %sn) did -a lyrics 18 %sli
        }
      }
      if (!%lysa) {
        if ($remove(%lysn,$chr(32)) == %sn) did -a lyrics 17 %sli
        elseif ($remove(%lysn,$chr(32)) isin %sn) did -a lyrics 18 %sli
      }
      if ($did(lyrics,17,1)) goto lycfound 
    }
    else {
      did -a lyrics 20 $remove($htm(%s),lyrics)
      did -a lyrics 21 %sli
    }
    did -ra lyrics 14 Alivelyrics.com - Possible lyrics found. Total possible lyrics found: $calc($did(lyrics,17).lines + $did(lyrics,18).lines + $did(lyrics,19).lines) $+ .
  }
  if ($htm(%s) == next || %s == </TR></TABLE> || </div> <!-- end of right --> == %s) && (%lylist) {
    if ($htm(%s) == next) var %np = $remove($gettok(%s,4,34),amp;)
    did -ra lyrics 14 Alivelyrics.com - End of lyrics list. Selecting lyrics.
    var %x = 19,%z
    while (%x >= 17) {
      if ($did(lyrics,%x).lines) var %z = $calc(%z + $v1)
      dec %x
    }
    sockclose $sockname
    if ($did(lyrics,23).state) || (%z == 1) {
      :lycfound
      if ($sock($sockname)) sockclose $sockname
      var %x = 19
      while (%x >= 17) {
        if ($did(lyrics,%x,1)) { var %bl = $v1 | did -d lyrics %x 1 }
        dec %x
      }
      if (!%bl) { did -ra lyrics 14 Alivelyrics.com - No lyrics found. Moving to next $iif(!%np,lyricssite,page of Alivelyrics.com) $+ .
        if (%np) { set %npl $remove(%np,http://search.alivelyrics.com)
          unset %lylist
          sockopen lyricsalivelyrics search.alivelyrics.com 80        
        }
        else {
          did -ra lyrics 14 Lyrics not found.
        }
      }
      else {
        did -ra lyrics 14 Lyrics found. Opening lyrics page.
        sockopen lyricsalivelyrics2. $+ %bl www.alivelyrics.com 80
      }
    }
    else {
      if (%np) set %npl %np
      dialog -mn selsong selsong
    }
    halt
  }
  if (<td><b>1.</b></td> == %s || </TR></TABLE> == %s) { set %Lylist alivelyrics }
  did -ra lyrics 14 Alivelyrics.com - Loading page.
}
on *:sockopen:lyricsalivelyrics2.*:{
  if (!$dialog(lyrics)) { sockclose $sockname | halt }
  Sockwrite -nt $sockname GET $gettok($remove($sockname,http://www.alivelyrics.com),2-,46) HTTP/1.1
  sockwrite -nt $sockname Host: www.alivelyrics.com
  sockwrite -nt $sockname $crlf
}
on *:sockread:lyricsalivelyrics2.*:{
  if (!$dialog(lyrics)) { sockclose $sockname | halt }
  var %s
  sockread %s
  if ($did(lyrics,14) == Alivelyrics.com - Lyrics found. Filtering lyrics.) && ($remove(%s,$chr(32),-,_,',`,$chr(44),.,!,?,#) isalpha) did -ra lyrics 14 Alivelyrics.com - Lyrics found. Writing lyrics.
  if (Alivelyrics.com - Lyrics found. Writing lyrics. == $did(lyrics,14)) {
    if (</pre> == %s) { sockclose $sockname | did -r lyrics 14 | halt }
    did -a lyrics 2 $rt($remove(%s,<br />,<div id="social">)) $crlf
    ;if (%s == $null) did -a lyrics 2 $crlf
    if ($did(lyrics,7).state) { 
      write -n $qt(lyrics\ $+ $did(lyrics,4) $+ .txt) $rt($remove(%s,<br />,<div id="social">)) $+ $crlf
      ;if (%s == $null) write -n $qt(lyrics\ $+ $did(lyrics,4) $+ .txt) $crlf
    }
  }
  if (*<h1>*</h1>* iswm %s) {
    did -ra lyrics 14 Alivelyrics.com - Lyrics page loaded. Writing artist and songname.
    var %ds = $htm(%s)
    var %s 
    sockread %s
    var %s = $remove(%s,* &nbsp;)
    did -ra lyrics 4 $remove(%ds,lyrics) - $iif($gettok($htm(%s),2,46),$v1,$htm(%s))
  }
  if (<pre class="lyrics"> == %s)  {
    did -ra lyrics 14 Alivelyrics.com - Lyrics found. Filtering lyrics.
    did -r lyrics 2
    if ($did(lyrics,7).state) write -c $qt(lyrics\ $+ $htm(%s) $+ .txt)
  }
}
on *:sockopen:lyricssongteksten:{
  if (!$dialog(lyrics)) { sockclose $sockname | halt }
  Sockwrite -nt $sockname GET $iif(%npl,%npl,/search/results.html?q= $+ $replace(%lysn,$chr(32),+) $+ &type=title) HTTP/1.1
  sockwrite -nt $sockname Host: songteksten.net
  sockwrite -nt $sockname $crlf
  unset %npl
}

on *:sockread:lyricssongteksten:{
  if (!$dialog(lyrics)) { sockclose $sockname | halt }
  if ($sockerr) { did -ra lyrics 14 Sockerror: $sockerr | sockclose $sockname | halt }
  var %s
  sockread %s
  if (%Lylist) {
    did -ra lyrics 14 Songteksten.net - List of lyrics on page found.
    if (http://songteksten.net/lyric/ isin %s) {
      var %sn = $htm(%s)
      var %sli = $gettok($gettok(%s,2,62),2,34)
      var %x = 1
      while ($did(lyrics,22,%x)) {
        if (%sli == $did(lyrics,22,%x)) halt
        inc %x
      }
      var %s
      sockread %s
      if ($did(lyrics,23).state) {
        if (%lysa) {
          if ($htm(%s) isin %lysa) || (%lysa isin $htm(%s)) {
            if (%lysn == %sn) did -a lyrics 17 %sli
            if (%lysn isin %sn) did -a lyrics 18 %sli
            did -a lyrics 19 %sli
          }
        }
        if (!%lysa) {
          if (%lysn == %sn) did -a lyrics 17 %sli
          else did -a lyrics 18 %sli
        }
        if ($did(lyrics,17,1)) goto lycfound 
      }
      else {
        did -a lyrics 20 $htm(%s) - %sn 
        did -a lyrics 21 %sli
      }
      did -ra lyrics 14 Songteksten.net - Possible lyrics found. Total possible lyrics found: $calc($did(lyrics,17).lines + $did(lyrics,18).lines + $did(lyrics,19).lines) $+ .
    }
  }
  if (<!-- total view tracking --> == %s) { sockclose $sockname | nextsite | halt }
  if (*<strong>*</strong>* iswm %s || </p><table border="0" width="100%"> == %s) && (%lylist) {
    var %s
    sockread %s
    if ($htm(%s) isnum) var %np = $remove($remove($gettok($gettok(%s,1,62),2,34),http://songteksten.net),amp;)
    did -ra lyrics 14 Songteksten.net - End of lyrics list. Selecting lyrics.
    var %x = 19,%z
    while (%x >= 17) {
      if ($did(lyrics,%x).lines) var %z = $calc(%z + $v1)
      dec %x
    }
    sockclose $sockname
    if ($did(lyrics,23).state) || (%z == 1) {
      :lycfound
      if ($sock($sockname)) sockclose $sockname
      var %x = 19
      while (%x >= 17) {
        if ($did(lyrics,%x,1)) { var %bl = $v1 | did -d lyrics %x 1 }
        dec %x
      }
      if (!%bl) { did -ra lyrics 14 Songteksten.net - No lyrics found. Moving to $iif(!%np,Alivelyrics.com,next page of Songteksten.net) $+ .
        if (%np) { set %npl %np
          unset %lylist
          sockopen lyricssongteksten songteksten.net 80        
        }
        else {
          nextsite
        }
      }
      else {
        did -ra lyrics 14 Lyrics found. Opening lyrics page.
        sockopen lyricssongteksten2. $+ %bl songteksten.net 80
      }
    }
    else {
      if (%np) set %npl %np
      dialog -mn selsong selsong
    }
    halt
  }
  if (<th>Titel</th> isin %s) { 
    var %s
    sockread %s
    if (<th>Artiest</th> isin %s) {
      did -ra lyrics 14 Songteksten.net - List of lyrics on page found.
      set %Lylist found
    }
  }
  did -ra lyrics 14 Songteksten.net - Loading site.
}
on *:sockopen:lyricssongteksten2.*:{
  if (!$dialog(lyrics)) { sockclose $sockname | halt }
  Sockwrite -nt $sockname GET $remove($gettok($sockname,2-,46),http://songteksten.net) HTTP/1.1
  sockwrite -nt $sockname Host: songteksten.net
  sockwrite -nt $sockname $crlf
  did -a lyrics 22 $gettok($sockname,2-,46)
}

on *:sockread:lyricssongteksten2.*:{
  if (!$dialog(lyrics)) { sockclose $sockname | halt }
  var %s
  sockread %s
  if ($did(lyrics,14) == Songteksten.net - Lyrics found. Writing lyrics.) {
    if (<div class="button"> isin %s) { did -r lyrics 14 | sockclose $sockname | halt }
    did -a lyrics 2 $rt($remove(%s,<br />,<div id="social">)) $crlf
    if ($did(lyrics,7).state) write -n $qt(lyrics\ $+ $did(lyrics,4) $+ .txt) $rt($remove(%s,<br />,<div id="social">)) $+ $crlf
  }
  if (<div id="body_right"><h1> isin %s) { 
    did -r lyrics 2
    did -ra lyrics 14 Songteksten.net - Lyrics found. Writing lyrics.
    did -ra lyrics 4 $htm(%s)
    if ($did(lyrics,7).state) write -c $qt(lyrics\ $+ $htm(%s) $+ .txt)
  }
}
alias rt return $replace($1-,é,é,’,',$cr,$crlf)
alias htm return $remove($regsubex($regsubex($1-,/(^[^<]+|<.*>|<[^>]+$|&[^#].*;)/gU,),/&#(.*);/gU,$chr(\1)),$chr(9))

dialog Selsong {
  title "Song select"
  size -1 -1 162 33
  option dbu
  combo 1, 2 4 158 157, size hsbar drop
  button "Select this song", 2, 8 17 73 12
  button "Song not in here", 3, 84 17 73 12, multi
}
on *:dialog:selsong:init:0:{
  var %x = 1
  while (%x <= $did(lyrics,20).lines) {
    did -a $dname 1 $did(lyrics,20,%x) 
    inc %x
  }
  did -c $dname 1 1
  .timer 1 0.1 dialog -o $dname $dname
}
on *:dialog:Selsong:sclick:2:{     
  dialog -o lyrics lyrics
  did -ra lyrics 14 Lyrics selected. Opening lyrics page.
  if (%songsite == 1)  sockopen lyricssongteksten2. $+ $did(lyrics,21,$did(1).sel) songteksten.net 80
  if (%songsite == 2) sockopen lyricsalivelyrics2. $+ $did(lyrics,21,$did(1).sel) alivelyrics.com 80 
  dialog -x $dname $dname
}
on *:dialog:selsong:close:*:{
  dialog -o lyrics lyrics
  did -ra lyrics 14 Lyrics not found. Going to next $iif(%npl,page,website) $+ .
  unset %lylist
  did -r lyrics 17-21
  var %z = $gettok(Songteksten.net-Alivelyrics.com,%songsite,45)
  did -ra lyrics 14 Connecting to %z
  if (%npl) thissite
  else nextsite
}
on *:dialog:selsong:sclick:3:{
  dialog -o lyrics lyrics
  did -ra lyrics 14 Lyrics not found. Going to next $iif(%npl,page,website) $+ .
  unset %lylist
  did -r lyrics 17-21
  var %z = $gettok(Songteksten.net-Alivelyrics.com,%songsite,45)
  did -ra lyrics 14 Connecting to %z
  if (%npl) thissite
  else nextsite
  dialog -x $dname $dname
}
alias thissite {
  var %z = Songteksten.net-Alivelyrics.com
  did -ra lyrics 14 Connecting to $gettok(%z,%songsite,45) $+ .
  var %s = $remove($gettok(%z,%songsite,45),.com,.net)
  if (%songsite == 2) sockopen lyrics $+ %s search. $+ $gettok(%z,%songsite,45) 80
  else  sockopen lyrics $+ %s $gettok(%z,%songsite,45) 80
}
alias nextsite {
  inc %songsite
  var %z = Songteksten.net-Alivelyrics.com
  did -ra lyrics 14 Songteksten.net - No lyrics found. Searching Alivelyrics.com.
  var %s = $remove($gettok(%z,%songsite,45),.com,.net)
  if (%songsite == 2) sockopen lyrics $+ %s search. $+ $gettok(%z,%songsite,45) 80
  else sockopen lyrics $+ %s $gettok(%z,%songsite,45) 80
}

Comments

Sign in to comment.
Stewie1k94   -  Sep 10, 2011

excelent, really useful thanks :)

 Respond  
`666   -  Jun 12, 2011

Nice job. :)

 Respond  
Person   -  Jun 10, 2011

Great script :D

 Respond  
Loony   -  Mar 12, 2011

Decent script. Thanks. :)

 Respond  
Dani_l11   -  Mar 12, 2011

Added screenshot and added another site! AliveLyrics.com it is.

 Respond  
Dani_l11   -  Mar 12, 2011

didn't know that was possible :o

changed it

 Respond  
_Dean_   -  Mar 12, 2011

nice one dude 8/10 + like

by the way
just a tip

  did -r lyrics 17
  did -r lyrics 18
  did -r lyrics 19
  did -r lyrics 20
  did -r lyrics 21

why dont you just used

did -r lyrics 17-21
 Respond  
Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.