plugin music-0.4.0-b3 - Liedertexte suchen

  • Hallo VDR'ler,


    ich habe das music-Plugin aktiviert und war positiv überrascht, dass der Download von Lyrics als Menüpunkt vorgesehen ist. Leider funktionierte es nicht und ich habe mich auf die Suche nach der Lösung gemacht, hier im Forum und auch im Web. Zuständig für den Download ist das Script music_getlyrics.py in /etc/vdr/plugins/music/scripts. Im Script wird die Webseite von http://www.lyrc.com.ar/ als Quelle herangezogen. Ich vermute, dass zum Zeitpunkt der Programmierung die genannte Webseite noch keinen Passwort-Zugang besaß. Nun ist es aber so und der Download kann sicher nicht mit dem Script erfolgen, da ich nach Durchsicht des Codes keine Passage gefunden habe, in der das Einloggen auf lyrc.com.ar vorgesehen ist.


    Außerdem habe ich versucht, durch Umstricken des Scripts einen Download bei lyricsmania und lyricsdownload hinzubekommen. Leider klappt das parsen der Seiten nicht und das Script kann den Liedtext nicht aus dem HTML-Code extrahieren. Ich habe einen Teil des Scrits in den Text kopiert, einen Dateianhang mit ...py (thon) kann ich nicht beifügen.



    ##############
    # LYRC.COM.AR
    # http://lyrc.com.ar/tema.php?songname=SONGTITLE&artist=ARTISTNAME
    ##################################################################
    def lyrc():
    found=1
    global nbimage
    if (debug>0):
    print "[Lyrc] Searching on lyrc.com.ar ("+ARTIST+"-"+TITLE+")"
    URL="http://lyrc.com.ar/en/tema1en.php?artist="+string.replace(ARTIST," ","%20")+"&songname="+string.replace(TITLE," ","%20B")
    # URL="http://lyricsmania.com/"+string.replace(TITLE," ","%20")+"_lyrics_"+string.replace(ARTIST," ","%20")+".html
    # URL="http://www.lyricsdownload.com/
    conn = urllib.urlopen(URL)
    data = conn.read()
    conn.close()
    s = re.search("<message>nothing found</message>", data)
    if (s):
    found=0
    if (found==0):
    #Search the links
    f = open (FILENAME+".lyrics.xml", 'w')
    f.close ()
    if (debug>0):
    print "[Lyrc] --> lyrics not found :( ("+ARTIST+"-"+TITLE+")"
    sys.exit(0)
    else:
    # Are there multiple results?
    s = re.findall("<song>", data)
    if (len(s)>1 and FORCE_RETRIEVE==0):
    #YES!
    f = open (FILENAME+".lyrics.xml", 'w')
    # data=string.replace(data,"\n<","<") #You shouldn't go do linefeed like that in XML!!!
    # data=string.replace(data,"&","&amp;")
    f.write (data)
    f.close ()
    if (debug>0):
    print "[Lyrc] --> multiple lyrics found :S ("+ARTIST+"-"+TITLE+")"
    else:
    #NO, get lyrics
    URL="http://lyrc.com.ar/en/tema1en.php?artist="+string.replace(ARTIST," ","%20")+"&songname="+string.replace(TITLE," ","%20")+"&act=1"
    conn = urllib.urlopen(URL)
    data = conn.read()
    conn.close()
    f = open (FILENAME+".lyrics.xml", 'w')
    # data=string.replace(data,"\n<","<") #You shouldn't go do linefeed like that in XML!!!
    # data=string.replace(data,"&","&amp;")
    # data=string.replace(data,"","")
    f.write (data)
    f.close ()


    final_lyrics=parse_lyrics(data)


    final_lyrics=string.replace(final_lyrics,"<br />","")

    if len(final_lyrics)< 2:
    f = open (LYRICSDIR+"temp.lyrics", 'w')
    f.write ("Page for song found, but its empty")
    f.close ()
    print "Page for song found, but its empty"
    else:
    f = open (LYRICSDIR+"temp.lyrics", 'w')
    f.write (final_lyrics)
    f.close ()
    print final_lyrics


    if (debug>0):
    print "[Lyrc] --> lyrics found :) ("+ARTIST+"-"+TITLE+")"





    Wer kann mir da denn weiterhelfen? Ich finde die Funktion echt cool...


    Danke schon 'mal,
    Chris


    P.S. Zum Schluss ist mir noch aufgefallen, dass im Forum ein ":)" oder ":(" in Smilies umgeändert werden.

    Hardware: ASUS A7V266 - AMD Athlon XP 1900+ - 512 MB - System auf SP0802N (IDE) - video1 auf ST3500418AS (SATA) - video2 auf HD154UI (SATA) - TechnoTrend S-2300 premium mit HTPC-Extension
    Software: EasyVDR 0.6.10 - Kernel 2.6.28.9

  • Moin,


    ich moechte dir jetzt net ne komplette Installation vorschreiebn (dafuer ist mir eh zu warm ;)) aber mit anhaegendem Script und Installation von paar Perl-Modulen
    laeuft es.
    Das geht zB. so : http://www.livejournal.com/doc…l.perl_setup.modules.html
    oder eben einfacher mit emerge /apt-get /whatever.......


    Dann muss noch in lyrics.c vom Music-Plugin ein music_getlyrics.py zu music_getlyrics.pl
    geaendert werden.
    Alternativ kannst auch das anhaengende Perlscript nach music_getlyrics.py umbenennen
    und das alte ueberschreiben. Weiss aber net wie der Interpreter reagiert.


    Also kurz :


    lyrics.c :

    Code
    datei = config;
      datei = datei + "/" + langdir;
    //  datei = datei + "/scripts/music_getlyrics.py";
      datei = datei + "/scripts/music_getlyrics.pl";


    music-plugin neu kompilieren


    Anhaengende Datei entpacken und ins Scriptverzeichnis kopieren


    (Perl)Abhaengigkeiten installieren :
    # perl -MCPAN -e shell
    cpan> install Lyrics::Fetcher
    cpan> usw.


    Ein Blick ins Script und waehle aus wo du suchen moechtest :


    ..Liest sich komplizierter als es ist und wenn du schon im Pythonscript rumfummelst , schaetze ich, duerfte das fuer dich nen Klacks sein.......

  • Hallo Morone,


    vielen Dank für die schnelle Antwort. Ich versuch mal zusammenzufassen, was ich im Anschluss an deine Antwort probiert habe.


    1. Perl-Module: Die Installation hat für die meisten Module geklappt, leider nicht für alle (cpan-Variante)


    2. In lyrics.c habe ich die zusätzliche Zeile eingefügt nach deiner Angabe.


    3. Kompilieren: Mist! Wie bei so vielen anderen... Also das Kompilieren hat es echt in sich.


    In /usr/locale/src/VDR/PLUGINS/src gibt es das Verzeichnis music-0.4.0-b3 mit der geänderten lyrics.c und einen symb. Link music auf music-0.4.0-b3


    lrwxrwxrwx 1 root root 14 2010-07-05 11:06 music -> music-0.4.0-b3
    drwxrwxrwx 9 root root 4096 2010-07-05 21:03 music-0.4.0-b3


    Eingabe von make plugins im Verzeichnis /usr/locale/src/VDR ergibt folgende Fehlermeldungen:


    easyVDR:/usr/local/src/VDR# make plugins
    Plugin music:
    make[1]: Entering directory `/usr/local/src/vdr-1.4.7-shutdown-rewrite-extp44/PLUGINS/src/music-0.4.0-b3'
    g++ -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses -march=pentium3 -O2 -fPIC -g -Wall -Woverloaded-virtual -c -D_GNU_SOURCE -DUSE_CHANNELSCAN -DUSE_CMDCTRL -DUSE_CMDSUBMENU -DUSE_CUTTERLIMIT -DUSE_CUTTERQUEUE -DUSE_CUTTIME -DUSE_DDEPGENTRY -DUSE_DOLBYINREC -DUSE_DVBSETUP -DUSE_DVDARCHIVE -DUSE_DVLRECSCRIPTADDON -DUSE_DVLVIDPREFER -DUSE_DVLFRIENDLYFNAMES -DUSE_GRAPHTFT -DUSE_HARDLINKCUTTER -DUSE_IPTV -DUSE_JUMPPLAY -DUSE_LIEMIKUUTIO -DUSE_LIRCSETTINGS -DUSE_LIVEBUFFER -DUSE_LNBSHARE -DUSE_MAINMENUHOOKS -DUSE_SETUP -DUSE_NOEPG -DUSE_OSDMAXITEMS -DUSE_PINPLUGIN -DUSE_PLUGINMISSING -DUSE_PREMIEREEPGFIX -DUSE_ROTOR -DUSE_SETTIME -DUSE_SOURCECAPS -DUSE_SORTRECORDS -DUSE_SWITCHTIMER -DUSE_SYNCEARLY -DUSE_TIMERCMD -DUSE_TIMERINFO -DUSE_VALIDINPUT -DUSE_VOLCTRL -DUSE_WAREAGLEICON -DUSE_YAEPG -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"music"' -DWITH_OSS -DNO_DEBUG -DHAVE_MAGICK -DHAVE_FREETYPE -DHAVE_SNDFILE -DHAVE_VORBISFILE -I/usr/local/src/DVB/include -I/usr/local/src/VDR/include -I/usr/include/ImageMagick -I/usr/include/freetype2 music.c
    music.c:29: error: 'trNOOP' was not declared in this scope
    music.c:33: error: 'trNOOP' was not declared in this scope
    music.c:34: error: 'trNOOP' was not declared in this scope
    music.c:35: error: 'trNOOP' was not declared in this scope
    music.c:41: error: 'trNOOP' was not declared in this scope
    music.c:42: error: 'trNOOP' was not declared in this scope
    music.c: In member function 'virtual bool cPluginMp3::Initialize()':
    music.c:245: error: 'Phrases' was not declared in this scope
    music.c: In member function 'virtual cOsdObject* cPluginMp3::MainMenuAction()':
    music.c:317: error: 'I18nCurrentLanguage' was not declared in this scope
    music.c: In constructor 'cMenuSetupMP3::cMenuSetupMP3()':
    music.c:485: error: no matching function for call to 'cMenuEditStrItem::cMenuEditStrItem(const char*, char [256], int)'
    /usr/local/src/VDR/include/vdr/menuitems.h:115: note: candidates are: cMenuEditStrItem::cMenuEditStrItem(const char*, char*, int, const char*)
    /usr/local/src/VDR/include/vdr/menuitems.h:82: note: cMenuEditStrItem::cMenuEditStrItem(const cMenuEditStrItem&)
    music.c:486: error: no matching function for call to 'cMenuEditStrItem::cMenuEditStrItem(const char*, char [256], int)'
    /usr/local/src/VDR/include/vdr/menuitems.h:115: note: candidates are: cMenuEditStrItem::cMenuEditStrItem(const char*, char*, int, const char*)
    /usr/local/src/VDR/include/vdr/menuitems.h:82: note: cMenuEditStrItem::cMenuEditStrItem(const cMenuEditStrItem&)
    music.c:487: error: no matching function for call to 'cMenuEditStrItem::cMenuEditStrItem(const char*, char [256], int)'
    /usr/local/src/VDR/include/vdr/menuitems.h:115: note: candidates are: cMenuEditStrItem::cMenuEditStrItem(const char*, char*, int, const char*)
    /usr/local/src/VDR/include/vdr/menuitems.h:82: note: cMenuEditStrItem::cMenuEditStrItem(const cMenuEditStrItem&)
    music.c:488: error: no matching function for call to 'cMenuEditStrItem::cMenuEditStrItem(const char*, char [256], int)'
    /usr/local/src/VDR/include/vdr/menuitems.h:115: note: candidates are: cMenuEditStrItem::cMenuEditStrItem(const char*, char*, int, const char*)
    /usr/local/src/VDR/include/vdr/menuitems.h:82: note: cMenuEditStrItem::cMenuEditStrItem(const cMenuEditStrItem&)
    music.c:531: error: no matching function for call to 'cMenuEditStrItem::cMenuEditStrItem(const char*, char [256], int)'
    /usr/local/src/VDR/include/vdr/menuitems.h:115: note: candidates are: cMenuEditStrItem::cMenuEditStrItem(const char*, char*, int, const char*)
    /usr/local/src/VDR/include/vdr/menuitems.h:82: note: cMenuEditStrItem::cMenuEditStrItem(const cMenuEditStrItem&)
    make[1]: *** [music.o] Fehler 1
    make[1]: Leaving directory `/usr/local/src/vdr-1.4.7-shutdown-rewrite-extp44/PLUGINS/src/music-0.4.0-b3'


    *** failed plugins: music


    Ich vermute, dass ich auf vdr-1.6.0 umsteigen muss. Habe es versucht nach folgender Anleitung:
    http://www.easyvdr-forum.de/fo…e35b197bc86cdada2ab41fd38


    Leider startet der VDR nicht mehr, nachdem ich alle symbl. Links verändert habe. Wenigstens konnte ich alle Links wieder rückgängig machen und mein VDR läuft wieder...


    4. Dein Tipp mit dem Überschreiben hat nicht funktioniert.


    Hast du, hat jemand noch einen Tipp?


    Chris


    P.S. Ich kenne mich mit Perl, Python und Konsorten leider gar nicht aus, das "rummfummeln" im Script war ohne Sinn und Verstand...

    Hardware: ASUS A7V266 - AMD Athlon XP 1900+ - 512 MB - System auf SP0802N (IDE) - video1 auf ST3500418AS (SATA) - video2 auf HD154UI (SATA) - TechnoTrend S-2300 premium mit HTPC-Extension
    Software: EasyVDR 0.6.10 - Kernel 2.6.28.9

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!