ホームページ  >  記事  >  php教程  >  获取 youku 视频最终地址

获取 youku 视频最终地址

WBOY
WBOYオリジナル
2016-06-13 11:31:581097ブラウズ

<?php


class YoukuFlv{

	static private $error	=	"";
	static private $result	=	array();

	static public function getYoukuFlv($url){
		//从url获取youkuid
		if(! $id	=	self::getYoukuId($url)){
			return false;
		}
		//获取youku视频详细信息
		$content	=	self::get_curl_contents( "http://v.youku.com/player/getPlayList/VideoIDS/".$id );
		$data	=	json_decode($content);
		if(!isset($data->data[0]->streamfileids)){
			self::$error	=	"Cannot find this video";
			return false;
		}
		foreach($data->data[0]->streamfileids AS $k=>$v){
			if($k == 'flv' || $k == 'mp4'){			
				//sid
				$sid=	self::getSid();
				//fileid
				$fileid	=	self::getfileid($v,$data->data[0]->seed);
				$one=($data->data[0]->segs->$k);
				self::$result[$k]	= "http://f.youku.com/player/getFlvPath/sid/{$sid}_00/st/{$k}/fileid/{$fileid}?K={$one[0]->k}";
			}
		}
		if(empty(self::$result)){
			self::$error	=	"THIS VIOD IS NOT IN MP4 OR FLV FORMAT";
			return false;
		}else{
			return true;
		}
	} 
	static public function error(){
		return self::$error;
	}

	static public function result(){
		return self::$result;
	}

	static private function getYoukuId($url){		
		//url 不能为空
		if($url == "" || substr($url , 0 , 29) != "http://v.youku.com/v_show/id_"){
			self::$error	=	"URL IS ERROR";
			return false;
		}
		return substr($url , 29 , -5);		
	}

	static private function get_curl_contents($url, $second = 5){
		if(!function_exists('curl_init')) die('php.ini未开启php_curl.dll');
		$c = curl_init();
		curl_setopt($c,CURLOPT_URL,$url);
		$UserAgent=$_SERVER['HTTP_USER_AGENT'];
		curl_setopt($c,CURLOPT_USERAGENT,$UserAgent);
		curl_setopt($c,CURLOPT_HEADER,0);
		curl_setopt($c,CURLOPT_TIMEOUT,$second);
		curl_setopt($c,CURLOPT_RETURNTRANSFER, true);
		$cnt = curl_exec($c);
		curl_close($c);
		return $cnt;
	}
	static private function getSid() {
		$sid = time().(rand(0,9000)+10000);
		return $sid;
	}
	static private function getfileid($fileId,$seed) {
		$mixed = self::getMixString($seed);
		$ids = explode("*",$fileId);
		unset($ids[count($ids)-1]);
		$realId = "";
		for ($i=0;$i < count($ids);++$i) {
			$idx = $ids[$i];
			$realId .= substr($mixed,$idx,1);
		}
		return $realId;
	}
	static private function getMixString($seed) {
		$mixed = "";
		$source = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890";
		$len = strlen($source);
		for($i=0;$i< $len;++$i){
			$seed = ($seed * 211 + 30031) % 65536;
			$index = ($seed / 65536 * strlen($source));
			$c = substr($source,$index,1);
			$mixed .= $c;
			$source = str_replace($c, "",$source);
		}
		return $mixed;
	}
}



if(YoukuFlv::getYoukuFlv("http://v.youku.com/v_show/id_XNjEyOTE4NTEy_ev_1.html")){
	print_r( YoukuFlv::result() );
}else{
	echo YoukuFlv::error();
}

?>

 还有一种 方法

http://player.youku.com/player.php/sid/XMjI0MDIwNDc2/v.swf

http://player.youku.com/player.php/sid/{$id}/v.swf

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。