Fabian Beiner 的 IMDB Grabber 课程

我的一位读者 Fabian Beiner 进一步改进了我基于 PHP 的 IMDB Grabber 脚本,并将其变成了一个有用的类。该课程还能够获取我的脚本所做的更多信息。检查一下!

PHP

<?php
/**
 * @author Fabian Beiner <fabianDOTbeinerATgmailDOTcom>
 * @version 2.1alpha
 *
 * @comment Original idea by David Walsh <davidATdavidwalshDOTname>, thanks! Your blog rocks ;)
 *          I did this script in the middle of the night while being ill, no guarantee for anything!
 *
 * @license http://creativecommons.org/licenses/by-sa/3.0/de/deed.en_US
 *          Creative Commons Attribution-Share Alike 3.0 Germany
 *
 * Yay, after two days IMDB changed their layout... Great! :( Also added a fallback if cURL is missing.
 */

class IMDB {
    function __construct($url) {
        $this->gotCurl      = extension_loaded('curl');
        $imdb_content       = $this->imdbHandler($url);
        $this->movie        = trim($this->getMatch('|<title>(.*) \((.*)\)</title>|Uis', $imdb_content));
        $this->director     = trim($this->getMatch('|<h5>Director:</h5><a href="(.*)">(.*)</a><br/>|Uis', $imdb_content, 2));
        $this->url_director = trim($this->getMatch('|<h5>Director:</h5><a href="(.*)">(.*)</a><br/>|Uis', $imdb_content));
        $this->plot         = trim($this->getMatch('|<h5>Plot:</h5>(.*) <a|Uis', $imdb_content));
        $this->release_date = trim($this->getMatch('|<h5>Release Date:</h5> (.*) \((.*)\) <a|Uis', $imdb_content));
        $this->mpaa         = trim($this->getMatch('|<h5><a href="/mpaa">MPAA</a>:</h5> (.*)</div>|Uis', $imdb_content));
        $this->run_time     = trim($this->getMatch('|Runtime:</h5>(.*) (.*)</div>|Uis',$imdb_content));
        $this->rating       = trim($this->getMatch('|<div ><b>(.*)</b>|Uis', $imdb_content));
        $this->votes        = trim($this->getMatch('|  <a href="ratings" >(.*) votes</a>|Uis', $imdb_content));
        $this->country      = trim($this->getMatch('|<h5>Country:</h5><a href="(.*)">(.*)</a></div>|Uis', $imdb_content, 2));
        $this->url_country  = trim($this->getMatch('|<h5>Country:</h5><a href="(.*)">(.*)</a></div>|Uis', $imdb_content));
    }

    function imdbHandler($input) {
        if (!$this->getMatch('|^http://(.*)$|Uis', $input)) {
            $tmpUrl = 'http://us.imdb.com/find?s=all&q='.str_replace(' ', '+', $input).'&x=0&y=0';
            if ($this->gotCurl) {
                $ch      = curl_init();
                curl_setopt_array($ch, array(CURLOPT_URL => $tmpUrl,
                                             CURLOPT_HEADER => false,
                                             CURLOPT_RETURNTRANSFER => true,
                                             CURLOPT_TIMEOUT => 10
                                            )
                                  );
                $data = curl_exec($ch);
                curl_close($ch);
            } else {
                $data = file_get_contents($tmpUrl);
            }
            $foundMatch = $this->getMatch('|<p ><b>Media from <a href="(.*)">(.*)</a> ((.*))</b></p>|Uis', $data);
            if ($foundMatch) {
                $this->url = 'http://www.imdb.com'.$foundMatch;
            } else {
                $this->url = '';
                return 0;
            }
        } else {
            $this->url = $input;
        }
        if ($this->gotCurl) {
            $ch      = curl_init();
            curl_setopt_array($ch, array(CURLOPT_URL => $this->url,
                                         CURLOPT_HEADER => false,
                                         CURLOPT_RETURNTRANSFER => true,
                                         CURLOPT_TIMEOUT => 10
                                        )
                              );
            $data = curl_exec($ch);
            curl_close($ch);
        } else {
            $data = file_get_contents($this->url);
        }
        return str_replace("\n",'',(string)$data);
    }

    function getMatch($regex, $content, $index=1) {
        preg_match($regex, $content, $matches);
        return $matches[(int)$index];
    }

    function showOutput() {
        if ($this->url) {
            $content.= '<h2>Film</h2><p>'.$this->movie.'</p>';
            $content.= '<h2>Director</h2><p><a href="http://www.imdb.com'.$this->url_director.'">'.$this->director.'</a></p>';
            $content.= '<h2>Plot</h2><p>'.$this->plot.'</p>';
            $content.= '<h2>Release Date</h2><p>'.$this->release_date.'</p>';
            $content.= '<h2>MPAA</h2><p>'.$this->mpaa.'</p>';
            $content.= '<h2>Run Time</h2><p>'.$this->run_time.' minutes</p>';
            $content.= '<h2>Full Details</h2><p><a href="'.$this->url.'">'.$this->url.'</a></p>';
            $content.= '<h2>Rating</h2><p>'.$this->rating.'</p>';
            $content.= '<h2>Votes</h2><p>'.$this->votes.' votes</p>';
            $content.= '<h2>Country</h2><p><a href="http://www.imdb.com'.$this->url_country.'">'.$this->country.'</a></p>';
            echo $content;
        } else {
            echo 'Sorry, nothing found! :(';
        }
    }
}

// Examples :)
$imdb = new IMDB('http://www.imdb.com/title/tt0367882/');
print($imdb->showOutput());
echo '<hr>';
$imdb = new IMDB('Cruel Intentions');
print($imdb->showOutput());
echo '<hr>';
$imdb = new IMDB('I guess this movie name doesnt exists');
print($imdb->showOutput());
?>

感谢 Fabian 的分享!享受吧!

赞(0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