Details zur Person

Wie auch bereits bei der Filmsuche sowie den Filmdetails, muss auch hier natürlich als erstes die Klassendatei eingebunden werden. Um nun Details zu einer Person erhalten zu können, benötigen wir zunächst deren IMDB-ID - wie sie z.B. bei den Filmdetails mitgeliefert wird. Wir gehen hier also davon aus, dass sie bereits bekannt ist.

Allgemeines

Die IMDB-Sites bieten nicht nur massig Informationen zu den Filmen, sondern auch zum "Staff" sind diese so zahlreich, dass sie wiederum auf mehrere Seiten verteilt wurden. Das handelt die IMDB API natürlich in gleicher Weise, wie bereits bei den Filmdetails beschrieben.

Gehen wir für ein Beispiel also davon aus, dass wir zu einer IMDB-Person-ID den Namen, Spitznamen, das Geburtsdatum, die "Mini-Biografie", sowie eine Liste der Filme beziehen wollen, bei der die fragliche Person als Regisseur agierte:

<?php
require_once("class.imdb_person.php"); // Klassendatei einbinden
                                       // Für Moviepilot: class.pilot_person.php
$person = new imdb_person($mid);       // eine Instanz der Klasse erstellen und ID übergeben
                                       // Für Moviepilot: new pilot_person($mid)
$name   = $person->name();             // den Namen erfragen
$birth  = $person->born();             // Geburtsdatum
$nick   = $person->nickname();         // Spitzname
$bio    = $person->bio();              // Array[0..n] an "Mini-Biographien"
$filmo  = $person->movies_director();  // Filme als Regisseur (Array)
?>

Auch hier gilt für einen etwaigen Loop über mehrere IMDB-IDs, dass diese einfach mit $person->setid($newid) gesetzt werden kann (anstatt jedesmal eine neue Instanz der Klasse anzulegen) - sowie dass weitere Methoden sich der API-Referenz entnehmen lassen.

Technischer Hintergrund

Diesen möchten wir auch hier dem interessierten Leser nicht vorenthalten:

Schritt Ausführung
require_once("class.imdb_person.php");Einbindung der Klassendatei - mit impliziertem Einbinden weiterer benötigter Dateien, wie mdb_base.class.php und wiederum implizit von dieser mdb_config.class.php.
new imdb_person($mid);Erstellen einer Instanz der Klasse, sowie initialisieren mit der gewünschten IMDB ID.
$person→name();Es wird auf die "Titelseite" zugegriffen. Da dies der erste Zugriff ist, und die Seite sich auch noch nicht im Cache befindet, schlägt der Request bis zur IMDB Site durch. Die bezogene Seite wird natürlich im Cache abgelegt (sofern dieser aktiviert wurde), und ebenfalls in der Instanz selbst im Speicher gehalten. Hier wird sodann nach dem Namen gesucht, der wiederum in einer internen Variable und schließlich auch in der (lokalen) Variable $name gespeichert wird.
$person→born();Erneuter Zugriff auf die "Titelseite". Da diese noch innerhalb der Instanz gespeichert ist, resultiert dieser jedoch nicht mehr in einem Zugriff auf die IMDB Site (oder den Cache), sondern die "Kopie im Speicher" wird nach dem Geburtsdatum durchsucht - welches dann wiederum in einer Klassenvariable, und schließlich in der lokalen Variable $birth abgelegt wird.
$person→born();Ein erneuter Aufruf dieser Methode an dieser Stelle würde lediglich den in der Klassenvariable abgelegten Wert zurückgeben - kein Zugriff auf die IMDB Site oder den Cache, und auch kein erneutes "Parsen" der "Kopie im Speicher".
$person→nickname();Der Spitzname befindet sich nicht auf der Titelseite - also wird hier erneut eine Seite ("bio") von der IMDB Site geholt, im Cache und einer "Kopie im Speicher" abgelegt, letztere nach dem Spitznamen durchsucht, der wiederum in einer Klassen-Variable sowie der (lokalen) Variable $nick gespeichert wird. Im Prinzip also genau das gleiche wie beim Aufruf für $person->name();, nur für eine andere Seite.
$person→bio();Ähnlich dem ersten Aufruf von $person->born();, da sich die Daten auf der bereits bezogenen "bio" Seite befinden.
$person→movies_director();Hier greifen wir erneut auf die "Titelseite" zu. Da wir diese bereits zuvor im gleichen Lauf abgefragt haben, bedeutet dies auch nur ein erneutes Parsen der "Kopie im Speicher", sowie dem Ablegen des Ergebnisses in einer Klassenvariable sowie der lokalen Variable $filmo.

Wie wir bereits gesehen haben, versucht die API auch hier so effizient wie möglich vorzugehen: Auf die IMDB Site wird nur zugegriffen, wenn es sich nicht vermeiden lässt, und alles wird dynamisch zwischengespeichert.

Last modified by izzy, 04/26/10 20:53:06 (3 months ago)