class VCDFetch_yahoo extends VCDFetch {
protected $regexArray = array(
'title' => '
([^<]*) | ',
'year' => '([^<]*) | ',
'genre' => 'Genres:([^<]*)([^<]*) | ',
'cast' => null,
'plot' => '([^<]*)
'&id=([0-9]{10})&cf=gen">([^<]*)',
'poster' => 'http://us.movies1.yimg.com/movies.yahoo.com/images/([^<]*).jpg',
'country' => 'Produced in:([^<]*)([^<]*) | ',
'runtime' => 'Running Time:([^<]*)([^<]*) | '
);
protected $multiArray = array(
'cast', 'genre', 'poster'
);
private $servername = 'movies.yahoo.com';
private $searchpath = '/mv/search?p=[$]';
private $itempath = '/movie/[$]/details';
public function __construct() {
$this->useSnoopy();
$this->setSiteName("yahoo");
$this->setFetchUrls($this->servername, $this->searchpath, $this->itempath);
}
protected function processResults() {
if (!is_array($this->workerArray) || sizeof($this->workerArray) == 0) {
$this->setErrorMsg("No results to process.");
return;
}
$obj = new imdbObj();
$obj->setIMDB($this->getItemID());
foreach ($this->workerArray as $key => $data) {
$entry = $data[0];
$arrData = $data[1];
switch ($entry) {
case 'title':
$title = $arrData[1];
$regex = "\(([0-9]{4})\)";
$title = ereg_replace($regex, "", $title);
$obj->setTitle($title);
break;
case 'year':
$title = $arrData[1];
$regex = "([0-9]{4})";
if(@eregi($regex, $title, $retval)) {
$year = $retval[0];
if (is_numeric($year)) {
$obj->setYear($year);
}
}
break;
case 'poster':
$poster = $arrData[0][0];
if (substr_count($poster, "npa.gif") == 0) {
$obj->setImage($poster);
}
break;
case 'runtime':
$runtime = $arrData[2];
if (!is_numeric($runtime)) {
$regex = "([0-9]{1}) ([^<]*) ([0-9]{1,2}) min.";
if(@eregi($regex, $runtime, $retval)) {
if (sizeof($retval) >= 3) {
$hours = $retval[1];
$minutes = $retval[3];
if (is_numeric($hours) && is_numeric($minutes)) {
$runtime = ($hours*60) + $minutes;
$obj->setRuntime($runtime);
}
}
}
}
$obj->setRuntime($runtime);
break;
case 'director':
// Implemented in the cast section ..
break;
case 'plot':
$plot = $arrData[1];
$obj->setPlot($plot);
break;
case 'genre':
$genres = $arrData[0][2];
$genres = str_replace("and", ",", $genres);
$arr = split("/", $genres);
$obj->setGenre($arr);
break;
case 'rating':
$rating = $arrData[1].$arrData[2];
$rating = $rating/10;
$obj->setRating($rating);
break;
case 'cast':
$arr = null;
$arr = array();
foreach ($arrData as $itemArr) {
$actor = $itemArr[1];
$role = $itemArr[3];
if (strcmp($role, "") ==0) {
$role = "";
}
// Break when we hit the director ..
if (strcmp($role,"Director")==0) {
$obj->setDirector($actor);
break;}
$result = $actor." .... " .$role;
array_push($arr, $result);
}
$obj->setCast($arr);
break;
case 'runtime':
$runtime = $arrData[1];
$obj->setRuntime($runtime);
break;
case 'akas':
$akaTitles = implode(',', $arrData);
$obj->setAltTitle($akaTitles);
break;
case 'plot':
$plot = $arrData;
$obj->setPlot($plot);
break;
case 'country':
$country = $arrData[2];
$obj->setCountry($country);
break;
default:
break;
}
}
$this->fetchedObj = $obj;
}
protected function fetchDeeper($entry) {
switch ($entry) {
case 'cast':
// Save the old buffer
$itemBuffer = $this->getContents();
// Generate urls
$actorurl = "/movie/".$this->getItemID()."/cast";
$referer = "http://".$this->servername.str_replace('[$]', $this->getItemID(), $this->itempath);
// Set the regx
$regx = '&cf=gen">([^"]+)([^\s])([^"]+)';
$isActors = $this->fetchPage($this->servername, $actorurl, $referer);
if ($isActors) {
if ($this->getItem($regx, true) == self::ITEM_OK) {
$actors = $this->getFetchedItem();
array_push($this->workerArray, array($entry, $actors));
}
}
// Restore the old buffer
$this->setContents($itemBuffer);
break;
default:
break;
}
}
public function search($title) {
return parent::search($title);
}
public function showSearchResults() {
$this->setMaxSearchResults(50);
$regx = 'movie/([0-9]{10})/info">([^"]+)\(([0-9]{4})\) ';
$results = parent::generateSimpleSearchResults($regx,1,2,3);
parent::generateSearchSelection($results);
}
}
?> |