perl: imdb fetching

  • Hallo,
    ich habe mal für das mplayer plugin angefangen ein skript zu schreiben was ein paar infos von imdb besorgen soll um dann eine .summary anzulegen.


    Ich hänge grade bei den genres fest - das können ja unterschiedlich viele sein :(
    Jemand ne elegante Lösung für das Problem?
    Hier der code soweit:


    *gelöscht*

    Server: Seagate Dockstar - Debian Squeeze

    Client: Apple TV 2 / Samsung LExxC650

    OldOne: Debian Etch - Matrox G450 & SkyStar2

    Einmal editiert, zuletzt von uzer ()

  • ja das imdb Modul muß ich mir dann auch mal anschauen, danke!
    Aber ich wollte das mal als kleine fingerübung machen ;)


    Ist hier kein regex hacker der mir helfen kann? :)
    ich verstehe das nicht,

    Code
    if ($sContent =~ /Genre.*\n(.*)(mehr...)/) {
        $genre = $1;
        if ($genre =~ /<a href=.*">(.*)<\/a>/) {
          print "$1";
        }


    damit gibt er mir "Family" aus obwohl das der letzte genre in der Liste ist (Comedy / Animation / Family) !??? Das heißt die anderen parsed er wohl, aber gibt sie nicht aus :(



    Dann wäre hier noch dieses Beispiel mit dem "global" flag, damit müsste man das doch eigentlich lösen können:

    Code
    #!/usr/local/bin/perl -w
    
    
    $t = "-ab-cd-";
    
    
    foreach($t =~ /-[a-z][a-z]-/g) { print "$_ " }


    aber hier wird dann "-ab-" ausgegeben, aber ich dachte gerade durch das /g flag müsste -ab-cd- ausgegeben werden !??


    Help :)

    Server: Seagate Dockstar - Debian Squeeze

    Client: Apple TV 2 / Samsung LExxC650

    OldOne: Debian Etch - Matrox G450 & SkyStar2

  • Zitat

    Original von uzer

    Code
    if ($sContent =~ /Genre.*\n(.*)(mehr...)/) {
        $genre = $1;
        if ($genre =~ /<a href=.*">(.*)<\/a>/) {
          print "$1";
        }


    damit gibt er mir "Family" aus obwohl das der letzte genre in der Liste ist (Comedy / Animation / Family) !??? Das heißt die anderen parsed er wohl, aber gibt sie nicht aus :(


    (Ohne mir die Quellseite jetzt näher angeschaut zu haben ...)


    Du weißt bzw. hast bedacht, dass .* "greedy" ist? Das bedeutet, es "nimmt" sich so viele Zeichen wie möglich. Beispiel: "a.*a" matched bei "ababa" auf den kompletten String, nicht nur auf "aba".


    Verwende mal ".*?" stattdessen oder versuche noch spezifischer zu sein (z.B. eventuell "[^>]*" statt ".*", um nur die Parameter von HTML-Tags zu erwischen und nicht über das ">" hinauszugehen)


    (Zu "greedy" siehe auch "man perlre")


    Zitat

    Dann wäre hier noch dieses Beispiel mit dem "global" flag, damit müsste man das doch eigentlich lösen können:

    Code
    #!/usr/local/bin/perl -w
    
    
    $t = "-ab-cd-";
    
    
    foreach($t =~ /-[a-z][a-z]-/g) { print "$_ " }


    aber hier wird dann "-ab-" ausgegeben, aber ich dachte gerade durch das /g flag müsste -ab-cd- ausgegeben werden !??


    Nach dem ersten Treffer ("-ab-") wird HINTER selbigem weitergesucht, also ab dem "c"! Daher erhältst Du keinen weiteren Treffer.


    Mit "Extended Patterns" (siehe ebenfalls "man perlre") kann man Ausdrücke definieren, die auf Zeichen matchen, diese aber nicht in das Ergebnis mit einbeziehen. Aber auch damit fällt mir spontan keine Lösung ein, die das gewünscht Ergebnis produziert.


    Liefert an der Stelle nicht vielleicht auch ein split(/-/,$t) die gewünschten Daten?

  • ja danke für die Hinweise!
    und split macht dann auch den job :)

    Server: Seagate Dockstar - Debian Squeeze

    Client: Apple TV 2 / Samsung LExxC650

    OldOne: Debian Etch - Matrox G450 & SkyStar2

  • ok, hier mal der code für andere neugierige. funktioniert ganz gut soweit, aber es gibt von film zu film unregelmäßigkeiten, sodass ich doch mal lieber meine Energie auf die imdb Module konzentrieren werden ;)


    *gelöscht*

    Server: Seagate Dockstar - Debian Squeeze

    Client: Apple TV 2 / Samsung LExxC650

    OldOne: Debian Etch - Matrox G450 & SkyStar2

    Einmal editiert, zuletzt von uzer ()

  • na toll, ich mußte gerade feststellen das IMDB::Film die gleichen Probleme hat, wo ich heute angekommen bin ;)
    z.B. wenn im plot ein link erscheint wird dort abgeschnitten (bei mir kommt dann der html code) - das ist ja mist so.

    Server: Seagate Dockstar - Debian Squeeze

    Client: Apple TV 2 / Samsung LExxC650

    OldOne: Debian Etch - Matrox G450 & SkyStar2

  • upsala
    ja sowas hatte ich schon befürchtet.
    Die sagen schon sehr konkret das man das nicht darf. Dann werde ich wohl das release wieder entfernen müssen :(


    Danke für den hinweis.
    mfg

    Server: Seagate Dockstar - Debian Squeeze

    Client: Apple TV 2 / Samsung LExxC650

    OldOne: Debian Etch - Matrox G450 & SkyStar2

  • ich hab aber ziemlich das Gefühl das das IMDB::Film Modul auch von der Webseite parsed. Als ich damit rumgespielt habe ist mir ein Fehler aufgefallen und bei plain Text könnte der nicht auftreten!
    Naja, aber ich geh auf keinen fall ein Risiko mit sowas ein. Schau mir vielleicht mal die ftp Sachen an, aber das ist jetzt schon shice! war ja schon fertig ;)

    Server: Seagate Dockstar - Debian Squeeze

    Client: Apple TV 2 / Samsung LExxC650

    OldOne: Debian Etch - Matrox G450 & SkyStar2

    Einmal editiert, zuletzt von uzer ()

  • Zitat

    Original von uzer
    ich hab aber ziemlich das Gefühl das das IMDB::Film Modul auch von der Webseite parsed. Als ich damit rumgespielt habe ist mir ein Fehler aufgefallen und bei plain Text könnte der nicht auftreten!
    Naja, aber ich geh auf keinen fall ein Risiko mit sowas ein. Schau mir vielleicht mal die ftp Sachen an, aber das ist jetzt schon shice! war ja schon fertig ;)


    Ja, das ist schon schade wenn es da rechtliche Probleme gibt, aber was will man machen. Ist genauso wie bei den ganzen EPG-Programmen. Da darf man auch nicht die Daten ohne Bezahlung nutzen obwohl man prinzipiell ein Browser oder das entsprechende Client-Programm emulieren könnte um die begehrten Daten abzuzapfen.
    Aber wenn du dieses Projekt hier erstmal einfrierst hast du ja Zeit für das Lyric/Coverdownload Projekt ;D
    Gruß
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • ich hab mir gerade die ftp Archive angeschaut :( damit kann man nicht arbeiten, es handelt sich um riesige Listen die komprimiert wurden.
    das "unix command line tool" heißt moviedb - dieses habe ich mir vor längerer Zeit mal installiert, es produziert eine riesige 2GB Datenbank lokal von der dann die imdb informationen bezogen werden können. Das ist mir und den meisten anderen wohl zuviel


    Damit ist ein öffentliches Release in weite Ferne gerückt :(


    Vielleicht schreib ich imdb mal an, und bitte um eine Erlaubnis, das imdb::film Modul wird ja auch tolleriert...

    Server: Seagate Dockstar - Debian Squeeze

    Client: Apple TV 2 / Samsung LExxC650

    OldOne: Debian Etch - Matrox G450 & SkyStar2

Jetzt mitmachen!

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