torels Posted March 25, 2009 Share Posted March 25, 2009 Hi thereI wrote this program a while ago... I thought it would br a good idea to share itPlease feel free to leave suggestions, improvements and bug corrections expandcollapse popup#include <INet.au3> #include <GuiConstantsEx.au3> #include <StaticConstants.au3> #include <GuiTreeView.au3> #include <GuiStatusBar.au3> #include <File.au3> #include <iTunes.au3> $copyright = "Copyright (C) 2009 torels_ <http://torels.altervista.org>" $gui = GUICreate("Lyric Finder 2 - torels_", 600, 534) ;GUISetIcon("shell32.dll", -172) GUISetIcon("shell32.dll", "41") ;menu $menu = GUICtrlCreateMenu("File") $save = GUICtrlCreateMenuItem("&Save", $menu) $print = GUICtrlCreateMenuItem("&Print", $menu) GUICtrlCreateMenuItem("", $menu) $exit = GUICtrlCreateMenuItem("&Exit", $menu) $Discography_mnu = GUICtrlCreateMenu("Discography") $d_txt = GUICtrlCreateMenuItem("Export as &Text", $Discography_mnu) $d_xml = GUICtrlCreateMenuItem("Export as &Xml", $Discography_mnu) $d_html = GUICtrlCreateMenuItem("Export as &Html", $Discography_mnu) $itunes_int = GUICtrlCreateMenu("iTunes") $integrate = GUICtrlCreateMenuItem("iTunes integration", $itunes_int) $refresh = GUICtrlCreateMenuItem("Refresh", $itunes_int) $savelyr = GUICtrlCreateMenuItem("Save Lyric to iTunes", $itunes_int) $help_mnu = GUICtrlCreateMenu("?") $info = GUICtrlCreateMenuItem("Info", $help_mnu) GUICtrlCreateMenuItem("", $help_mnu) $help = GUICtrlCreateMenuItem("torels_", $help_mnu) ;controls $Edit = GUICtrlCreateEdit("", 0, 0, 601, 417) ControlHide($gui,"",$edit) $tv = GUICtrlCreateTreeView(0,0,601,417) $Discography = GUICtrlCreateButton("Discography", 464, 424, 105, 25, 0) $FindLyrics = GUICtrlCreateButton("Find Lyrics", 464, 456, 105, 25, 0) $ArtistInput = GUICtrlCreateInput("", 88, 427, 361, 21) $SongInput = GUICtrlCreateInput("", 88, 459, 361, 21) GUICtrlCreateLabel("Artist Name", 16, 432, 58, 17) GUICtrlCreateLabel("Song Title", 16, 464, 52, 17) $StatusBar = _GUICtrlStatusBar_Create($gui, Default, $copyright) GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case -3 Exit Case $Discography _GUICtrlTreeView_DeleteAll($tv) ControlHide($gui,"",$edit) ControlShow($gui,"",$tv) _XML2TreeView(_Discography(StringReplace(GUICtrlRead($ArtistInput)," ","_"))) If _GUICtrlTreeView_GetCount($tv)<1 Then _GUICtrlTreeView_Add($tv, 0, "Nothing Found!", 2,2) _GUICtrlStatusBar_SetText($StatusBar, "Displaying " & GUICtrlRead($ArtistInput) & "'s Discography") Case $FindLyrics ControlHide($gui,"",$tv) ControlShow($gui,"",$edit) GUICtrlSetData($Edit, _FindLyrics(GUICtrlRead($ArtistInput), GUICtrlRead($SongInput))) _GUICtrlStatusBar_SetText($StatusBar, "Displaying " & GUICtrlRead($SongInput) & "'s Lyrics by " & GUICtrlRead($ArtistInput)) Case $print $printfile = _TempFile(@TempDir, GUICtrlRead($ArtistInput) & "-" & GUICtrlRead($SongInput), ".txt") $fh = FileOpen($printfile, 2) FileWrite($fh, GUICtrlRead($edit)) FileClose($fh) _FilePrint($printfile) Case $save $filename = FileSaveDialog("Save Lyric...", @MyDocumentsDir, "text file (*.txt)", 2 + 16, GUICtrlRead($ArtistInput) & " - " & GUICtrlRead($SongInput)) If Not StringRight($filename, 4) = ".txt" Then $filename &= ".txt" FileOpen($filename, 2) FileWrite($filename, GUICtrlRead($edit)) FileClose($filename) Case $savelyr If BitAND(GUICtrlRead($integrate), $GUI_CHECKED) = $GUI_CHECKED Then _iTunes_Current_LyricsSet(GUICtrlRead($edit)) Else _GUICtrlStatusBar_SetText($StatusBar, "You Must Enable iTunes Integration") EndIf Case $integrate If BitAND(GUICtrlRead($integrate), $GUI_CHECKED) = $GUI_CHECKED Then If ProcessExists("iTunes.exe") Then GUICtrlSetState($integrate, $GUI_UNCHECKED) EndIf Else GUICtrlSetState($integrate, $GUI_CHECKED) _iTunes_Start() $info = _iTunes_Current_GetInfo() GUICtrlSetData($ArtistInput, $info[1]) GUICtrlSetData($SongInput, $info[2]) $info="" EndIf Case $help ShellExecute("http://torels.altervista.org") Case $refresh If ProcessExists("iTunes.exe") Then $info = _iTunes_Current_GetInfo() GUICtrlSetData($ArtistInput, $info[1]) GUICtrlSetData($SongInput, $info[2]) $info="" Else _GUICtrlStatusBar_SetText($StatusBar, "You Must Enable iTunes Integration") EndIf Case $d_txt _Export("txt", GUICtrlRead($ArtistInput)) Case $d_xml _Export("xml", GUICtrlRead($ArtistInput)) Case $d_html _Export("html",GUICtrlRead($ArtistInput)) Case $info MsgBox(64, "Lyric Finder 2", "Lyric Finder 2 powered and developed by torels_"&@CRLF& _ $copyright & @CRLF & _ "Version 2.0.0.0" &@CRLF& _ "For info and/or support mail gab.torels@gmail.com or visit http://torels.altervista.org") Case $exit Exit EndSwitch $selP = _GUICtrlTreeView_GetParentHandle($tv,_GUICtrlTreeView_GetSelection($tv)) $sel = _GUICtrlTreeView_GetText($tv,_GUICtrlTreeView_GetSelection($tv)) If $sel <> GUICtrlRead($SongInput) and $selP<>"" then GUICtrlSetData($SongInput, $sel) EndIf WEnd Func _FindLyrics($artist, $song) If $song="" Then Return _Discography($artist) $out = _INetGetSource("http://lyricwiki.org/api.php?func=getSong&artist="&$artist&"&song="&$song&"&fmt=text") $out = StringReplace($out, @LF,@CRLF) Return $out EndFunc Func _Discography($artist) $xml = _INetGetSource("http://lyricwiki.org/api.php?func=getSong&artist="&StringReplace($artist, " ", "_")&"&song=&fmt=xml") Return _CleanXML($xml) EndFunc Func _CleanXML($xml) ;this removes useless tags $xml = StringReplace($xml, '<?xml version="1.0" encoding="UTF-8"?>'&@LF, "") $xml = StringReplace($xml, "</getArtistResponse>"&@LF,"") $xml = StringReplace($xml, "<getArtistResponse>"&@LF,"") $xml = StringReplace($xml, "<albums>"&@LF,"") $xml = StringReplace($xml, "</albums>"&@LF,"") $xml = StringReplace($xml, "<songs>"&@LF, "") $xml = StringReplace($xml, "</songs>"&@LF, "") $xml = StringRegExpReplace($xml, "<artist>(.*?)</artist>"&@LF,"") $xml = StringRegExpReplace($xml, "<amazonLink>(.*?)</amazonLink>"&@LF, "") $xml = StringReplace($xml, @TAB, "") Return $xml EndFunc Func _XML2TreeView($xmlData) $hImg = _GUIImageList_Create(16,16, 5) _GUIImageList_AddIcon($hImg, "shell32.dll", 157) _GUIImageList_AddIcon($hImg, "shell32.dll", 137) _GUIImageList_AddIcon($hImg, "shell32.dll", 27) _GUICtrlTreeView_SetNormalImageList($tv, $hImg) $split = StringSplit($xmlData, @LF) For $i = 1 to $split[0] If stringleft($split[$i], StringLen("<album>")) = "<album>" Then $itemtxt=StringRegExp($split[$i],'<album>(.*?)</album>',1) $item = _GUICtrlTreeView_Add($tv, 0, _Clean($itemtxt[0]),0,0) ElseIf StringLeft($split[$i], StringLen("<item>")) = "<item>" Then $itemtxt=StringRegExp($split[$i],'<item>(.*?)</item>',1) _GUICtrlTreeView_AddChild($tv, $item, _Clean($itemtxt[0]),1) EndIf Next EndFunc Func _Export($format, $artist) $dg = FileSaveDialog("Save Discography", @ScriptDir, $format&" Files (*."&$format&")",16, $artist & "'s discography."&$format) If not @error And $artist<> "" Then Switch $format Case "txt" $text = _Discography($artist) $text = StringReplace($text, "<album>",@CRLF&"+") $text = StringReplace($text, "<item>", @CRLF&@TAB&">") $text = StringReplace($text, "<year>", " - ") $text = StringRegExpReplace($text, "<(.*?)>", "") FileClose(FileOpen($dg,2)) FileWrite($dg, _Clean($text)) Case "xml" FileClose(FileOpen($dg,2)) FileWrite($dg, _Clean(StringReplace(_Discography($artist), @LF, @CRLF))) Case "html" FileClose(FileOpen($dg,2)) $text = _INetGetSource("http://lyricwiki.org/api.php?func=getSong&artist="&StringReplace($artist, " ", "_")&"&song=&fmt=html") FileWrite($dg, $text) EndSwitch EndIf EndFunc Func _Clean($string) $string = StringReplace($string, "à ", "à") $string = StringReplace($string, "è", "è") $string = StringReplace($string, "ì", "ì") $string = StringReplace($string, "é", "é") $string = StringReplace($string, "ù", "ù") $string = StringReplace($string, "ò", "ò") $string = StringReplace($string, "'", "'") $string = StringReplace($string, "&", "&") return $string EndFuncNote: this script isn't in any way related to the other Lyric Finder on the forumsit requires the itunes udf that can be found here Some Projects:[list][*]ZIP UDF using no external files[*]iPod Music Transfer [*]iTunes UDF - fully integrate iTunes with au3[*]iTunes info (taskbar player hover)[*]Instant Run - run scripts without saving them before :)[*]Get Tube - YouTube Downloader[*]Lyric Finder 2 - Find Lyrics to any of your song[*]DeskBox - A Desktop Extension Tool[/list]indifference will ruin the world, but in the end... WHO CARES :P---------------http://torels.altervista.org Link to comment Share on other sites More sharing options...
ProgAndy Posted March 25, 2009 Share Posted March 25, 2009 (edited) It looks really great. And I have some imrovements for encoding issues: Func _FindLyrics($artist, $song) If $song="" Then Return _Discography($artist) $out = _INetGetSource("http://lyricwiki.org/api.php?func=getSong&artist="&$artist&"&song="&$song&"&fmt=text") $out = StringReplace(_UTF8Decode($out), @LF,@CRLF) Return $out EndFunc Func _Discography($artist) $xml = _INetGetSource("http://lyricwiki.org/api.php?func=getSong&artist="&StringReplace($artist, " ", "_")&"&song=&fmt=xml") Return _CleanXML($xml) EndFunc Func _CleanXML($xml) ;this removes useless tags $xml = _UTF8Decode($xml) $xml = _HTMLDecode($xml) $xml = StringReplace($xml, ... EndFunc Func _UTF8Decode($string) ; Prog@ndy Return BinaryToString(StringToBinary($string),4) EndFunc Func _HTMLDecode($string) ; Prog@ndy Local $data = StringRegExp($string,"&#(\d+);",3) For $i = 1 To UBound($data)-1 $string = StringReplace($string,"&#" & $data[$i] & ";", Chr(Number($data[$i])),1) Next $string = StringReplace($string "&", "&") Return $string EndFunc and remove you _Clean-Func //Edit: if you won't use the iTunes-funcs it will work without itunes UDF. Edited March 25, 2009 by ProgAndy *GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes Link to comment Share on other sites More sharing options...
torels Posted March 25, 2009 Author Share Posted March 25, 2009 YES I LIKE IT! thanks alot great functins Some Projects:[list][*]ZIP UDF using no external files[*]iPod Music Transfer [*]iTunes UDF - fully integrate iTunes with au3[*]iTunes info (taskbar player hover)[*]Instant Run - run scripts without saving them before :)[*]Get Tube - YouTube Downloader[*]Lyric Finder 2 - Find Lyrics to any of your song[*]DeskBox - A Desktop Extension Tool[/list]indifference will ruin the world, but in the end... WHO CARES :P---------------http://torels.altervista.org Link to comment Share on other sites More sharing options...
Beege Posted September 5, 2009 Share Posted September 5, 2009 Got some bad news. According to this letter, LyricWiki API is going away. Which makes this sweet script not work right anymore. Assembly Code: fasmg . fasm . BmpSearch . Au3 Syntax Highlighter . Bounce Multithreading Example . IDispatchASMUDFs: Explorer Frame . ITaskBarList . Scrolling Line Graph . Tray Icon Bar Graph . Explorer Listview . Wiimote . WinSnap . Flicker Free Labels . iTunesPrograms: Ftp Explorer . Snipster . Network Meter . Resistance Calculator Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now