php通过输入一个url获取优酷、土豆、酷6、搜狐、新浪视频地址

class Video
{

    /**
     * 通过视频网站url获取swf地址
     * @param string $content
     * @return string
     */
    public function getVideo($url)
    {
        $urls = parse_url($url);
        $host = strtolower(trim($urls["host"]));

        $vhconfs = array(
            'youku.com' => array('p' => '/\/id_([\w\d\=]+)\.html/', 'c' => 'utf-8', 'tp' => '/\<title\>(.+?)\s*[\-\_].*?\<\/title\>/i', 'ip' => '~(?:(?:\_href\s*\=\s*[\'\']iku\:\/\/.+?)|(?:\&pic\s*\=\s*)|(?:\&screenshot\s*\=\s*))(http\:\/\/[\w\d]+\.ykimg\.com\/[^\|\'\'\s]+)~i', 'ppp' => 1),
            'sina.com.cn' => array('p' => '/\/(\d+)\-(\d+)\.html/', 'c' => 'utf-8', 'tp' => '/\<title\>(.+?)\s*[\-\_].*?\<\/title\>/', 'ip' => '~pic\s*[\:\=]\s*[\'\'](http\:\/\/[^\']+?\.(?:jpg|jpeg|gif|png|bmp))[\'\']~i', 'ppp' => 1, 'gzip' => 1),
            'tudou.com' => array('p' => '/view\/([\w\d\-\_]+)\/' . '*$/', 'c' => 'gbk', 'tp' => '/\<title\>(.+?)(?:[\-\_].*?)?\<\/title\>/', 'ip' => '/(?:bigItemUrl|pic)\s*[\=\:]\s*[\'\']([^\'\']+?)[\'\']/i', 'ppp' => 1, 'gzip' => 1),
            'ku6.com' => array('p' => '/\/([\w\-\_\.]+)\.html/', 'c' => 'gbk', 'tp' => '/\<title\>(.+?)\s*[\-\_].*?\<\/title\>/i', 'ip' => '~(?:(?:\<span class=\'s_pic\'\>)|(?:cover\s*[\:\=]\s*[\'\']))(http\:\/\/[^\'\<]+?\.(?:jpg|jpeg|gif|png|bmp))~i', 'ppp' => 0),
            'sohu.com' => array('p' => '/\/([\d]+)\/?$/', 'c' => 'gbk', 'tp' => '/\<title\>(.+?)\s*[\-\_].*?\<\/title\>/i', 'ip' => '/(?:(?:[\'\']og\:image[\'\']\s*content)|(?:cover))\s*[\:\=]\s*[\'\']([^\'\']+?)[\'\']/', 'ppp' => 1, 'gzip' => 1),
        );

        $swf = array(
            'youku.com' => 'http://player.youku.com/player.php/sid/FLASHVAR=/v.swf',
            'ku6.com' => 'http://player.ku6.com/refer/FLASHVAR/v.swf',
            'sina.com.cn' => 'http://vhead.blog.sina.com.cn/player/outer_player.swf?vid=FLASHVAR',
            'sohu.com' => 'http://v.blog.sohu.com/fo/v4/FLASHVAR',
            'tv.sohu.com' => 'http://share.vrs.sohu.com/FLASHVAR/v.swf',
            'tudou.com' => 'http://www.tudou.com/v/FLASHVAR',
        );

        foreach ($vhconfs as $k => $v)
        {
            if (false !== strpos($host, $k))
            {
                $return = array();
                if (preg_match($v["p"], $url, $m) && $m[1])
                {
                    $return["id"]   = $m[1];
                    $return["host"] = $k;
                    $return["url"]  = $url;
                }
                elseif ($v["ppp"])
                {
                    if ("tudou.com" == $k)
                    {
                        if ( (false !== strpos($url, "play/")) || (false !== strpos($url, "programs/")) )
                        {
                            $html = $this->dfopen($url);
                            if ($v["gzip"])
                            {
                                $html = $this->gzdecode($html);
                            }

                            $iid   = "";
                            $icode = "";

                            if (preg_match('~(?:(?:[\?\&\#]iid\=)|(?:\d+i))(\d+)~', $url, $m) && $m[1])
                            {
                                $iid = $m[1];
                            }
                            elseif (preg_match('~(?:(?:\,iid\s*=)|(?:\,defaultIid\s*=)|(?:\.href\)\s*\|\|))\s*(\d+)~', $html, $m) && $m[1])
                            {
                                $iid = $m[1];
                            }

                            if (preg_match("~" . $iid . ".*?icode\s*[\:\=]\s*(?:[^\'\"]*?)[\'\"]([\w\d\-\_]+)[\'\"]~s", $html, $m) && $m[1])
                            {
                                $icode = $m[1];
                            }

                            if ($icode)
                            {
                                $return["id"]  = $icode;
                                $return["url"] = $url;
                            }
                        }
                    }
                    elseif ("youku.com" == $k)
                    {
                        if (preg_match("~\/v\_playlist\/.+?\.htm~", $url) && ($html = $this->dfopen($url)))
                        {
                            if ($v["gzip"])
                            {
                                $html = $this->gzdecode($html);
                            }


                            $id = "";
                            if (preg_match("~\_href\s*\=\s*[\'\"]iku\:\/\/.+?http\:\/\/v\.youku\.com\/v\_show\/id\_([\w\d]+)\.htm~i", $html, $m) && $m[1])
                            {
                                $id = $m[1];
                            }

                            if ($id)
                            {
                                $return["id"]  = $id;
                                $return["url"] = $url;
                            }
                        }
                    }
                    elseif ("sina.com.cn" == $k)
                    {
                        if (preg_match("/video\.sina\.com\.cn\/.+?\/([\d\-]+)\.html/", $url) && ($html = $this->dfopen($url)))
                        {
                            if ($v["gzip"])
                            {
                                $html = $this->gzdecode($html);
                            }

                            $id = "";
                            if (preg_match("~vid\s*[\:]\s*[\'\"]([^\'\"]+?)[\'\"]~i", $html, $m) && $m[1])
                            {
                                $id = $m[1];
                            }

                            if ($id)
                            {
                                $return["id"]  = $id;
                                $return["url"] = $url;
                            }
                        }
                    }
                    elseif ("sohu.com" == $k)
                    {
                        if (preg_match("~tv\.sohu\.com\/([\w]+\/)+[\w]+\.shtml~i", $url) && ($html = $this->dfopen($url)))
                        {
                            if ($v["gzip"])
                            {
                                $html = $this->gzdecode($html);
                            }

                            $id = "";
                            if (preg_match("~vid\s*[\:\=]\s*[\'\"]([^\'\"]+?)[\'\"]~i", $html, $m) && $m[1])
                            {
                                $id = $m[1];
                            }
                            if ($id)
                            {
                                $return["id"]   = $id;
                                $return["url"]  = $url;
                                $return["host"] = "tv.sohu.com";
                            }
                        }
                    }

                    if ($return && !isset($return["host"]))
                    {
                        $return["host"] = $k;
                    }
                }
            }
        }

        if( !empty($return) )
        {
            $return['swf'] = str_replace('FLASHVAR', $return['id'], $swf[$return['host']]);
            return $return['swf'];
        }
        else
        {
            return FALSE;
        }
    }

