Details zum Film

Wie schon bei der Filmsuche, müssen wir auch hier zunächst wieder die Klassendatei einbinden. Um nun Details zu einem Film erhalten zu können, benötigen wir als erstes die IMDB-ID des gewünschten Films. Diese lässt sich mit der Filmsuche ermitteln, oder per Copy'n'Paste aus der URL der zugehörigen IMDB Seite entnehmen. Im Folgenden wird davon ausgegangen, dass die IMDB-ID bereits bekannt ist.

Allgemeines

Die IMDB Sites halten im allgemeinen eine ganze Reihe von Details zum Film bereit – so viele, dass sie selbst pro Film über mehrere Seiten verteilt sind. Eine Liste dieser Seiten findet sich auf der "Titelseite".

Gehen wir zunächst einmal davon aus, dass uns folgende Details interessieren: Filmtitel, Erscheinungsjahr, Laufzeit, Rating, und eine Liste von Trailers. Unsere Abfrage sähe dann so aus:

<?php
require_once("class.imdb.php");    // Klassen-Datei einbinden. Für Moviepilot: class.pilot.php
$movie   = new imdb($mid);         // eine Instanz der `imdb` Klasse erstellen,
                                   // und dabei auch gleich die IMDB-ID übergeben.
                                   // Für Moviepilot: new pilot($mid)
$title   = $movie->title();        // den Filmtitel abfragen
$year    = $movie->year();         // das Erscheinungsjahr abfragen
$runtime = $movie->runtime();      // die Laufzeit ermitteln (Filmlänge)
$rating  = $movie->mpaa();         // ein Array[country=>rating] verfügbarer "Ratings" abrufen
                                   // (auch als "FSK" bekannt)
$trailer = $movie->trailers();     // ein Array verfügbarer Trailer holen
?>

Wollen wir das gleich anschließend für (einen) weitere(n) Filme(e) wiederholen, müssen wir nicht jedes Mal eine neue Instanz der IMDB Klasse erstellen: Mit der Methode $movie->setid($newid) können wir die bestehende Instanz anweisen, sich ab sofort um einen anderen Film zu kümmern.

Für weitere Details sei an dieser Stelle auf die API Referenz verwiesen.

Technischer Hintergrund

Dem interessierten Leser sei noch kurz erläutert, was während der einzelnen oben beschriebenen Schritte "im Hintergrund" passiert:

Schritt Ausführung
require_once("class.imdb.php");Die Klassendatei wird eingebunden. Implizit werden auch weitere Klassendateien eingebunden, auf denen diese basiert - hier u.a. mdb_base.class.php, welche wiederum mdb_config.class.php einbindet.
new imdb($mid);Hier wird eine Instanz der Klasse erstellt, und gleich mit der IMDB-ID initialisiert.
$movie->title();Es wird auf die "Titelseite" des Films zugegriffen. Da dies zuvor noch nicht geschehen ist, resultiert dies in einem Zugriff auf der IMDB-Site selbst. Ist der Cache aktiviert, wird die Seite in selbigem zwischengespeichert. Desweiteren wird die Seite zur Auswertung im Speicher gehalten, bis entweder die Ausführung des Skriptes beendet oder aber die Instanz mit unset($imdb); wieder gelöscht wird. Diese "Kopie" im Arbeitsspeicher wird sodann nach dem Filmtitel durchsucht, der wiederum in einer eigenen Variable innerhalb der Instanz abgelegt - und schließlich auch der (lokalen) Variable $title zugewiesen wird.
$movie->year();Es wird wiederum auf die "Titelseite" zugegriffen. Da wir diese sogar noch im Speicher gehalten haben, folgt daraus weder ein Zugriff auf den Cache, noch gar auf die IMDB-Site: Es wird einfach die im Speicher gehaltene Kopie nach dem Erscheinungsjahr durchsucht, welches dann wiederum in einer Klassen-Variable abgelegt und auch in unserer Variable $year gespeichert wird.
$movie->year();Würde dieser Aufruf hier nochmals erfolgen, bedeutete dies lediglich einen "Übertrag" aus der Klassen-Variable in die jeweilige lokale Variable.
$movie->runtime();Die Laufzeit wird ermittelt – analog dem ersten Aufruf von $movie->year().
$movie->mpaa();Wiederum das gleiche, für die "FSK".
$movie->trailers();Hier wird eine neue Seite benötigt: Die Trailer-Information befindet sich nicht mehr auf der Titelseite. Der Ablauf ist hier also analog zu obigem $movie->title() Aufruf.

Das Beispiel zeigt bereits, dass wir so wenig wie möglich auf externe Seiten zugreifen. Selbst spätere Zugriffe auf dieselben Seiten würden zunächst vom Cache abgefangen (sofern er eingeschaltet ist). Außerdem holen wir auch nur die Seiten, die wir für die angefragte Information tatsächlich brauchen – aber das sollte sich von selbst verstehen. Auf diese Weise versucht die IMDB-API bereits von sich aus auf bestmögliche Performance zu achten.

Last modified 10 months ago Last modified on Oct 16, 2013 4:47:55 PM