Php Google drive video indirme (Kalite seçenekli)

Posted by krmylmz on 4 September 2018 Tuesday 13:51:33

Google drive üzerinde işlenmiş ve herkese açık videoları kalite seçimine göre alabilmenize yarayacak bir fonksiyon paylaşmak istedim. Fonksiyon alttaki gibidir. Elde edilen cookie ile curl bağlantısı sağladığınızda video/mp4 mime type dosyaya erişim sağlayabilirsiniz.

<?php
	## www.kerimyilmaz.com.tr
	## 04.18
	function getDriveLink($link)
	{
		$ch = curl_init($link);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_HEADER, 1);
		$result = curl_exec($ch);
		preg_match_all('/^Set-Cookie:s*([^;]*)/mi', $result, $matches);
		$cookies = array();
		foreach($matches[1] as $item) {
		    parse_str($item, $cookie);
		    $cookies = array_merge($cookies, $cookie);
		}
		$cc = 'Domain=.docs.google.com; Path=/; Secure; ';
		foreach($cookies as $k=>$c)
		{
			if($k == "DRIVE_STREAM")
			{
				$cc .= ''.$k.'='.$c.'; ';
			}
		}
		
		$e = explode('url_encoded_fmt_stream_map',$result);
		$e1 = explode('","',$e[1]);
		$e2 = explode('"]',$e1[1]);
		$p = urldecode($e2[0]);	
		$str=str_replace("u003d",'=',$p);
		
		
		preg_match('#url=(.*?)quality=hd1080#',$str,$r1080);
		$rx = @explode('u0026',$r1080[1]);
		$ret = array();
		$p1080 = $rx[0];
		if($p1080 != "")
		{
			$ret["1080p"] = array(
			'url' 		=> $p1080,
			'cookie'	=> $cc,
			);
		}
	
		preg_match('#url=(.*?)quality=large#',$str,$r720);
		$rx = @explode('u0026',$r720[1]);
		$p720 = $rx[0];	
		if($p720 != "")
		{
			$ret["720p"] = array(
			'url' 		=> $p720,
			'cookie'	=> $cc,
			);
		}
		
		preg_match('#url=(.*?)quality=large#',$str,$r480);
		$rx = @explode('u0026',$r480[1]);
		$p480 = $rx[0];
		if($p480!="")
		{
			$ret["480p"] = array(
			'url' 		=> $p480,
			'cookie'	=> $cc,
			);
		}
		
		preg_match('#url=(.*?)quality=medium#',$str,$r360);
		$rx = @explode('u0026',$r360[1]);
		$p360 = $rx[0];
		if($p360!="")
		{
			$ret["360p"] = array(
			'url' 		=> $p360,
			'cookie'	=> $cc,
			);
		}
		return $ret;
}
$out = getDriveLink("https://drive.google.com/file/d/0BwGXXWj-fxjIODI2WTlsT2d4YTA/view");
var_dump($out);