Seite 2 von 3

Verfasst: Mo 15. Jan 2007, 17:21
von der-domi
Butzemann hat geschrieben:Hab hier ein Script in Perl gefunden.
Bei Fremd-Skripten doch bitte immer die Quelle angeben. Danke!

Verfasst: Mo 15. Jan 2007, 17:25
von Butzemann
der-domi hat geschrieben:
Butzemann hat geschrieben:Hab hier ein Script in Perl gefunden.
Bei Fremd-Skripten doch bitte immer die Quelle angeben. Danke!
http://search.cpan.org/src/STEPANOV/IMD ... DB/Film.pm

bzw.

http://search.cpan.org/~stepanov/IMDB-Film/

Verfasst: Mo 15. Jan 2007, 17:52
von Nasenmann72
So...

habe die class.import.php so geändert, dass alle Schauspieler von der Detail-Seite importiert werden:

Code: Alles auswählen

    var $url;
    var $url2;
    var $buf1;
    var $buf2;
    var $siteBuf;
    var $siteBuf2;

...

    function ofdbimport() {

        if ( !strlen($_GET["importID"]) )
            return -1;

        $this->importID = $_GET['importID'];

        // url to get search result
        $this->url = ret_entities( $this->getLinkToDB( $this->importID ) );      
        // url to get actor details
        $this->url2 =  str_replace("film", "film_detail", $this->url);        

...

           // Schauspieler
            if ( loadFile( $this->url2, $this->siteBuf2, "r" ) >= 0 ) {
              $search = "<td nowrap><font face=\"Arial,Helvetica,sans-serif\" size=\"2\" class=\"Normal\">Darsteller:";
              $search = "<b><i>Darsteller</i></b>";
              $this->buf1 = explode( $search, $this->siteBuf2 );
              $this->buf2 = explode( "</td><td><br> ", $this->buf1[1] );
              $this->buf1 = explode( "</tr>\n</table>\n<br>\n", $this->buf2[0]);
              $this->buf2[0] = str_replace("</a>", ";", $this->buf1[0]);
              $this->buf2[0] = str_replace("&nbsp;", "", $this->buf2[0]);
              $this->buf2[0] = strip_tags($this->buf2[0]);
              $this->buf1 = explode ( ";", $this->buf2[0]);
              $this->varToImport['actors'] = array();
              for ( $i=1; $i<count($this->buf1); $i++ ) {
            	   $this->varToImport['actors'][$i-1] = $this->buf1[$i-1];
              }
            }

Viele Grüße,
Der Nasenmann

Verfasst: Mo 15. Jan 2007, 18:39
von Butzemann
Großartig. Nun hat man auch schön viele Schauspieler.

Mich geht's ja nichts an -weil ich standardmäßig die ofdb benutze-, aber nochmal zur imdb. Hast du da auch ne Lösung parat?

Wäre echt super.

Verfasst: Mo 15. Jan 2007, 19:07
von Nasenmann72
Hi,

ich nutze auch nicht imdb und habe leider momentan keine Zeit mich dem Problem anzunehmen, sorry!

Viele Grüße,
Der Nasenmann

Verfasst: Di 16. Jan 2007, 16:11
von Nasenmann72
Hi,

da es bei den Regisseuren das gleiche Problem geben kann, wie bei den Schauspielern, habe ich die Bestimmung beider zusammengefasst:

Code: Alles auswählen

    var $url;
    var $url2;
    var $buf1;
    var $buf2;
    var $siteBuf;
    var $siteBuf2;

...

    function ofdbimport() {

        if ( !strlen($_GET["importID"]) )
            return -1;

        $this->importID = $_GET['importID'];

        // url to get search result
        $this->url = ret_entities( $this->getLinkToDB( $this->importID ) );
        // url to get actor details
        $this->url2 =  str_replace("film", "film_detail", $this->url);

...

            // Regisseure & Schauspieler
            if ( loadFile( $this->url2, $this->siteBuf2, "r" ) >= 0 ) {
              // Regisseure
			  $search = "<b><i>Regie</i></b>";
              $this->buf1 = explode( $search, $this->siteBuf2 );
              $this->buf2 = explode( "</td><td><br> ", $this->buf1[1] );
              $this->buf1 = explode( "</tr>\n</table>\n<br>\n", $this->buf2[0]);
              $this->buf2[0] = str_replace("</a>", ";", $this->buf1[0]);
              $this->buf2[0] = str_replace("&nbsp;", "", $this->buf2[0]);
              $this->buf2[0] = strip_tags($this->buf2[0]);
              $this->buf1 = explode ( ";", $this->buf2[0]);
              $this->varToImport['regisseure'] = array();
              for ( $i=1; $i<count($this->buf1); $i++ ) {
            	   $this->varToImport['regisseure'][$i-1] = $this->buf1[$i-1];
              }
	      // Schauspieler
                    $search = "<b><i>Darsteller</i></b>";
              $this->buf1 = explode( $search, $this->siteBuf2 );
              $this->buf2 = explode( "</td><td><br> ", $this->buf1[1] );
              $this->buf1 = explode( "</tr>\n</table>\n<br>\n", $this->buf2[0]);
              $this->buf2[0] = str_replace("</a>", ";", $this->buf1[0]);
              $this->buf2[0] = str_replace("&nbsp;", "", $this->buf2[0]);
              $this->buf2[0] = strip_tags($this->buf2[0]);
              $this->buf1 = explode ( ";", $this->buf2[0]);
              $this->varToImport['actors'] = array();
              for ( $i=1; $i<count($this->buf1); $i++ ) {
            	   $this->varToImport['actors'][$i-1] = $this->buf1[$i-1];
              }
            }


Verfasst: Di 16. Jan 2007, 19:51
von Butzemann
Klappt wunderbar. Danke.

Is auch ganz sinnvoll, wenn ich zum Beispiel eine Serie habe:

http://www.ofdb.de/view.php?page=film&fid=89284

Verfasst: Do 5. Jul 2007, 01:06
von zeljko
sagt mal IMDB importe funktionieren garnicht mehr?
(weder über Suche noch ID)

Verfasst: Fr 6. Jul 2007, 00:22
von Butzemann
Das stimmt. Es hat damit zu tun, dass die IMDB vor einiger Zeit ihr Design komplett umgestaltet hat, und sich somit neue Veränderungen für die Filmdatenbank ergeben. Ich würde erst mal empfehlen, auf den OFDB Import auszuweichen, da die Veränderungen der IMDB wohl nicht auf die Schnelle umgesetzt werden können (ich spreche da mal vom domi selber, der meist alles alleine macht).

Ein kleiner Tip (an den domi). Es wäre denkbar auf das alte Design der IMDB zurückzugreifen, welches unter http://former.imdb.com zu erreichen ist. (als Zwischen -bzw. Übergangslösung)

Zum Beispiel: http://former.imdb.com/title/tt0327162/

Verfasst: Mo 9. Jul 2007, 18:11
von der-domi
Butzemann hat geschrieben:Ein kleiner Tip (an den domi). Es wäre denkbar auf das alte Design der IMDB zurückzugreifen, welches unter http://former.imdb.com zu erreichen ist.
Super! Das ist sehr hilfreich. Es ist wirklich nervig, dass das Layout ständig geändert wird. Die entsprechenden Änderungen sind alles andere als trivial. Ich muß mich jedesmal neu einarbeiten.

Verfasst: Mi 11. Jul 2007, 23:57
von der-domi
Moin,

testet mal bitte, ob mit den Änderungen alles funktioniert! (Vorallem der IMDB-Import)

Danke!

Verfasst: Do 12. Jul 2007, 12:54
von Butzemann
Die Suche funktoniert schonmal. Beim Import gibt es einen Fehler:

Besonders dieser Abschnitt (Import der Schauspieler):

$tmpBuf = $this->siteBuf;
// get position of </td></tr>
$needle = '<table cellpadding="1" cellspacing="0"><tr><td colspan="4" align="left"><b class="blackcatheader">';
$pos = strrpos($tmpBuf, $needle);
// delete $needle and follow string
$tmpBuf = substr( $tmpBuf, $pos );
$needle = '</table>';
$pos = strpos($tmpBuf, $needle);
// delete $needle and follow string
$tmpBuf = substr( $tmpBuf, 0, $pos );

// Actors
$pattern = '<a href="\/name\/nm[0-9]+\/">|' .
'<\/a><\/td>';
$pattern = "/" . $pattern . "/";
$string_array = preg_split( $pattern, trim($tmpBuf), -1, PREG_SPLIT_NO_EMPTY );

for ( $i=1; $i<count($string_array)-1; $i=$i+2 )
{
$this->varToImport['actors'][] = htmlentities( $string_array[$i] );
}

/*
$search = '<b class="blackcatheader">Cast overview, first billed only: </b></td></tr> ';
$this->buf1 = explode( $search, $this->siteBuf );
$this->buf2 = explode( '<b class="ch">Alternativ:</b>', $this->buf1[1] );
$search = '/">';
$this->buf1 = explode( $search, $this->buf2[0] );
$this->varToImport['actors'] = array();
for ( $i=1; $i<count($this->buf1); ++$i ) {

$this->buf2 = explode( '</a></td>', $this->buf1[$i] );
if ( !substr_count( $this->buf2[0], "http://ia.ec.imdb.com/media/imdb/" ) )
$this->varToImport['actors'][] = htmlentities( urldecode( $this->buf2[0] ) );
}
*/


Hier passiert beim Import nichts. Wenn man aber die Kommentarzeichen im unteren Ende wegnimmt, spuckt er die Schauspieler (Import) folgendermaßen aus (als Beispiel: der Film Zodiac):

<img src="http://ia.imdb.com/media/imdb/01/I/32/45/38t.jpg" width="23" height="32" border="0"></a><br></td><td valign="middle"><a href="/name/nm0350453, Jake Gyllenhaal, <img src="http://ia.imdb.com/media/imdb/01/I/53/31/48t.jpg" width="23" height="32" border="0"></a><br></td><td valign="middle"><a href="/name/nm0749263, Mark Ruffalo, <img src="http://ia.imdb.com/media/imdb/01/I/68/65/12t.jpg" width="23" height="32" border="0"></a><br></td><td valign="middle"><a href="/name/nm0000381, Anthony Edwards, <img src="http://ia.imdb.com/media/imdb/01/I/28/65/12t.jpg" width="23" height="32" border="0"></a><br></td>


Vielleicht kann man die alte Schauspielerimportfunktion weiterhin nutzen und dahingehend umbauen, dass "nur" das Bild vor dem Schauspielernamen eliminiert wird.

Trotzdem erstmal Danke für die Arbeit.

Verfasst: Do 12. Jul 2007, 20:11
von der-domi
Hallo,

es war noch ein kleiner Fehler vorhanden, welcher nun behoben wurde. Lade die neue Datei mit obigen Link nochmals runter.

Dass, viel Quellcode auskommentiert ist, ist schon richtig so! Das ist der Originalcode und macht überhaupt keinen Sinn, wenn du diesen wieder einfügst.

PS: Benutze das nächste mal doch bitte die

Code: Alles auswählen

-Umgebung, um Quellcode zu posten. Das verbessert deutlich die Lesbarkeit

Verfasst: Fr 13. Jul 2007, 15:27
von Butzemann
Und nun schaut's auch wieder bei former.imdb komisch aus:

http://demo.der-domi.de/filmverwaltung/ ... =tt0450278

Verfasst: Mi 18. Jul 2007, 14:16
von Butzemann
Da der domi verhindert ist, versuche ich im Forum mein Glück. Da bisweilen nun auch die neue Veränderung des domi (siehe Post hierdrüber) Fehler aufweist, habe ich nun Veränderungen auf Grundlage der german.imdb.com vorgenommen. Ohne Fehler wird bis auf den Regisseur/Regisseure alles übernommen bzw. importiert. Nur besteht ein geringfügiges Problem:

Wenn ein Film "einen" Regisseur hat, dann funktioniert die Integration, jedoch bei "zweien" nicht. Hier der Quelltext:

Code: Alles auswählen

            // Regisseure
            $search = "<h5>Regisseur:</h5>";
            $this->buf1 = explode( $search, $this->siteBuf );
            $this->buf2 = explode( '</div>', $this->buf1[1] );
            $search = '/">';
            $this->buf1 = explode( $search, $this->buf2[0] );
            $this->varToImport['regisseure'] = array();
            for ( $i=1; $i<count($this->buf1); ++$i ) {
                
                $this->buf2 = explode( '</a>', $this->buf1[$i] );
                $this->varToImport['regisseure'][$i-1] = htmlentities( urldecode( $this->buf2[0] ) );
            }


Das Problem ist, dass im Quelltext (german.imdb) bei "einem" Regisseur die Zeile mit </a> endet, bei "zweien" aber ein Umbruch hinzugefügt wird: <br/>

Wer Ratschläge oder sogar eine Lösung aufbietet, dem wäre ich sehr verbunden.