AllMusic - Coverdownloader 1.2

  • Hallo liebe Community,
    hier mein kleines Tool um sich fehlende Alben Cover zu laden.
    Besonders sinnvoll bei iTunes und Co. weil diese nicht alles finden !
    Schnell und einfach.

    Quellcode:

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Tidy_Stop_OnError=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <INet.au3>
    #include <String.au3>
    #include <ID3.au3>

    [/autoit] [autoit][/autoit] [autoit]

    If (@OSVersion == "WIN_7") Then
    If (@ScriptDir == @DesktopDir) Then
    MsgBox(48, "", "Bitte das Programm nicht auf dem Desktop ausführen.")
    Exit
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ###
    $Form1 = GUICreate("AllMusic - Coverdownloader", 927, 449, 357, 244)
    GUISetBkColor(0x0DDAF9)
    $Background = GUICtrlCreatePic("Images\Background.jpg", 0, 0, 927, 449, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Name = GUICtrlCreateInput("Name", 104, 184, 345, 21)
    $Search = GUICtrlCreateButton("Suchen", 152, 224, 251, 25, $WS_GROUP)
    $Search2 = GUICtrlCreateButton("Cover für ganzes Verzeichnis suchen", 152, 392, 249, 25, $WS_GROUP)
    $Next = GUICtrlCreateButton("Nächstes", 736, 392, 115, 25, $WS_GROUP)
    $Download = GUICtrlCreateButton("Download", 544, 392, 115, 25, $WS_GROUP)
    $Edit = GUICtrlCreateGroup ("", 543, 63, 306, 315)
    $Pic1 = ""
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Search
    If $Pic1 <> "" Then
    GUICtrlDelete ($Pic1)
    EndIf
    $i = "1"
    $Titel = GUICtrlRead ($Name)
    $Link = "http://images.google.de/images?um=1&hl=de&tbs=isch%3A1&sa=1&q="&StringReplace($Titel," ","+")&"+Cover&btnG=Suche&aq=f&oq=&start=0"
    $sSource = __InetGetSource($Link)
    $aPic = StringRegExp($sSource,"(?>href=/imgres\?imgurl=)(.+?)(?>&imgrefurl=)",3)
    InetGet ($aPic[$i], @TempDir&"Cover-"&$Titel&".jpg")
    $Pic1 = GUICtrlCreatePic(@TempDir&"Cover-"&$Titel&".jpg", 544, 72, 305, 305, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetState ($Pic1, $GUI_ONTOP)
    $i = $i+1
    Case $Search2
    $Count = 0
    $PathFolder = FileSelectFolder("Ordner auswählen", "", 4)
    $FolderFileList = _FileListToArray($PathFolder, "*.mp3")
    If IsArray($FolderFileList) = 0 Then
    MsgBox(0, "Fehler", "Es ist kein Lied im Ordner!")
    EndIf
    For $z = 1 To UBound($FolderFileList) - 1
    ConsoleWrite("Suche ID3Tags für " & $FolderFileList[$z])
    $TitelTag = _ID3ReadTag($PathFolder & "\" & $FolderFileList[$z], 1, -1, 1)
    If IsArray($TitelTag) Then
    $Count = $Count + 1
    ConsoleWrite("FOUND")
    $TitelTag = StringSplit($TitelTag[1], "|")
    $TitelTag2 = $TitelTag[UBound($TitelTag) - 1]
    $TitelTag2 = StringReplace($TitelTag2, ".", "")
    $TitelTag2 = StringReplace($TitelTag2, Chr(0), "")
    $Link = "http://images.google.de/images?um=1&hl=de&tbs=isch%3A1&sa=1&q="&StringReplace($TitelTag2, " ", "+")&"+Cover+jpg&btnG=Suche&aq=f&oq=&start=0"
    $sSource = __InetGetSource($Link)
    $aPic = StringRegExp($sSource, "(?>href=/imgres\?imgurl=)(.+?)(?>&imgrefurl=)", 3)
    InetGet($aPic[$z], $PathFolder&"\Cover-"&$TitelTag2&".jpg", 1)
    GUICtrlDelete($Pic1)
    $Pic1 = GUICtrlCreatePic($PathFolder&"\Cover-"&$TitelTag2&".jpg", 544, 72, 305, 305, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    GUICtrlSetState($Pic1, $GUI_ONTOP)
    Else
    ConsoleWrite("NOT FOUND")
    EndIf
    ConsoleWrite(@CRLF)
    Next
    MsgBox(0, "Fertig", "Vorgang erfolgreich ausgeführt! Die Cover sind im selben Ordner wie die Musik."&@CRLF&"Es wurden "&$Count&" von "&UBound($FolderFileList)-1&" Covern gefunden!")
    Case $Next
    GUICtrlDelete ($Pic1)
    InetGet ($aPic[$i], @TempDir&"Cover-"&$Titel&".jpg")
    $i = $i+1
    If $i > UBound($aPic)-1 Then
    $i = "1"
    EndIf
    $Pic1 = GUICtrlCreatePic(@TempDir&"Cover-"&$Titel&".jpg", 544, 72, 305, 305, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetState ($Pic1, $GUI_ONTOP)
    Case $Download
    InetGet ($aPic[$i], @ScriptDir&"\Cover-"&$Titel&".jpg")
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func __InetGetSource($s_URL)
    Local $sString = InetRead($s_URL,1)
    Local $nError = @error, $nExtended = @extended
    Return SetError($nError, $nExtended, BinaryToString($sString))
    EndFunc ;==>__InetGetSource

    [/autoit]

    Changelog:
    1.1
    ----
    Neues Design
    Ein ganzer Ordner kann aktualisiert werden (Cover laden)

    1.2
    ----
    Ein paar kleine Skriptunreinheiten beseitigt!

    ToDo:
    Manche Cover werden geladen nur die Endung bleibt aus.
    Aber z.B iTunes kann damit trotzdem umgehen.

    Bei Lob und Kritik könnt ihr ja eine kleine Antwort da lassen. :thumbup:

  • gute arbeit

    ich benutze selber itunes und deshalb kann ich das gut gebrauchen :thumbup:

    vllt könnte man noch etwas an dem Aussehen ändern aber sonst 1A :)

  • Hi!

    Statt der Msgbox könnte man es ja z.B. folgendermaßen machen:

    [autoit]

    If (@OSVersion == "WIN_7") Then
    If (@ScriptDir == @DesktopDir) Then
    MsgBox(48, "", "Bitte das Programm nicht auf dem Desktop ausführen.")
    Exit
    EndIf
    EndIf

    [/autoit]

    ist natürlich nicht zwingend notwendig, aber verhindert, dass immer die MsgBox erscheint ;)

    Greetz

  • Tolles Skript ;)
    Vielen Dank dafür.
    Könntest du das vielleicht erweitern, dass es automatisch alle Cover aktualisiert, die in einem Verzeichnis liegt ?

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

  • Tolles Skript ;)
    Vielen Dank dafür.
    Könntest du das vielleicht erweitern, dass es automatisch alle Cover aktualisiert, die in einem Verzeichnis liegt ?

    Hey,
    das hab ich jetzt nicht ganz verstanden !
    Also mit "aktualisieren" meinst du ja erneuern.
    Aber Album Cover ändern sich doch nicht.
    Oder?

  • toll wenn man ein verzeichnis angeben könnte und es dann die cover automatisch lädt

  • das mit dem verzeichnissauslesen funktioniert nicht richtig.
    er hat probleme mit dem array...

  • an sich erfüllt es seinen zweck, aber jedoch sehr umständlich..
    es wäre doch viel besser wenn das skript ein cover gefunden hat und fragt ob man es gleich auf das Lied anwenden möchte, also dass man des cover nicht erst selber in iTunes noch reinmachen muss.

  • Hallo PokerFace,

    der von JuraX beschriebene Fehler tritt auf wenn für ein Lieder kein ID3-Tag gefunden wird, du solltest dein Skript daher so abändern:

    Spoiler anzeigen
    [autoit]

    Case $Search2
    $PathFolder = FileSelectFolder("Ordner auswählen", "", 4)
    $FolderFileList = _FileListToArray($PathFolder, "*.mp3")
    _ArrayDisplay($FolderFileList)
    If IsArray($FolderFileList) = 0 Then
    MsgBox(0, "Fehler", "Es ist kein Lied im Ordner!")
    EndIf
    For $z = 1 To UBound($FolderFileList) - 1
    ConsoleWrite("suche ID3Tags für " & $FolderFileList[$z])
    $TitelTag = _ID3ReadTag($PathFolder & "\" & $FolderFileList[$z], 1, -1, 1)
    If IsArray($TitelTag) Then
    ConsoleWrite(" FOUND")
    $TitelTag = StringSplit($TitelTag[1], "|")
    $TitelTag2 = $TitelTag[UBound($TitelTag) - 1]
    $TitelTag2 = StringReplace($TitelTag2, ".", "")
    $TitelTag2 = StringReplace($TitelTag2, Chr(0), "")
    $Link = "http://images.google.de/images?um=1&hl=de&tbs=isch%3A1&sa=1&q=" & StringReplace($TitelTag2, " ", "+") & "+Cover+jpg&btnG=Suche&aq=f&oq=&start=0"
    $sSource = __InetGetSource($Link)
    $aPic = StringRegExp($sSource, "(?>href=/imgres\?imgurl=)(.+?)(?>&imgrefurl=)", 3)
    InetGet($aPic[$z], $PathFolder & "\Cover-" & $TitelTag2 & ".jpg", 1)
    GUICtrlDelete($Pic1)
    $Pic1 = GUICtrlCreatePic($PathFolder & "\Cover-" & $TitelTag2 & ".jpg", 544, 72, 305, 305, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    GUICtrlSetState($Pic1, $GUI_ONTOP)
    Else
    ConsoleWrite(" NOT FOUND")
    EndIf
    ConsoleWrite(@CRLF)
    Next
    MsgBox(0, "Fertig", "Vorgang erfolgreich ausgeführt! Die Cover sind im selben Ordner wie die Musik!")

    [/autoit]

    desweiteren solltest du noch einen Zähler einbauen, wieviele Covers gefunden bzw. nicht gefunden wurden und die MsgBox entsprechend anpassen,

    mfg (Auto)Bert

  • Hallo PokerFace,

    ich habe weiter getestet, es sind auch später noch Fehler möglich, deshalb noch ein Änderungsvorschlag:

    Spoiler anzeigen
    [autoit]

    Case $Search2
    $PathFolder = FileSelectFolder("Ordner auswählen", "", 4)
    $FolderFileList = _FileListToArray($PathFolder, "*.mp3")
    ;_ArrayDisplay($FolderFileList)
    If IsArray($FolderFileList) = 0 Then
    MsgBox(0, "Fehler", "Es ist kein Lied im Ordner!")
    EndIf
    For $z = 1 To UBound($FolderFileList) - 1
    ConsoleWrite("suche ID3Tags für " & $FolderFileList[$z])
    $TitelTag = _ID3ReadTag($PathFolder & "\" & $FolderFileList[$z], 1, -1, 1)
    If IsArray($TitelTag) Then
    If $TitelTag[0] > 0 Then
    $TitelTag = StringSplit($TitelTag[1], "|")
    ;_ArrayDisplay($TitelTag)
    $TitelTag2 = $TitelTag[UBound($TitelTag) - 1]
    If $TitelTag2 <> "" Then
    ConsoleWrite(" FOUND")
    $TitelTag2 = StringReplace($TitelTag2, ".", "")
    $TitelTag2 = StringReplace($TitelTag2, Chr(0), "")
    $Link = "http://images.google.de/images?um=1&hl=de&tbs=isch%3A1&sa=1&q=" & StringReplace($TitelTag2, " ", "+") & "+Cover+jpg&btnG=Suche&aq=f&oq=&start=0"
    $sSource = __InetGetSource($Link)
    $aPic = StringRegExp($sSource, "(?>href=/imgres\?imgurl=)(.+?)(?>&imgrefurl=)", 3)
    InetGet($aPic[$z], $PathFolder & "\Cover-" & $TitelTag2 & ".jpg", 1)
    GUICtrlDelete($Pic1)
    $Pic1 = GUICtrlCreatePic($PathFolder & "\Cover-" & $TitelTag2 & ".jpg", 544, 72, 305, 305, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    GUICtrlSetState($Pic1, $GUI_ONTOP)
    Else
    ConsoleWrite(" NOT FOUND")
    EndIf
    EndIf
    EndIf
    ConsoleWrite(@CRLF)
    Next
    MsgBox(0, "Fertig", "Vorgang erfolgreich ausgeführt! Die Cover sind im selben Ordner wie die Musik!")

    [/autoit]


    du solltest dir den Ordner von FileSelectFolder merken (INI), damit man bei der nächsten Verzeichnissuche sich nicht wieder durch den ganzen Verzeichnisbaum klicken muss,

    mfg (Auto)Bert

  • die tags werden bei mir nicht richtig eingelesen.
    verwend doch die bass.au3 die kann tags lesen schau mal in meiner signatur da verwende ich bass-tags

    JuraX

  • Danke Conan10!
    Stimmt darum kümmer ich mich auch. :thumbup:
    Das sollte dann nicht soo schwer sein.

    Einmal editiert, zuletzt von PokerFace (22. März 2010 um 14:24)