    public function gzdecode($data)
    {
        $flags       = ord(substr($data, 3, 1));
        $headerlen   = 10;
        $extralen    = 0;
        $filenamelen = 0;
        if ($flags & 4)
        {
            $extralen  = unpack('v', substr($data, 10, 2));
            $extralen  = $extralen[1];
            $headerlen += 2 + $extralen;
        }
        if ($flags & 8)
            $headerlen = @strpos($data, chr(0), $headerlen) + 1;
        if ($flags & 16)
            $headerlen = @strpos($data, chr(0), $headerlen) + 1;
        if ($flags & 2)
            $headerlen += 2;
        $unpacked  = @gzinflate(substr($data, $headerlen));
        if ($unpacked === FALSE)
            $unpacked  = $data;
        return $unpacked;
    }

    public function dfopen($url, $limit = 10485760, $post = '', $cookie = '', $bysocket = false, $timeout = 5, $agent = "")
    {
        if (ini_get('allow_url_fopen') && !$bysocket && !$post)
        {
            $fp = @fopen($url, 'r');
            $s  = $t  = '';
            if ($fp)
            {
                while ($t = @fread($fp, 2048))
                {
                    $s.=$t;
                }
                fclose($fp);
            }
            if ($s)
            {
                return $s;
            }
        }

        $return  = '';
        $agent   = $agent ? $agent : "Mozilla/5.0 (compatible; Googlebot/2.1; +http:/" . "/www.google.com/bot.html)";
        $matches = parse_url($url);
        $host    = $matches['host'];
        $script  = $matches['path'] . (isset($matches['query']) ? '?' . $matches['query'] : '') . (isset($matches['fragment']) ? '#' . $matches['fragment'] : '');
        $script  = $script ? $script : '/';
        $port    = !empty($matches['port']) ? $matches['port'] : 80;
        if ($post)
        {
            $out = "POST $script HTTP/1.1\r\n";
            $out .= "Accept: */" . "*\r\n";
            $out .= "Referer: $url\r\n";
            $out .= "Accept-Language: zh-cn\r\n";
            $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
            $out .= "Accept-Encoding: none\r\n";
            $out .= "User-Agent: $agent\r\n";
            $out .= "Host: $host\r\n";
            $out .= 'Content-Length: ' . strlen($post) . "\r\n";
            $out .= "Connection: Close\r\n";
            $out .= "Cache-Control: no-cache\r\n";
            $out .= "Cookie: $cookie\r\n\r\n";
            $out .= $post;
        }
        else
        {
            $out = "GET $script HTTP/1.1\r\n";
            $out .= "Accept: */" . "*\r\n";
            $out .= "Referer: $url\r\n";
            $out .= "Accept-Language: zh-cn\r\n";
            $out .= "Accept-Encoding: none\r\n";
            $out .= "User-Agent: $agent\r\n";
            $out .= "Host: $host\r\n";
            $out .= "Connection: Close\r\n";
            $out .= "Cookie: $cookie\r\n\r\n";
        }

        $fp = $this->jfsockopen($host, $port);

        if (!$fp)
        {
            return false;
        }
        else
        {
            fwrite($fp, $out);
            $return = '';
            while (!feof($fp) && $limit > -1)
            {
                $limit -= 8192;
                $return .= @fread($fp, 8192);
                if (!isset($status))
                {
                    preg_match('|^HTTP/[^\s]*\s(.*?)\s|', $return, $status);
                    $status = $status[1];
                    if ($status != 200)
                    {
                        return false;
                    }
                }
            }
            fclose($fp);
            preg_match("/^Location: ([^\r\n]+)/m", $return, $match);
            if (!empty($match[1]) && $location = $match[1])
            {
                if (strpos($location, ":/" . "/") === false)
                {
                    $location = dirname($url) . '/' . $location;
                }
                $args     = func_get_args();
                $args[0]  = $location;
                return call_user_func_array("dfopen", $args);
            }
            if (false !== ($strpos   = strpos($return, "\r\n\r\n")))
            {
                $return = substr($return, $strpos);
                $return = preg_replace('~^\r\n\r\n(?:[\w\d]{1,8}\r\n)?~', "", $return);
                if ("\r\n\r\n" == substr($return, -4))
                {
                    $return = preg_replace('~(?:\r\n[\w\d]{1,8})?\r\n\r\n$~', "", $return);
                }
            }

            return $return;
        }
    }

    public function jfsockopen($hostname, $port, $errno = null, $errstr = null, $timeout = 30)
    {
        $fp = false;

        if (function_exists('fsockopen'))
        {
            @$fp = fsockopen($hostname, $port, $errno, $errstr, $timeout);
        }
        elseif (function_exists('pfsockopen'))
        {
            @$fp = pfsockopen($hostname, $port, $errno, $errstr, $timeout);
        }

        return $fp;
    }

}