Thread: imdb link error
View Single Post
  #2  
Old 7th September 2012, 15:17
joeroberts's Avatar
joeroberts joeroberts is offline
BT.Manager Owner
 
Join Date: Jan 2008
United States
Posts: 2,113
Default
here is a updated IMDB
replace imdb/imdb.class.php
PHP Code:
<?php
 
#############################################################################
 # IMDBPHP                              (c) Giorgos Giagas & Itzchak Rehberg #
 # written by Giorgos Giagas                                                 #
 # extended & maintained by Itzchak Rehberg <izzysoft AT qumran DOT org>     #
 # http://www.izzysoft.de/                                                   #
 # ------------------------------------------------------------------------- #
 # This program is free software; you can redistribute and/or modify it      #
 # under the terms of the GNU General Public License (see doc/LICENSE)       #
 #############################################################################

 /* $Id: imdb.class.php,v 1.1 2008/09/21 02:34:43 joerobe Exp $ */

 
require_once (dirname(__FILE__)."/browseremulator.class.php");
 require_once (
dirname(__FILE__)."/imdb_config.php");
 require_once (
dirname(__FILE__)."/imdb_request.class.php");

 
#=================================================[ The IMDB class itself ]===
 /** Accessing IMDB information
  * @package Api
  * @class imdb
  * @extends imdb_config
  * @author Georgos Giagas
  * @author Izzy (izzysoft AT qumran DOT org)
  * @copyright (c) 2002-2004 by Giorgos Giagas and (c) 2004-2008 by Itzchak Rehberg and IzzySoft
  * @version $Revision: 1.1 $ $Date: 2008/09/21 02:34:43 $
  */
 
