_Lyrics_Search_Engine UDF: Schnelle Songtext Suche

  • Du wolltest schon immer schnell nach Songtexten suchen? Ja? Dann genau das richtige für dich!

    Im Beispiel könnt ihr eine Datei öffnen, die ID3 UDF von "Wayfarer" liegt dabei.
    Und danke an prograndy für dessen urlencode Funktion ;)

    Die Grund Funktion:

    Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <Array.au3>

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

    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _Lyrics_Search_Engine
    ; Description ...: Fast Songtext Search!
    ; Syntax ........: _Lyrics_Search_Engine($iSong, $iArtist, $oHTTP)
    ; Parameters ....:
    ; $iSong - The Title of the Song
    ; $iArtist - The Artist
    ; $oHTTP - Object Reference of an opened HTTP Connection
    ; Return values .:
    ; Success: The Songtext
    ; Failure: @ERROR
    ; -1: Not found
    ; -2: Couldn't get Array (Lyrics)
    ; -3: Couldn't get Array (Characters)
    ; -4: Couldn't convert Characters to String
    ; Author ........: StevenX (Stefan Blagojevic)
    ; ===============================================================================================================================

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

    Func _Lyrics_Search_Engine($iSong,$iArtist,$oHTTP)
    $iSong = _URIEncode($iSong)
    $iArtist = _URIEncode($iArtist)
    ;~ GET URL READY PARAMETERS

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

    ;~ SEARCH AFTER LYRICS
    $request = 'http://lyrics.wikia.com/api.php?artist='&$iArtist&'&song='&$iSong
    $oHTTP.Open("GET", $request, False)

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

    $oHTTP.Send()
    $oReceived = $oHTTP.ResponseText

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

    $sURL = _StringBetween($oReceived,'<li><strong>url: </strong>','</li><li><strong>page_namespace: </strong>0</li>')
    ;~ GET WHOLE LYRICS URL

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

    If IsArray($sURL) = false Then
    SetError(-1)
    Return 0
    EndIf

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

    $oHTTP.Open("GET", $sURL[0], False)
    $oHTTP.Send()

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

    $oReceived = $oHTTP.ResponseText
    $aData = _StringBetween($oReceived,'c()}:r.onload=c;s.parentNode.insertBefore(r,s)};}})();</script>','<!--')

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

    If IsArray($aData) = false Then
    SetError(-2)
    Return 0
    EndIf

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

    $sData = StringReplace($aData[0],'<br />','&#10;')
    $aCHR = _StringBetween($sData,'&#',';')

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

    If IsArray($aCHR) = false Then
    SetError(-3)
    Return 0
    EndIf

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

    $sLyric = ""

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

    For $i = 0 to (UBound($aCHR) - 1)

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

    $sLyric = $sLyric & ChrW($aCHR[$i])

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

    Next

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

    If $sLyric = "" Then
    SetError(-4)
    Return 0
    Else
    Return($sLyric)
    EndIf

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

    EndFunc ;==> _Lyrics_Search_Engine

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

    ;~ Copyright: Prog@ndy
    Func _URIEncode($sData)
    ; Prog@ndy
    Local $aData = StringSplit(BinaryToString(StringToBinary($sData,4),1),"")
    Local $nChar
    $sData=""
    For $i = 1 To $aData[0]
    ; ConsoleWrite($aData[$i] & @CRLF)
    $nChar = Asc($aData[$i])
    Switch $nChar
    Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
    $sData &= $aData[$i]
    Case 32
    $sData &= "+"
    Case Else
    $sData &= "%" & Hex($nChar,2)
    EndSwitch
    Next
    Return $sData
    EndFunc

    [/autoit]

    Im Dateianhang findet ihr alle Dateien :D

    In der ZIP:
    ID3_v3.4.au3
    _Lyrics_Search_Engine-example.au3
    _Lyrics_Search_Engine.au3

    Steve

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!

    2 Mal editiert, zuletzt von Stevenx (18. Dezember 2014 um 13:00) aus folgendem Grund: Neue Version \(0.0)/

  • Hallo!

    Die vorige Version von lyricsnmusic.com war fehlerhaft, da die Website nach mehreren Aufrufen geblockt hat.

    Die derzeitige Version benutzt jetzt Lyrics.Wikia.com, die mMn eine bessere API aufweist.
    Außerdem ist jetzt ein besserer Error Handler eingebaut.

    Viel Spaß damit!

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!