class imdb extends imdb_config {

 
#---------------------------------------------------------[ Debug helpers ]---
  
function debug_scalar($scalar) {
    if (
$this->debug) echo "<b><font color='#ff0000'>$scalar</font></b><br>";
  }
  function 
debug_object($object) {
    if (
$this->debug) {
      echo 
"<font color='#ff0000'><pre>";
      
print_r($object);
      echo 
"</pre></font>";
    }
  }
  function 
debug_html($html) {
    if (
$this->debug) echo "<b><font color='#ff0000'>".htmlentities($html)."</font></b><br>";
  }

 
#-------------------------------------------------------------[ Open Page ]---
  /** Load an IMDB page into the corresponding property (variable)
   * @method private openpage
   * @param string wt
   */
  
function openpage ($wt) {
   if (
strlen($this->imdbID) != 7){
   echo 
$this->imdbID;
    
$this->debug_scalar("not valid imdbID: ".$this->imdbID."<BR>".strlen($this->imdbID));
    
$this->page[$wt] = "cannot open page";
    return;
   }
   switch (
$wt){
    case 
"Title"       $urlname="/"; break;
    case 
"Credits"     $urlname="/fullcredits"; break;
    case 
"CrazyCredits"$urlname="/crazycredits"; break;
    case 
"Plot"        $urlname="/plotsummary"; break;
    case 
"Taglines"    $urlname="/taglines"; break;
    case 
"Episodes"    $urlname="/episodes"; break;
    case 
"Quotes"      $urlname="/quotes"; break;
    case 
"Trailers"    $urlname="/trailers"; break;
    case 
"Trailer"    $urlname="/video/screenplay"; break;
    case 
"Goofs"       $urlname="/goofs"; break;
    case 
"Trivia"      $urlname="/trivia"; break;
    case 
"Soundtrack"  $urlname="/soundtrack"; break;
    case 
"MovieConnections" $urlname="/movieconnections"; break;
    case 
"ExtReviews"  $urlname="/externalreviews"; break;
    default            :
      
$this->page[$wt] = "unknown page identifier";
      
$this->debug_scalar("Unknown page identifier: $wt");
      return;
   }
   if (
$this->usecache) {
    
$fname "$this->cachedir/$this->imdbID.$wt";
    if ( 
$this->usezip ) {
     if ( (
$this->page[$wt] = @join("",@gzfile($fname))) ) {
      if ( 
$this->converttozip ) {
       @
$fp fopen ($fname,"r");
       
$zipchk fread($fp,2);
       
fclose($fp);
       if ( !(
$zipchk[0] == chr(31) && $zipchk[1] == chr(139)) ) { //checking for zip header
         /* converting on access */
         
$fp = @gzopen ($fname"w");
         @
gzputs ($fp$this->page[$wt]);
         @
gzclose ($fp);
       }
      }
      return;
     }
    } else { 
// no zip
     
@$fp fopen ($fname"r");
     if (
$fp) {
      
$temp="";
      while (!
feof ($fp)) {
     
$temp .= fread ($fp1024);
     
$this->page[$wt] = $temp;
      }
      return;
     }
    }
   } 
// end cache

   
$req = new IMDB_Request("");
   
$url "http://".$this->imdbsite."/title/tt".$this->imdbID.$urlname;
   
$req->setURL($url);
   
$req->sendRequest();
   
$this->page[$wt]=$req->getResponseBody();
   if( 
$this->page[$wt] ){ //storecache
    
if ($this->storecache) {
     
$fname "$this->cachedir/$this->imdbID.$wt";
     if ( 
$this->usezip ) {
      
$fp gzopen ($fname"w");
      
gzputs ($fp$this->page[$wt]);
      
gzclose ($fp);
     } else { 
// no zip
      
$fp fopen ($fname"w");
      
fputs ($fp$this->page[$wt]);
      
fclose ($fp);
     }
    }
    return;
   }
   
$this->page[$wt] = "cannot open page";
   
$this->debug_scalar("cannot open page: $url");
  }

 
#-------------------------------------------------------[ Get current MID ]---
  /** Retrieve the IMDB ID
   * @method imdbid
   * @return string id
   */
  
function imdbid () {
   return 
$this->imdbID;
  }

 
#--------------------------------------------------[ Start (over) / Reset ]---
  /** Setup class for a new IMDB id
   * @method setid
   * @param string id
   */
  
function setid ($id) {
   
$this->imdbID $id;

   
$this->page["Title"] = "";
   
$this->page["Credits"] = "";
   
$this->page["CrazyCredits"] = "";
   
$this->page["Amazon"] = "";
   
$this->page["Goofs"] = "";
   
$this->page["Trivia"] = "";
   
$this->page["Plot"] = "";
   
$this->page["Comments"] = "";
   
$this->page["Quotes"] = "";
   
$this->page["Taglines"] = "";
   
$this->page["Plotoutline"] = "";
   
$this->page["Trivia"] = "";
   
$this->page["Directed"] = "";
   
$this->page["Episodes"] = "";
   
$this->page["Quotes"] = "";
   
$this->page["Trailers"] = "";
   
$this->page["Trailer"] = "";
   
$this->page["MovieConnections"] = "";
   
$this->page["ExtReviews"] = "";

   
$this->akas = array();
   
$this->countries = array();
   
$this->crazy_credits = array();
   
$this->credits_cast = array();
   
$this->credits_composer = array();
   
$this->credits_director = array();
   
$this->credits_producer = array();
   
$this->credits_writing = array();
   
$this->extreviews = array();
   
$this->goofs = array();
   
$this->langs = array();
   
$this->main_comment "";
   
$this->main_genre "";
   
$this->main_language "";
   
$this->main_photo "";
   
$this->main_plotoutline "";
   
$this->main_rating = -1;
   
$this->main_runtime "";
   
$this->main_title "";
   
$this->main_votes = -1;
   
$this->main_year = -1;
   
$this->main_tagline "";
   
$this->moviecolors = array();
   
$this->movieconnections = array();
   
$this->moviegenres = array();
   
$this->moviequotes = array();
   
$this->movieruntimes = array();
   
$this->mpaas = array();
   
$this->plot_plot = array();
   
$this->seasoncount = -1;
   
$this->season_episodes = array();
   
$this->sound = array();
   
$this->soundtracks = array();
   
$this->split_comment = array();
   
$this->split_plot = array();
   
$this->taglines = array();
   
$this->trailers = array();
   
$this->trivia = array();
   
$this->main_trailer "";
  }

 
#-----------------------------------------------------------[ Constructor ]---
  /** Initialize class
   * @constructor imdb
   * @param string id
   */
  
function imdb ($id) {
   
$this->imdb_config();
   
$this->setid($id);
   if (
$this->storecache && ($this->cache_expire 0)) $this->purge();
  }

 
#---------------------------------------------------------[ Cache Purging ]---
  /** Check cache and purge outdated files
   *  This method looks for files older than the cache_expire set in the
   *  imdb_config and removes them
   * @method purge
   */
  
function purge() {
    if (
is_dir($this->cachedir))  {
      
$thisdir dir($this->cachedir);
      
$now time();
      while( 
$file=$thisdir->read() ) {
        if (
$file!="." && $file!="..") {
          
$fname $this->cachedir $file;
      if (
is_dir($fname)) continue;
          
$mod filemtime($fname);
          if (
$mod && ($now $mod $this->cache_expire)) unlink($fname);
        }
      }
    } elseif (!empty(
$this->cachedir)) {
      
$this->debug_scalar("Cache directory (".$this->cachedir.") does not exist - purge aborted.");
    }
  }

 
#-----------------------------------------------[ URL to movies main page ]---
  /** Set up the URL to the movie title page
   * @method main_url
   * @return string url
   */
  
function main_url(){
   return 
"http://".$this->imdbsite."/title/tt".$this->imdbid()."/";
  }

 
#-------------------------------------------[ Movie title (name) and year ]---
  /** Setup title and year properties
   * @method private title_year
   */
  
function title_year() {
    if (
$this->page["Title"] == ""$this->openpage ("Title");
    echo 
$this->openpage ("Title");
    if (@
preg_match("/\<title\>(.*)\((.*)\) - IMDb<\/title\>/",$this->page["Title"],$match)) {
      
$this->main_title $match[1];
      
$this->main_year  $match[2];
    }
  }

  
/** Get movie title
   * @method title
   * @return string title
   */
  
function title () {
    if (
$this->main_title == ""$this->title_year();
    return 
$this->main_title;
  }

  
/** Get year
   * @method year
   * @return string year
   */
  
function year () {
    if (
$this->main_year == -1$this->title_year();
    return 
$this->main_year;
  }

 
#---------------------------------------------------------------[ Runtime ]---
  /** Get general runtime
   * @method private runtime_all
   * @return string runtime complete runtime string, e.g. "150 min / USA:153 min (director's cut)"
   */
  
function runtime_all() {
    if (
$this->main_runtime == "") {
      if (
$this->page["Title"] == ""$this->openpage ("Title");
      if (@
preg_match("/Runtime:\<\/h4\> \n\n(.*?)\n/m",$this->page["Title"],$match))
        
$this->main_runtime $match[1];
    }
    return 
$this->main_runtime;
  }

  
/** Get overall runtime (first one mentioned on title page)
   * @method runtime
   * @return mixed string runtime in minutes (if set), NULL otherwise
   */
  
function runtime() {
    if (empty(
$this->movieruntimes)) $runarr $this->runtimes();
    else 
$runarr $this->movieruntimes;
    if (isset(
$runarr[0]["time"])) return $runarr[0]["time"];
    return 
NULL;
  }

  
/** Retrieve language specific runtimes
   * @method runtimes
   * @return array runtimes (array[0..n] of array[time,country,comment])
   */
  
function runtimes(){
    if (empty(
$this->movieruntimes)) {
      if (
$this->runtime_all() == "") return array();
      if (
preg_match_all("/[\/ ]*((\D*?):|)([\d]+?) min( \((.*?)\)|)/",$this->main_runtime,$matches))
        for (
$i=0;$i<count($matches[0]);++$i$this->movieruntimes[] = array("time"=>$matches[3][$i],"country"=>$matches[2][$i],"comment"=>$matches[5][$i]);
    }
    return 
$this->movieruntimes;
  }

 
#----------------------------------------------------------[ Movie Rating ]---
  /** Setup votes
   * @method private rate_vote
   */
  
function rate_vote() {
    if (
$this->page["Title"] == ""$this->openpage ("Title");
    if(
preg_match("/\<span itemprop=\"ratingValue\">(.*?)\<\/span\>/m",$this->page["Title"],$match)){
      
$this->main_rating $match[1];
    }
    if(
preg_match("/title=\"Users rated this(.*?)\((.*?) votes/ms",$this->page["Title"],$match)){
      
$this->main_votes $match[2];
    }
  }

  
/** Get movie rating
   * @method rating
   * @return string rating
   */
  
function rating () {
    if (
$this->main_rating == -1$this->rate_vote();
    return 
$this->main_rating;
  }

  
/** Return votes for this movie
   * @method votes
   * @return string votes
   */
  
function votes () {
    if (
$this->main_votes == -1$this->rate_vote();
    return 
$this->main_votes;
  }

 
#------------------------------------------------------[ Movie Comment(s) ]---
  /** Get movie main comment (from title page)
   * @method comment
   * @return string comment
   */
  
function comment () {
    if (
$this->main_comment == "") {
      if (
$this->page["Title"] == ""$this->openpage ("Title");
      if (@
preg_match("/\<div class\=\"comment\"(.*?)(\<b\>.*?)\<div class\=\"yn\"/ms",$this->page["Title"],$match))
        
$this->main_comment preg_replace("/a href\=\"\//i","a href=\"http://".$this->imdbsite."/",$match[2]);
    }
    return 
$this->main_comment;
  }

  
/** Get movie main comment (from title page - split-up variant)
   * @method comment_split
   * @return array comment array[string title, string date, array author, string comment]; author: array[string url, string name]
   */
  
function comment_split() {
    if (empty(
$this->split_comment)) {
      if (
$this->main_comment == ""$comm $this->comment();
      if (@
preg_match("/<b>(.*?)<\/b>, (.*)<br>.*?<a href=\"(.*)\">(.*?)<\/a>.*<p>(.*?)<\/p>/ms",$this->main_comment,$match))
        
$this->split_comment = array("title"=>$match[1],"date"=>$match[2],"author"=>array("url"=>$match[3],"name"=>$match[4]),"comment"=>trim($match[5]));
    }
    return 
$this->split_comment;
  }

 
#--------------------------------------------------------[ Language Stuff ]---
  /** Get movies original language
   * @method language
   * @return string language
   * @brief There is not really a main language on the IMDB sites (yet), so this
   *  simply returns the first one
   */
  
function language () {
   if (
$this->main_language == "") {
    if (empty(
$this->langs)) $langs $this->languages();
    
$this->main_language $this->langs[0];
   }
   return 
$this->main_language;
  }

  
/** Get all langauges this movie is available in
   * @method languages
   * @return array languages (array[0..n] of strings)
   */
  
function languages () {
   if (empty(
$this->langs)) {
    if (
$this->page["Title"] == ""$this->openpage ("Title");
    if (
preg_match_all("/itemprop=\"inLanguage\"\n    >(.*)<\/a>/",str_replace('&gt;','>',$this->page["Title"]),$matches))
      
$this->langs $matches[1];
   }
   return 
$this->langs;
  }

 
#--------------------------------------------------------------[ Genre(s) ]---
  /** Get the movies main genre
   *  Since IMDB.COM does not really now a "Main Genre", this simply means the
   *  first mentioned genre will be returned.
   * @method genre
   * @return string genre
   * @brief There is not really a main genre on the IMDB sites (yet), so this
   *  simply returns the first one
   */
  
function genre () {
   if (empty(
$this->main_genre)) {
    if (empty(
$this->moviegenres)) $genres $this->genres();
    if (!empty(
$genres)) $this->main_genre $this->moviegenres[0];
   }
   return 
$this->main_genre;
  }

  
/** Get all genres the movie is registered for
   * @method genres
   * @return array genres (array[0..n] of strings)
   */
  
function genres () {
    if (empty(
$this->moviegenres)) {
      if (
$this->page["Title"] == ""$this->openpage ("Title");
      if (
preg_match_all("/itemprop=\"genre\"\n    >(.*?)<\/a>/",str_replace('&gt;','>',$this->page["Title"]),$matches))
        
$this->moviegenres $matches[1];
    }
    return 
$this->moviegenres;
  }

 
#----------------------------------------------------------[ Color format ]---
  /** Get colors
   * @method colors
   * @return array colors (array[0..1] of strings)
   */
  
function colors () {
    if (empty(
$this->moviecolors)) {
      if (
$this->page["Title"] == ""$this->openpage ("Title");
      if (
preg_match_all("/\/List\?color-info.*?>(.*?)</",$this->page["Title"],$matches))
        
$this->moviecolors $matches[1];
    }
    return 
$this->moviecolors;
  }

 
#---------------------------------------------------------------[ Tagline ]---
  /** Get the main tagline for the movie
   * @method tagline
   * @return string tagline
   */
  
function tagline () {
    if (
$this->main_tagline == "") {
      if (
$this->page["Title"] == ""$this->openpage ("Title");
      if (@
preg_match("/Tagline:\<\/h5\>\s*\n(.*?)\<\/div/ms",$this->page["Title"],$match)) {
        if(@
preg_match("/^(.*?)\<a class\=\"tn15more/ms",$match[1],$match2)) $this->main_tagline $match2[1];
        else 
$this->main_tagline $match[1];
      }
    }
    return 
$this->main_tagline;
  }

 
#---------------------------------------------------------------[ Seasons ]---
  /** Get the number of seasons or 0 if not a series
   * @method seasons
   * @return int seasons
   */
  
function seasons() {
    if ( 
$this->seasoncount == -) {
      if ( 
$this->page["Title"] == "" $this->openpage("Title");
      if ( 
preg_match_all('|<a href="episodes#season-\d+">(\d+)</a>|Ui',$this->page["Title"],$matches) ) {
        
$this->seasoncount count($matches[0]);
      } else {
        
$this->seasoncount 0;
      }
    }
    return 
$this->seasoncount;
  }

 
#--------------------------------------------------------[ Plot (Outline) ]---
  /** Get the main Plot outline for the movie
   * @method plotoutline
   * @return string plotoutline
   */
  
function plotoutline () {
    if (
$this->main_plotoutline == "") {
      if (
$this->page["Title"] == ""$this->openpage ("Title");
      if (@
preg_match("/Plot Outline:\<\/h5\>\s*\n(.*?)\</ms",$this->page["Title"],$match))
        
$this->main_plotoutline $match[1];
    }
    return 
$this->main_plotoutline;
  }

 
#--------------------------------------------------------[ Photo specific ]---
  /** Get cover photo
   * @method photo
   * @return mixed photo (string url if found, FALSE otherwise)
   */
  
function photo () {
    if (empty(
$this->main_photo)) {
      if (
$this->page["Title"] == ""$this->openpage ("Title");
      
preg_match("/id=\"img_primary(.*?)>\n    \n\n(.*?)<img src=\"(.*?)\"/",str_replace('&gt;','>',$this->page["Title"]),$match);
      if (empty(
$match[3])) return FALSE;
      
$this->main_photo $match[3];
    }
    return 
$this->main_photo;
  }

  
/** Save the photo to disk
   * @method savephoto
   * @param string path
   * @return boolean success
   */
  
function savephoto ($path) {
    
$req = new IMDB_Request("");
    
$photo_url $this->photo ();
    if (!
$photo_url) return FALSE;
    
$req->setURL($photo_url);
    
$req->sendRequest();
    if (
strpos($req->getResponseHeader("Content-Type"),'image/jpeg') === 0
      
|| strpos($req->getResponseHeader("Content-Type"),'image/gif') === 0
      
|| strpos($req->getResponseHeader("Content-Type"), 'image/bmp') === ){
    
$fp $req->getResponseBody();
    }else{
    
$this->debug_scalar("<BR>*photoerror* ".$photo_url.": Content Type is '".$req->getResponseHeader("Content-Type")."'<BR>");
    return 
false;
    }
    
$fp2 fopen ($path"w");
    if ((!
$fp) || (!$fp2)){
      
$this->debug_scalar("image error...<BR>");
      return 
false;
    }
    
fputs ($fp2$fp);
    return 
TRUE;
  }

  
/** Get the URL for the movies cover photo
   * @method photo_localurl
   * @return mixed url (string URL or FALSE if none)
   */
  
function photo_localurl(){
    
$path $this->photodir.$this->imdbid().".jpg";
    if ( @
fopen($path,"r"))      return $this->photoroot.$this->imdbid().'.jpg';
    if (
$this->savephoto($path)) return $this->photoroot.$this->imdbid().'.jpg';
    return 
false;
  }

 
#-------------------------------------------------[ Country of Production ]---
  /** Get country of production
   * @method country
   * @return array country (array[0..n] of string)
   */
  
function country () {
   if (empty(
$this->countries)) {
    if (
$this->page["Title"] == ""$this->openpage ("Title");
    
$this->countries = array();
    if (
preg_match_all("/\/Sections\/Countries\/\w+\/\"\>(.*?)<\/a/",$this->page["Title"],$matches))
      for (
$i=0;$i<count($matches[0]);++$i$this->countries[$i] = $matches[1][$i];
   }
   return 
$this->countries;
  }

 
#------------------------------------------------------------[ Movie AKAs ]---
  /** Get movies alternative names
   * @method alsoknow
   * @return array aka array[0..n] of array[title,year,country,comment]; searching
   *         on akas.imdb.com will add "lang" to the array for localized names,
   *         "comment" will hold additional countries listed along
   */
  
function alsoknow () {
   if (empty(
$this->akas)) {
    if (
$this->page["Title"] == ""$this->openpage ("Title");
    
$ak_s strpos ($this->page["Title"], "Also Known As:</h4>");
    if (
$ak_s>0$ak_s += 19;
    if (
$ak_s == 0$ak_s strpos ($this->page["Title"], "Also Known As:</h4>");
    if (
$ak_s == 0) return array();
    
$alsoknow_end strpos ($this->page["Title"], "</div>"$ak_s);
    
$alsoknow_all substr($this->page["Title"], $ak_s$alsoknow_end $ak_s);
    if (
preg_match_all("/(.*?) (\(\d{4}\) |)\((.*?)\).*?\((.*?)\) <br>/",$alsoknow_all,$matches))
      for (
$i=0;$i<count($matches[0]);++$i$this->akas[] = array("title"=>$matches[1][$i],"year"=>$matches[2][$i],"country"=>$matches[3][$i],"comment"=>$matches[4][$i]);
    if (
preg_match_all("/<i class=\"transl\">([^\[\(]+?) (\(\d{4}\) |)(\([^\[]+)\s*\[(.*?)\]<\/i><br>/",$alsoknow_all,$matches)) { // localized variants on akas.imdb.com
      
for ($i=0;$i<count($matches[0]);++$i) {
        
$country ""$comment "";
        if (
preg_match_all("/\((.*?)\)/",$matches[3][$i],$countries)) {
          
$country $countries[1][0];
          for (
$k=1;$k<count($countries[0]);++$k$comment .= ", ".$countries[1][$k];
        }
        
$this->akas[] = array("title"=>$matches[1][$i],"year"=>$matches[2][$i],"country"=>$country,"comment"=>@substr($comment,2),"lang"=>$matches[4][$i],"orig"=>$matches[0][$i]);
      }
    }
   }
   return 
$this->akas;
  }

 
#---------------------------------------------------------[ Sound formats ]---
  /** Get sound formats
   * @method sound
   * @return array sound (array[0..n] of strings)
   */
  
function sound () {
   if (empty(
$this->sound)) {
    if (
$this->page["Title"] == ""$this->openpage ("Title");
    if (
preg_match_all("/\/List\?sound.*?>(.*?)</",$this->page["Title"],$matches))
      
$this->sound $matches[1];
   }
   return 
$this->sound;
  }

 
#-------------------------------------------------------[ MPAA / PG / FSK ]---
  /** Get the MPAA data (also known as PG or FSK)
   * @method mpaa
   * @return array mpaa (array[country]=rating)
   */
  
function mpaa () {
   if (empty(
$this->mpaas)) {
    if (
$this->page["Title"] == ""$this->openpage ("Title");
    if (
preg_match_all("/\/List\?certificates.*?>(.*?):(.*?)</",$this->page["Title"],$matches)) {
      
$cc count($matches[0]);
      for (
$i=0;$i<$cc;++$i$this->mpaas[$matches[1][$i]] = $matches[2][$i];
    }
   }
   return 
$this->mpaas;
  }

 
#-----------------------------------------------------[ /plotsummary page ]---
  /** Get the movies plot(s)
   * @method plot
   * @return array plot (array[0..n] of strings)
   */
  
function plot () {
   if (empty(
$this->plot_plot)) {
    if ( 
$this->page["Plot"] == "" $this->openpage ("Plot");
    if ( 
$this->page["Plot"] == "cannot open page" ) return array(); // no such page
    
if (preg_match_all("/p class=\"plotpar\">(.*?)<\/p>/",str_replace("\n"," ",$this->page["Plot"]),$matches))
      for (
$i=0;$i<count($matches[0]);++$i)
        
$this->plot_plot[$i] = preg_replace('/<a href=\"\/SearchPlotWriters/i','<a href="http://'.$this->imdbsite.'/SearchPlotWriters/',$matches[1][$i]);
   }
   return 
$this->plot_plot;
  }

  
/** Get the movie plot(s) - split-up variant
   * @method plot_split
   * @return array array[0..n] of array[string plot,array author] - where author consists of string name and string url
   */
  
function plot_split() {
    if (empty(
$this->split_plot)) {
      if (empty(
$this->plot_plot)) $plots $this->plot();
      for (
$i=0;$i<count($this->plot_plot);++$i) {
        if (
preg_match("/(.*?)<i>.*<a href=\"(.*?)\">(.*?)<\/a>/",$this->plot_plot[$i],$match))
          
$this->split_plot[] = array("plot"=>$match[1],"author"=>array("name"=>$match[3],"url"=>$match[2]));
      }
    }
    return 
$this->split_plot;
  }

 
#--------------------------------------------------------[ /taglines page ]---
  /** Get all available taglines for the movie
   * @method taglines
   * @return array taglines (array[0..n] of strings)
   */
  
function taglines () {
   if (empty(
$this->taglines)) {
    if ( 
$this->page["Taglines"] == "" $this->openpage ("Taglines");
    if ( 
$this->page["Taglines"] == "cannot open page" ) return array(); // no such page
    
if (preg_match_all("/<p>(.*?)<\/p><hr/",$this->page["Taglines"],$matches))
      
$this->taglines $matches[1];
   }
   return 
$this->taglines;
  }

 
#-----------------------------------------------------[ /fullcredits page ]---
  /** Get rows for a given table on the page
   * @method private get_table_rows
   * @param string html
   * @param string table_start
   * @return mixed rows (FALSE if table not found, array[0..n] of strings otherwise)
   * @see used by the methods director, cast, writing, producer, composer
   */
  
function get_table_rows $html$table_start ){
   
$row_s strpos $html">".$table_start."<");
   
$row_e $row_s;
   if ( 
$row_s == )  return FALSE;
   
$endtable strpos($html"</table>"$row_s);
   if (
preg_match_all("/<tr>(.*?)<\/tr>/",substr($html,$row_s,$endtable $row_s),$matches)) {
     
$mc count($matches[1]);
     for (
$i=0;$i<$mc;++$i) if ( strncmptrim($matches[1][$i]), "<td valign=",10) == $rows[] = $matches[1][$i];
   }
   return 
$rows;
  }

  
/** Get rows for the cast table on the page
   * @method private get_table_rows_cast
   * @param string html
   * @param string table_start
   * @return mixed rows (FALSE if table not found, array[0..n] of strings otherwise)
   * @see used by the method cast
   */
  
function get_table_rows_cast $html$table_start ){
   
$row_s strpos $html'<table class="cast">');
   
$row_e $row_s;
   if ( 
$row_s == )  return FALSE;
   
$endtable strpos($html"</table>"$row_s);
   if (
preg_match_all("/<tr.*?(<td class=\"nm\".*?)<\/tr>/",substr($html,$row_s,$endtable $row_s),$matches))
     return 
$matches[1];
   return array();
  }

  
/** Get content of table row cells
   * @method private get_row_cels
   * @param string row (as returned by imdb::get_table_rows)
   * @return array cells (array[0..n] of strings)
   * @see used by the methods director, cast, writing, producer, composer
   */
  
function get_row_cels $row ){
   if (
preg_match_all("/<td.*?>(.*?)<\/td>/",$row,$matches)) return $matches[1];
   return array();
  }

  
/** Get the IMDB ID from a names URL
   * @method private get_imdbname
   * @param string href
   * @return string
   * @see used by the methods director, cast, writing, producer, composer
   */
  
function get_imdbname$href){
   if ( 
strlen$href) == 0) return $href;
   
$name_s 15;
   
$name_e strpos $href'"'$name_s);
   if ( 
$name_e != 0) return substr$href$name_s$name_e -$name_s);
   else    return 
$href;
  }

  
/** Get the director(s) of the movie
   * @method director
   * @return array director (array[0..n] of arrays[imdb,name,role])
   */
  
function director () {
   if (empty(
$this->credits_director)) {
    if ( 
$this->page["Credits"] == "" $this->openpage ("Credits");
    if ( 
$this->page["Credits"] == "cannot open page" ) return array(); // no such page
   
}
   
$director_rows $this->get_table_rows($this->page["Credits"], "Directed by");
   for ( 
$i 0$i count ($director_rows); $i++){
    
$cels $this->get_row_cels ($director_rows[$i]);
    if (!isset (
$cels[0])) return array();
    
$dir["imdb"] = $this->get_imdbname($cels[0]);
    
$dir["name"] = strip_tags($cels[0]);
    
$role trim(strip_tags($cels[2]));
    if ( 
$role == ""$dir["role"] = NULL;
    else 
$dir["role"] = $role;
    
$this->credits_director[$i] = $dir;
   }
   return 
$this->credits_director;
  }

  
/** Get the actors
   * @method cast
   * @return array cast (array[0..n] of arrays[imdb,name,role])
   */
  
function cast () {
   if (empty(
$this->credits_cast)) {
    if ( 
$this->page["Credits"] == "" $this->openpage ("Credits");
    if ( 
$this->page["Credits"] == "cannot open page" ) return array(); // no such page
   
}
   
$cast_rows $this->get_table_rows_cast($this->page["Credits"], "Cast");
   for ( 
$i 0$i count ($cast_rows); $i++){
    
$cels $this->get_row_cels ($cast_rows[$i]);
    if (!isset (
$cels[0])) return array();
    
$dir["imdb"] = $this->get_imdbname($cels[0]);
    
$dir["name"] = strip_tags($cels[0]);
    
$role strip_tags($cels[2]);
    if ( 
$role == ""$dir["role"] = NULL;
    else 
$dir["role"] = $role;
    
$this->credits_cast[$i] = $dir;
   }
   return 
$this->credits_cast;
  }

  
/** Get the writer(s)
   * @method writing
   * @return array writers (array[0..n] of arrays[imdb,name,role])
   */
  
function writing () {
   if (empty(
$this->credits_writing)) {
    if ( 
$this->page["Credits"] == "" $this->openpage ("Credits");
    if ( 
$this->page["Credits"] == "cannot open page" ) return array(); // no such page
   
}
   
$this->credits_writing = array();
   
$writing_rows $this->get_table_rows($this->page["Credits"], "Writing credits");
   for ( 
$i 0$i count ($writing_rows); $i++){
     
$cels $this->get_row_cels ($writing_rows[$i]);
     if ( 
count $cels) > 2){
       
$wrt["imdb"] = $this->get_imdbname($cels[0]);
       
$wrt["name"] = strip_tags($cels[0]);
       
$role strip_tags($cels[2]);
       if ( 
$role == ""$wrt["role"] = NULL;
       else 
$wrt["role"] = $role;
       
$this->credits_writing[$i] = $wrt;
     }
   }
   return 
$this->credits_writing;
  }

  
/** Obtain the producer(s)
   * @method producer
   * @return array producer (array[0..n] of arrays[imdb,name,role])
   */
  
function producer () {
   if (empty(
$this->credits_producer)) {
    if ( 
$this->page["Credits"] == "" $this->openpage ("Credits");
    if ( 
$this->page["Credits"] == "cannot open page" ) return array(); // no such page
   
}
   
$this->credits_producer = array();
   
$producer_rows $this->get_table_rows($this->page["Credits"], "Produced by");
   for ( 
$i 0$i count ($producer_rows); $i++){
    
$cels $this->get_row_cels ($producer_rows[$i]);
    if ( 
count $cels) > 2){
     
$wrt["imdb"] = $this->get_imdbname($cels[0]);
     
$wrt["name"] = strip_tags($cels[0]);
     
$role strip_tags($cels[2]);
     if ( 
$role == ""$wrt["role"] = NULL;
     else 
$wrt["role"] = $role;
     
$this->credits_producer[$i] = $wrt;
    }
   }
   return 
$this->credits_producer;
  }

  
/** Obtain the composer(s) ("Original Music by...")
   * @method composer
   * @return array composer (array[0..n] of arrays[imdb,name,role])
   */
  
function composer () {
   if (empty(
$this->credits_composer)) {
    if ( 
$this->page["Credits"] == "" $this->openpage ("Credits");
    if ( 
$this->page["Credits"] == "cannot open page" ) return array(); // no such page
   
}
   
$this->credits_composer = array();
   
$composer_rows $this->get_table_rows($this->page["Credits"], "Original Music by");
   for ( 
$i 0$i count ($composer_rows); $i++){
    
$cels $this->get_row_cels ($composer_rows[$i]);
    if ( 
count $cels) > 2){
     
$wrt["imdb"] = $this->get_imdbname($cels[0]);
     
$wrt["name"] = strip_tags($cels[0]);
     
$role strip_tags($cels[2]);
     if ( 
$role == ""$wrt["role"] = NULL;
     else 
$wrt["role"] = $role;
     
$this->credits_composer[$i] = $wrt;
    }
   }
   return 
$this->credits_composer;
  }

 
#----------------------------------------------------[ /crazycredits page ]---
  /** Get the Crazy Credits
   * @method crazy_credits
   * @return array crazy_credits (array[0..n] of string)
   */
  
function crazy_credits() {
    if (empty(
$this->crazy_credits)) {
      if (empty(
$this->page["CrazyCredits"])) $this->openpage("CrazyCredits");
      if ( 
$this->page["CrazyCredits"] == "cannot open page" ) return array(); // no such page
      
$tag_s strpos ($this->page["CrazyCredits"],"<li><tt>");
      
$tag_e strpos ($this->page["CrazyCredits"],"</ul>",$tag_s);
      
$cred  str_replace ("<br>"," ",substr ($this->page["CrazyCredits"],$tag_s$tag_e $tag_s));
      
$cred  str_replace ("  "," ",str_replace ("\n"," ",$cred));
      if (
preg_match_all("/<li><tt>(.*?)<\/tt><\/li>/",$cred,$matches))
        
$this->crazy_credits $matches[1];
    }
    return 
$this->crazy_credits;
  }

 
#--------------------------------------------------------[ /episodes page ]---
  /** Get the series episode(s)
   * @method episodes
   * @return array episodes (array[0..n] of array[0..m] of array[imdbid,title,airdate,plot])
   */
  
function episodes() {
    if ( 
$this->seasons() == ) return null;
    if ( empty(
$this->season_episodes) ) {
      if ( 
$this->page["Episodes"] == "" $this->openpage("Episodes");
      if ( 
$this->page["Episodes"] == "cannot open page" ) return array(); // no such page
      
if ( preg_match_all('|<h4>Season (\d+), Episode (\d+): <a href="/title/tt(\d{7})/">(.*)</a></h4><b>Original Air Date: (.*)</b><br>(.*)<br/><br/>|Ui',$this->page["Episodes"],$matches) ) {
    for ( 
$i $i count($matches[0]); $i++ ) {
          
$this->season_episodes[$matches[1][$i]][$matches[2][$i]] = array("imdbid" => $matches[3][$i],"title" => $matches[4][$i], "airdate" => $matches[5][$i], "plot" => $matches[6][$i]);
        }
      }
    }
    return 
$this->season_episodes;
  }

 
#-----------------------------------------------------------[ /goofs page ]---
  /** Get the goofs
   * @method goofs
   * @return array goofs (array[0..n] of array[type,content]
   */
  
function goofs() {
    if (empty(
$this->goofs)) {
      if (empty(
$this->page["Goofs"])) $this->openpage("Goofs");
      if (
$this->page["Goofs"] == "cannot open page") return array(); // no such page
      
$tag_s strpos($this->page["Goofs"],'<ul class="trivia">');
      
$tag_e strrpos($this->page["Goofs"],'<ul class="trivia">'); // maybe more than one
      
$tag_e strrpos($this->page["Goofs"],"</ul>");
      
$goofs substr($this->page["Goofs"],$tag_s,$tag_e $tag_s);
      if (
preg_match_all("/<li><b>(.*?)<\/b>(.*?)<br><br><\/li>/",$goofs,$matches)) {
        
$gc count($matches[1]);
        for (
$i=0;$i<$gc;++$i$this->goofs[] = array("type"=>$matches[1][$i],"content"=>$matches[2][$i]);
      }
    }
    return 
$this->goofs;
  }

 
#----------------------------------------------------------[ /quotes page ]---
  /** Get the quotes for a given movie
   * @method quotes
   * @return array quotes (array[0..n] of string)
   */
  
function quotes() {
    if ( empty(
$this->moviequotes) ) {
      if ( 
$this->page["Quotes"] == "" $this->openpage("Quotes");
      if ( 
$this->page["Quotes"] == "cannot open page" ) return array(); // no such page
      
if (preg_match_all("/<a name=\"qt.*?<\/a>\s*(.*?)<hr/",str_replace("\n"," ",$this->page["Quotes"]),$matches))
        
$this->moviequotes $matches[1];
    }
    return 
$this->moviequotes;
  }

 
#--------------------------------------------------------[ /trailers page ]---
  /** Get the trailer URLs for a given movie
   * @method trailers
   * @return array trailers (array[0..n] of string)
   */
  
function trailers() {
    if ( empty(
$this->trailers) ) {
      if ( 
$this->page["Trailers"] == "" $this->openpage("Trailers");
      if ( 
$this->page["Trailers"] == "cannot open page" ) return array(); // no such page
      
$tag_s strpos($this->page["Trailers"], '<div class="slate">');
      if (!empty(
$tag_s)) { // trailers on the IMDB site itself
        
$tag_e strpos($this->page["Trailers"],"</a>\n</div",$tag_s);
        
$trail substr($this->page["Trailers"], $tag_s$tag_e $tag_s +1);
        if (
preg_match_all("/href=\"\/video\/imdb\/(.*?)\/\"/",$trail,$matches))
          for (
$i=0;$i<count($matches[0]);++$i$this->trailers[] = "http://".$this->imdbsite.'/video/imdb/'.$matches[1][$i].'/';
          
$this->trailers array_unique($this->trailers);
      }
      
$tag_s strpos($this->page["Trailers"], " Videos</div>");
      if (empty(
$tag_s)) return FALSE;
      
$tag_e strpos($this->page["Trailers"], "<h3>Related Links</h3>"$tag_s);
      
$trail substr($this->page["Trailers"], $tag_s$tag_e $tag_s);
        if (
preg_match_all("/href=\"\/video\/imdblink\/(.*?)\/\"/",$trail,$matches))
        {
        
$a=0;
        foreach (
$matches[1] as $matt)
        {
        
$matches[1][$a] = "http://".$this->imdbsite.'/video/imdblink/'.$matt.'/';
        
$a++;
        }
        
$this->trailers array_merge($this->trailers,array_unique($matches[1]));
        }
    }
    return 
$this->trailers;
  }
function 
trailer () {
   if (
$this->main_trailer == "") {
      if (
$this->page["Title"] == ""$this->openpage ("Title");
         
$trailer_s strpos ($this->page["Title"], "strip toplinks");
            if ( 
$trailer_s == 0) return false;
               
$trailer_s strpos ($this->page["Title"], "trailers-"$trailer_s);
               
$trailer_e strpos ($this->page["Title"], "\""$trailer_s);
               
$this->main_trailer substr ($this->page["Title"], $trailer_s+9$trailer_e $trailer_s-9);
            if (
substr($this->main_trailer02) != "me")
              
$this->main_trailer "notrailer";
   }
   return 
$this->main_trailer;
   }
 
#----------------------------------------------------------[ /trivia page ]---
  /** Get the trivia info
   * @method trivia
   * @return array trivia (array[0..n] string
   */
  
function trivia() {
    if (empty(
$this->trivia)) {
      if (empty(
$this->page["Trivia"])) $this->openpage("Trivia");
      if (
$this->page["Trivia"] == "cannot open page") return array(); // no such page
      
$tag_s strpos($this->page["Trivia"],'<ul class="trivia">');
      
$tag_e strrpos($this->page["Trivia"],'<ul class="trivia">'); // maybe more than one
      
$tag_e strrpos($this->page["Trivia"],"</ul>");
      
$goofs substr($this->page["Trivia"],$tag_s,$tag_e $tag_s);
      if (
preg_match_all("/<li>(.*?)<br><br><\/li>/",$goofs,$matches)) {
        
$gc count($matches[1]);
        for (
$i=0;$i<$gc;++$i$this->trivia[] = str_replace('href="/','href="http://'.$this->imdbsite."/",$matches[1][$i]);
      }
    }
    return 
$this->trivia;
  }

 
#------------------------------------------------------[ /soundtrack page ]---
  /** Get the soundtrack listing
   * @method soundtrack
   * @return array soundtracks (array[0..n] of array(soundtrack,array[0..n] of credits)
   * @brief Usually, the credits array should hold [0] written by, [1] performed by.
   *  But IMDB does not always stick to that - so in many cases it holds
   *  [0] performed by, [1] courtesy of
   */
  
function soundtrack() {
   if (empty(
$this->soundtracks)) {
    if (empty(
$this->page["Soundtrack"])) $this->openpage("Soundtrack");
    if (
$this->page["Soundtrack"] == "cannot open page") return array(); // no such page
    
if (preg_match_all("/<li>(.*?)<\/b><br>(.*?)<br>(.*?)<br>.*?<\/li>/",str_replace("\n"," ",$this->page["Soundtrack"]),$matches)) {
      
$mc count($matches[0]);
      for (
$i=0;$i<$mc;++$i$this->soundtracks[] = array("soundtrack"=>$matches[1][$i],"credits"=>array(
                                                           
str_replace('href="/','href="http://'.$this->imdbsite.'/',$matches[2][$i]),
                                                           
str_replace('href="/','href="http://'.$this->imdbsite.'/',$matches[3][$i])));
    }
   }
   return 
$this->soundtracks;
  }

 
#-------------------------------------------------[ /movieconnection page ]---
  /** Parse connection block (used by method movieconnection only)
   * @method private parseConnection
   * @param string conn connection type
   * @return array [0..n] of array mid,name,year,comment - or empty array if not found
   */
  
function parseConnection($conn) {
    
$tag_s strpos($this->page["MovieConnections"],"<h5>$conn</h5>");
    if (empty(
$tag_s)) return array(); // no such feature
    
$tag_e strpos($this->page["MovieConnections"],"<h5>",$tag_s+4);
    if (empty(
$tag_e)) $tag_e strpos($this->page["MovieConnections"],"<hr/><h3>",$tag_s);
    
$block substr($this->page["MovieConnections"],$tag_s,$tag_e-$tag_s);
    if (
preg_match_all("/\<a href=\"(.*?)\"\>(.*?)\<\/a\> \((\d{4})\)(.*\<br\/\>\&nbsp;-\&nbsp;(.*))?/",$block,$matches)) {
      
$mc count($matches[0]);
      for (
$i=0;$i<$mc;++$i) {
        
$mid substr($matches[1][$i],9,strlen($matches[1][$i])-10); // isolate imdb id from url
        
$arr[] = array("mid"=>$mid"name"=>$matches[2][$i], "year"=>$matches[3][$i], "comment"=>$matches[5][$i]);
      }
    }
    return 
$arr;
  }

  
/** Get connected movie information
   * @method movieconnection
   * @return array connections (versionOf, editedInto, followedBy, spinOff,
   *         spinOffFrom, references, referenced, features, featured, spoofs,
   *         spoofed - each an array of mid, name, year, comment or an empty
   *         array if no connections of that type)
   */
  
function movieconnection() {
    if (empty(
$this->movieconnections)) {
      if (empty(
$this->page["MovieConnections"])) $this->openpage("MovieConnections");
      if (
$this->page["MovieConnections"] == "cannot open page") return array(); // no such page
      
$this->movieconnections["versionOf"]  = $this->parseConnection("Version of");
      
$this->movieconnections["editedInto"] = $this->parseConnection("Edited into");
      
$this->movieconnections["followedBy"] = $this->parseConnection("Followed By");
      
$this->movieconnections["spinOffFrom"] = $this->parseConnection("Spin off from");
      
$this->movieconnections["spinOff"] = $this->parseConnection("Spin off");
      
$this->movieconnections["references"] = $this->parseConnection("References");
      
$this->movieconnections["referenced"] = $this->parseConnection("Referenced in");
      
$this->movieconnections["features"] = $this->parseConnection("Features");
      
$this->movieconnections["featured"] = $this->parseConnection("Featured in");
      
$this->movieconnections["spoofs"] = $this->parseConnection("Spoofs");
      
$this->movieconnections["spoofed"] = $this->parseConnection("Spoofed in");
    }
    return 
$this->movieconnections;
  }

 
#------------------------------------------------[ /externalreviews page ]---
  /** Get list of external reviews (if any)
   * @method extReviews
   * @return array [0..n] of array [url, desc] (or empty array if no data)
   */
  
function extReviews() {
    if (empty(
$this->extreviews)) {
      if (empty(
$this->page["ExtReviews"])) $this->openpage("ExtReviews");
      if (
$this->page["ExtReviews"] == "cannot open page") return array(); // no such page
      
if (preg_match_all("/\<li\>\<a href=\"(.*?)\"\>(.*?)\<\/a\>/",$this->page["ExtReviews"],$matches)) {
        
$mc count($matches[0]);
        for (
$i=0;$i<$mc;++$i) {
          
$this->extreviews[$i] = array("url"=>$matches[1][$i], "desc"=>$matches[2][$i]);
        }
      }
    }
    return 
$this->extreviews;
  }

 } 
// end class imdb

 #====================================================[ IMDB Search class ]===
 /** Search the IMDB for a title and obtain the movies IMDB ID
  * @package Api
  * @class imdbsearch
  * @extends imdb_config
  */
 
class imdbsearch extends imdb_config{
  var 
$page "";
  var 
$name NULL;
  var 
$resu = array();
  var 
$url "http://www.imdb.com/";
  var 
$main_trailer "";

  
/** Read the config
   * @constructor imdbsearch
   */
  
function imdbsearch() {
    
$this->imdb_config();
    
$this->search_episodes(FALSE);
  }

  
/** Search for episodes or movies
   * @method search_episodes
   * @param boolean enabled TRUE: Search for episodes; FALSE: Search for movies (default)
   */
  
function search_episodes($enable) {
    
$this->episode_search $enable;
  }

  
/** Set the name (title) to search for
   * @method setsearchname
   * @param string searchstring what to search for - (part of) the movie name
   */
  
function setsearchname ($name) {
   
$this->name $name;
   
$this->page "";
   
$this->url NULL;
  }

  
/** Set the URL (overwrite default search URL and run your own)
   *  This URL will be reset if you call the setsearchname() method
   * @method seturl
   * @param string URL to use
   */
  
function seturl($url){
   
$this->url $url;
  }

  
/** Create the IMDB URL for the movie search
   * @method private mkurl
   * @return string url
   */
  
function mkurl () {
   if (
$this->url !== NULL){
    
$url $this->url;
   }else{
     if (!isset(
$this->maxresults)) $this->maxresults 20;
     if (
$this->maxresults 0$query ";mx=20";
     if (
$this->episode_search$url "http://".$this->imdbsite."/find?q=".urlencode($this->name).$query.";s=ep";
     else {
       switch (
$this->searchvariant) {
         case 
"moonface" $query ";more=tt;nr=1"// @moonface variant (untested)
         
case "sevec"    $query "&restrict=Movies+only&GO.x=0&GO.y=0&GO=search;tt=1"// Sevec ori
         
default         : $query ";tt=on"// Izzy
       
}
       
$url "http://".$this->imdbsite."/find?q=".urlencode($this->name).$query;
     }
   }
   return 
$url;
  }

  
/** Setup search results
   * @method results
   * @param optional string URL Replace search URL by your own
   * @return array results
   */
  
function results ($url="") {
   if (
$this->page == "") {
     if (empty(
$url)) $url $this->mkurl();
     
$be = new IMDB_Request($url);
     
$be->sendrequest();
     
$fp $be->getResponseBody();
     if ( !
$fp ){
       if (
$header $be->getResponseHeader("Location")){
        if (
strpos($header,$this->imdbsite."/find?")) {
          return 
$this->results($header);
          break(
4);
        }
        
$url explode("/",$header);
        
$id  substr($url[count($url)-2],2);
        
$this->resu[0] = new imdb($id);
        return 
$this->resu;
       }else{
        return 
NULL;
       }
     }
     
$this->page $fp;
   } 
// end (page="")

   
$searchstring = array( '<A HREF="/title/tt''<A href="/title/tt''<a href="/Title?''<a href="/title/tt');
   
$i 0;
   foreach(
$searchstring as $srch){
    
$res_e 0;
    
$res_s 0;
    
$mids_checked = array();
    
$len strlen($srch);
    while (((
$res_s strpos ($this->page$srch$res_e)) > 10)) {
      if (
$i == $this->maxresults) break(2); // limit result count
      
$res_e strpos ($this->page"("$res_s);
      
$imdb_id substr($this->page$res_s $len7);
      
$ts strpos($this->page">",$res_s) +1// >movie title</a>
      
$te strpos($this->page,"<",$ts);
      
$title substr($this->page,$ts,$te-$ts);
      if ((
$title == "") || (in_array($imdb_id,$mids_checked))) continue; // empty titles just come from the images
      
$mids_checked[] = $imdb_id;
      
$tmpres = new imdb ($imdb_id); // make a new imdb object by id
      
$tmpres->main_title $title;
      
$ts strpos($this->page,"(",$te) +1;
      
$te strpos($this->page,")",$ts);
      
$tmpres->main_year=substr($this->page,$ts,$te-$ts);
      
$i++;
      
$this->resu[$i] = $tmpres;
    }
   }
   return 
$this->resu;
  }
// end class imdbsearch

?>
__________________
Do not ask me to help you work on your site that is not phpMyBitTorrent
Do not ask me to make a mod for any other source
Do not Ask me to setup your site.
I will no longer help you setup your site, there is a setup script if you have trouble with it post in the forum here or in BT.Manager™ forum
My Current Demo is here http://demo.btmanager.org/
Reply With Quote
The Following User Says Thank You to joeroberts For This Useful Post:
Giorgatzelos (7th September 2012)