Your browser does not support JavaScript! Udemy.Com Downloader ~~ Burtay.Org
    Follow @burtay  
  +31-653-420-829

Udemy.Com Downloader

   

Oluşturma Tarihi : 12.03.2016 14:45:54
Son Güncelleme   : 20.11.2017 17:47:44

All rise,i'm back bitches.Geçenlerde batman sendromu yazımı tamamlayamamıştım.Önce batman sendromu nedir onu önce anlayalım.Kısa ve özşekilde ilk elden; türk bilişimci hastalığıdır,as second view point türkiyenin kendisidir.Hani derler ya "bizim pilotlarımız dünyada ki en iyi pilot yok şurdaki yarışmada birinci olmuş burda ki uçağı tersten doksana takmış" diye.Kendisisinden vazgeçtim,üretebildiğin uçak parçası yok lan.Kalkmış pilotunla övünüyorsun.Hadi ordan hazerfan.Sosyolojik analizler şurada kalsın büyüklere masallar.Aslında iyi olmadığı halde kendisini,bağlı olduğu grubu yada düşünceyi en iyi olarak lanse etme eylemine burtayizm'de batman sendromu diyorum.Bizim hacker camiasının bloglarına bakın,birde adamların şöhretlerine bakın...İleriki yazılarda çokça yeri gelecektir emin olun.

Aslında bu konuda günde kaç site hacklenebilir bunun uygulamalı anlatımını yapacaktım.Fakat gerekli meteryalleri kodlamak için 4-5 saatlik bir boşluk bulamadım,bulamadık.Miyachung fahşiyatı da akşama elinde dedi,baktım ellerim bomboş,yüreğimde bir sızı...Bir sonraki yazıda inşaallah

O yüzden bugün hem kısa bir konu ile uzun süren sessliği bozalım hemde işinize yarayacak başka şeyler verelim.1 yıl kadar önce zannediyorum Ocak 2015 keltoş kankam aradı,heyecanlı heyecanlı udemy'de paralı eğitimleri indirebiliyorsun 5 dakikalık preview yaparak dedi.O zamanlar yoğun şekilde çalışıyorum günde 4-5 saat ancak uyuyacak vakit kalıyor.Miyachung fahşiyatına pasladım yine işi,ikisi kafa kafaya vermişler streaming datayı php ile çekemiyoruz deyip işin içinden çıkmışlar.aradan iki ay kadar geçince ilk fırsatta işe el attım.Aşağıdaki kodları yazarak udemyden aklınıza gelebilecek herşeyi çektim.Bunun için python ile yazılmış 3rd party bir yazılımı linux servera kurdum kendi yazdığım kodlarla üyelik oluşturup preview'a başladıktan sonra udemy-dl yazılımını çalıştırdım.Sonuç 750 GB data.Aslında bu 1 TB datayı geçerdi ama ŞAHBABA fahşiyatıda zamanında storage VPSden dataları çekmediği için.Ödeme süresi geçince VPS ile beraber datalarımızda kayboldu.Gelelim kodlara.Artık kendi arşivinizi oluşturabilirsiniz.Hani bazı paralı siteler var udemy ripper servisi veriyor.Ha işte o siteler bu tekniği kullanıyor.Boşa para vermeyin.Tek yol Burtayizm.



cookie_file);	
		curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/'.$this->cookie_file);
		$calis		=	curl_exec($curl);
		return $calis;
	}

	public function get($site)
	{
		$curl		=	curl_init();					
		curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
		curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($curl,CURLOPT_URL,$site);		
		curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/'.$this->cookie_file);	
		curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/'.$this->cookie_file);
		curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);
		$calis		=	curl_exec($curl);
		return $calis;	
	}
	
	private function token_al()
	{
		$kaynak = $this->get("https://www.udemy.com/join/signup-popup/");
		$ayir = explode("name='csrfmiddlewaretoken' value='",$kaynak);
		$ayir = explode("'",$ayir[1]);
		$this->token = $ayir[0];
	}
	
	public function udemy_register()
	{
		echo '[+]Yeni Uye Olusturuluyor';
		$this->cookie_sil();
		$this->token_al();
		$this->username = rand(234,47667854564).'@hotmail.com';
		$post = 'csrfmiddlewaretoken='.$this->token.'&locale=tr_TR&fullname=asdas&email='.$this->username.'&password=password&should_subscribe_to_emails=on';
		$kaynak = $this->post('https://www.udemy.com/join/signup-popup/',$post,'https://www.udemy.com/join/signup-popup/',true,false);
	}
	
	private function cookie_sil()
	{
		unlink($this->cookie_file);
		touch($this->cookie_file);
	}
	
	public function login($username)
	{
            $this->token_al();
            $post = 'csrfmiddlewaretoken='.$this->token.'&locale=tr_TR&fullname=asdas&email='.$username.'&password=password&should_subscribe_to_emails=on';
            file_put_contents('test.html',$kaynak = $this->post('https://www.udemy.com/join/signup-popup/',$post,'https://www.udemy.com/join/signup-popup/',true,false));
	}
}

$c = new curl();
$dosya = file("tutorials.txt");
$dosya = array_unique($dosya);

	$c->udemy_register();
	$username = $c->username;
foreach($dosya as $link)
{
	$password = "password";
	$kaynak   =  $c->get(trim($link));
	$zip_isim =  explode('/',$link); 
	$isim = trim($zip_isim[3]);
	preg_match('#data-course-id="(.*?)"#si',$kaynak,$son);
	$url  = "https://www.udemy.com/course/preview-subscribe/?courseId=".$son[1];
	file_put_contents('a.html',$c->get($url));
	echo "Downloading ".$link."
\n"; echo "Pre-Watching ".$url."
\n"; echo system("udemy-dl -u ".$username." -p ".$password." ".trim($link)); system("zip -r ".$isim.".zip ".dirname(__FILE__)."/".$isim); if(file_exists($isim.".zip")) { system("rm -rf ".$isim); } } ?>


2 gün önce bi update çekeyim dedim.Derken Shardul Mahadik adlı arkadaşın işi tamamen kolaya dökütüğünü gördüm.Buda o arakadaşın kodları.Salt PHP.

functions.php
 $info['http_code'], 'body' => $response, 'headers' => explode("\r\n", $headers)];
	}

	function unique_id($l = 8) {
    	return substr(md5(uniqid(mt_rand(), true)), 0, $l);	
	}

	function parse_links($courseId, $data, $extras = true)
	{
		$chapter_contents = array();
		$chapter_contents[0] = array();
		$current_chapter = 0;
		$final_data = array('type'=>'folder',
							'title'=>safe_filename($courseId));
		$first_chapter = true;
		$offset = 0;

		foreach($data as $item)
		{
			if($item["__class"]=="chapter")
			{
				if($first_chapter)
				{
					$final_data['contents'] = array();
					if(count($chapter_contents[0])>0)
					{
						$final_data['contents'] = $chapter_contents[0];
					}
					$offset = count($chapter_contents[0]);
					$first_chapter = false;
				}
				else
				{
					$final_data['contents'][$current_chapter+$offset-1]['contents'] = $chapter_contents[$current_chapter];
				}
				$current_chapter++;
				$chapter_contents[$current_chapter] = array();
				$chapter = array('type'=>'folder',
								'title'=>safe_filename($item["title"]),
								'index'=>$item["index"]);
				array_push($final_data['contents'], $chapter);
			}
			else if($item["__class"]=="lecture")
			{
				if($item["assetType"]=="Article")
				{
					$asset = array('type'=>'file',
								'data'=>'text',
								'extension'=>'html',
								'title'=>safe_filename($item["title"]),
								'index'=>$item["lectureIndex"],
								'contents'=>$item['asset']["data"]["body"]);
					array_push($chapter_contents[$current_chapter],$asset);
				}
				else if($item["assetType"]=="Presentation")
				{
					if(!empty($item['asset']['downloadUrl']['download']))
					{
						$asset = array('type'=>'file',
									'data'=>'link',
									'extension'=> end(explode(".", strtolower($item['asset']['data']['name']))),
									'title'=>safe_filename($item["title"]),
									'index'=>$item["lectureIndex"],
									'contents'=>$item['asset']['downloadUrl']['download']);
						array_push($chapter_contents[$current_chapter],$asset);
					}
					else
					{
						$asset = array('type'=>'folder',
									'title'=>safe_filename($item["title"]),
									'index'=>$item["lectureIndex"],
									'contents'=>array());
						preg_match('/src="https:\/\/www.udemy.com\/embed\/presentation\/(.*?)\/" width/',$item['asset']['viewHTML'],$matches);
						$asset['contents'] = get_links('presentation',$matches[1]);
						//array_push($chapter_contents[$current_chapter],$asset);
					}	
				}
				else if($item["assetType"]=="VideoMashup")
				{
					if(!empty($item['asset']['downloadUrl']['download']))
					{
						$asset = array('type'=>'file',
									'data'=>'link',
									'extension'=> 'mp4',
									'title'=>safe_filename($item["title"]),
									'index'=>$item["lectureIndex"],
									'contents'=>$item['asset']['downloadUrl']['Video']['0']);
						array_push($chapter_contents[$current_chapter],$asset);

						$asset = array('type'=>'file',
									'data'=>'link',
									'extension'=> 'pdf',
									'title'=>safe_filename($item["title"]),
									'index'=>$item["lectureIndex"],
									'contents'=>$item['asset']['downloadUrl']['download']);
						array_push($chapter_contents[$current_chapter],$asset);
					}
					else
					{
						$asset = array('type'=>'file',
									'data'=>'link',
									'extension'=>'mp4',
									'title'=>safe_filename($item["title"]),
									'index'=>$item["lectureIndex"]);
						preg_match('/src="(.*?)\/" width/',$item['asset']['viewHTML'],$matches);
						$asset['contents'] = get_links('videomashup',$matches[1]);
						array_push($chapter_contents[$current_chapter],$asset);
					}
				}
				else if($item["assetType"]=="Video")
				{
					if(!empty($item['asset']['downloadUrl']['download']))
					{
						$asset = array('type'=>'file',
									'data'=>'link',
									'extension'=> end(explode(".", strtolower($item['asset']['data']['name']))),
									'title'=>safe_filename($item["title"]),
									'index'=>$item["lectureIndex"],
									'contents'=>$item['asset']['downloadUrl']['download']);
						array_push($chapter_contents[$current_chapter],$asset);
					}
					else
					{
						$asset = array('type'=>'file',
									'data'=>'link',
									'extension'=>'mp4',
									'title'=>safe_filename($item["title"]),
									'index'=>$item["lectureIndex"]);
						preg_match('/src="(.*?)\/" width/',$item['asset']['viewHTML'],$matches);
						$asset['contents'] = get_links('video',$matches[1]);
						array_push($chapter_contents[$current_chapter],$asset);
					}
				}
				else if($item["assetType"]=="E-Book")
				{
					if(!empty($item['asset']['downloadUrl']['download']))
					{
						$asset = array('type'=>'file',
									'data'=>'link',
									'extension'=> end(explode(".", strtolower($item['asset']['data']['name']))),
									'title'=>safe_filename($item["title"]),
									'index'=>$item["lectureIndex"],
									'contents'=>$item['asset']['downloadUrl']['download']);
						array_push($chapter_contents[$current_chapter],$asset);
					}
					else
					{
						$asset = array('type'=>'folder',
									'title'=>safe_filename($item["title"]),
									'index'=>$item["lectureIndex"],
									'contents'=>array());
						preg_match('/src="https:\/\/www.udemy.com\/embed\/e-book\/(.*?)\/" width/',$item['asset']['viewHTML'],$matches);
						$asset['contents'] = get_links('e-book',$matches[1]);
						//array_push($chapter_contents[$current_chapter],$asset);
					}
				}
				else
				{
					if(!empty($item['asset']['downloadUrl']['download']))
					{
						$asset = array('type'=>'file',
									'data'=>'link',
									'extension'=> end(explode(".", strtolower($item['asset']['data']['name']))),
									'title'=>safe_filename($item["title"]),
									'index'=>$item["lectureIndex"],
									'contents'=>$item['asset']['downloadUrl']['download']);
						array_push($chapter_contents[$current_chapter],$asset);
					}
				}

				if($extras)
				{
					if(count($item["extras"]) > 0)
					{
						$actual_count=0;
						$extras_folder = array('type'=>'folder',
											'title'=> "Extras",
											'index'=>$item["lectureIndex"]);
						$extras_content = array();
						foreach ($item["extras"] as $key => $extra)
						{
							if(!empty($extra['downloadUrl']['download']))
							{
								$actual_count++;
								$asset = array('type'=>'file',
											'data'=>'link',
											'extension'=> end(explode(".", strtolower($extra['data']['name']))),
											'title'=> safe_filename($extra["title"]),
											'index'=> ($key+1),
											'lindex' => $extras_folder['index'],
											'contents'=>$extra['downloadUrl']['download']);
								array_push($extras_content, $asset);
							}
						}
						$extras_folder['contents'] = $extras_content;
						if($actual_count > 0)
						{
							array_push($chapter_contents[$current_chapter], $extras_folder);
						}
					}
					
				}
			}

		}
		$final_data['contents'][$current_chapter+$offset-1]['contents'] = $chapter_contents[$current_chapter];
		return $final_data;
	}

	function safe_filename($string)
	{
		return preg_replace(array('/\s/', '/\.[\.]+/', '/[^\w_\.\-]/'), array('_', '.', ''), $string);
	}

	function get_links($type, $link)
	{
		if($type=='video')
		{
			$file = file_get_contents($link);
			preg_match('/= $start) && (empty($end) || $curr_index <= $end)))){
					$outputfile = $dir.DIRECTORY_SEPARATOR.convert_to_filename($content['index']."_".$content['title'].".".$content['extension']);
					if(!file_exists($outputfile)) {
						if($content["data"] == "link")
							switch ($downloader) {
								case 'idm':
									exec("idman /d \"".$content['contents']."\" /p \"".$dir."\" /a /n /f \"".convert_to_filename($content['index']."_".$content['title'].".".$content['extension'])."\" & ping 127.0.0.1 -n 2 > nul");
									break;
								default:
									exec("wget -O ".$outputfile." \"".$content['contents']."\"");
									break;
							}
						else if($content["data"] == "text")
							file_put_contents($outputfile, $content['contents']);
					}
				}
			}
		}
	}
	function print_help() {
		echo "Usage: php udemy-dl.php [OPTIONS]\n";
		echo "OPTIONS\n";
		echo "  -h, --help\t\tPrint this help text and exit\n";
		echo "  -i, --id ID\t\tCourse ID of the course to be downloaded\n";
		echo "  -u, --url URL\t\tURL of the course to be downloaded\n\t\t\t(Ingored if course ID is specified)\n";
		echo "  -s, --start INDEX\tStarts downloading directly from file #INDEX\n";
		echo "  -e, --end INDEX\tStops downloading after file #INDEX\n";
		echo "  -l, --list I1, I2...\tDownloads all files with indexes specified in the list\n";
		echo "  -f, --folder FOLDER\tSpecifies the folder where files will be downloaded.\n\t\t\tDefault folder is current working directory\n";
		echo "  -d, --downloader NAME\tSpecifies the download manager to be used.\n\t\t\tOptions: wget, idm\n\t\t\tDefault is wget\n";
		die();
	}

	function get_cli_option($options,$long,$short) {
		if (isset($options[$long]) || isset($options[$short])) {
			return isset($options[$long]) ? $options[$long] : $options[$short];
		}
		return null;
	}
?>


urls.php
 [
			'method' => 'GET',
			'options' => [
				'redirect' => true,
				'headers' => [
					'Referer: https://www.udemy.com/',
					'Host: www.udemy.com'
				]
			]
		],
		'register' => [
			'link' => 'https://www.udemy.com/api-2.0/users/',
			'method' => 'POST',
			'options' => [
				'headers' => array_merge($mobile_headers,
							 ['X-Udemy-Client-Secret: a7c630646308824b2301fdb60ecfd8a0947e82d5',
							  'Authorization: Basic YWQxMmVjYTljYmUxN2FmYWM2MjU5ZmU1ZDk4NDcxYTY6YTdjNjMwNjQ2MzA4ODI0YjIzMDFmZGI2MGVjZmQ4YTA5NDdlODJkNQ=='])
			]
		],
		'login' => [
			'link' => 'https://www.udemy.com/join/login-popup/?displayType=ajax&display_type=popup&showSkipButton=1&returnUrlAfterLogin=https%3A%2F%2Fwww.udemy.com%2F&next=https%3A%2F%2Fwww.udemy.com%2F&locale=en_US',
			'method' => 'GET',
			'options' => [
				'cookie' => true,
				'redirect' => false,
				'headers' => [
					'Referer: https://www.udemy.com/join/login-popup/?displayType=ajax&display_type=popup&showSkipButton=1&returnUrlAfterLogin=https%3A%2F%2Fwww.udemy.com%2F&next=https%3A%2F%2Fwww.udemy.com%2F&locale=en_US',
					'Host: www.udemy.com'
				]
			]
		],
		'subscribePreview' => [
			'link' => 'https://www.udemy.com/course/preview-subscribe/?courseId=:courseId',
			'method' => 'GET',
			'options' => [
				'cookie' => true,
				'redirect' => false,
				'headers' => [
					'Host: www.udemy.com',
					'Accept: application/json, text/plain, */*',
				],
			],
		],
		'course' => [
			'link' => 'https://www.udemy.com/api-1.1/courses/:courseId/curriculum?fields[lecture]=title,asset,extras,assetType,lectureIndex,contextInfo,courseId,url,isFree,chapterIndex,sortOrder,hasCaption',
			'method' => 'GET',
			'options' =>[
				'cookie' => false,
				'redirect' => true,
				'headers' => $mobile_headers
			]
		]
	];
?>


udemy-dl.php
 "John Doe",
	'email' => "john_doe_".$id."@eyepaste.com",
	'cookiefile' => $cookiefolder.DIRECTORY_SEPARATOR.$id.".txt",
	'password' => "johndoe"
	];

	// ***********************************************
	//	              Registration
	// ***********************************************

	echo "Registering....\n";
	$register['options'] = $urls['register']['options'];
	$register['options']['body'] = ['fullname' => $user['name'], 'email' => $user['email'], 'password' => $user['password'], 'timezone' => 'Asia/Calcutta', 'is_generated' => '0', 'locale' => 'en_US'];
	$register['response'] = common_curl($urls['register']['link'], $urls['register']['method'], $register['options']);
	$register['decoded_response'] = json_decode($register['response']['body'], true);
	$user['accesstoken'] = $register['decoded_response']['access_token'];

	if(empty($user['accesstoken']))
		die("Failed to register user");
	else
		echo "Registration successful\n";

	// ***********************************************
	//	                 Login
	// ***********************************************

	echo "Logging in....\n";
	$login['options'] = $urls['login']['options'];
	$login['options']['cookiefile'] = $user['cookiefile'];
	$login['response'] = common_curl($urls['login']['link'], $urls['login']['method'], $login['options']);

	if ($login['response']['status'] == 302 && in_array("Location: https://www.udemy.com/", $login['response']['headers'])) {
		$login['loggedin'] = true;
		echo "Login successful\n";
	}
	else {
		preg_match('/
    (
  • .*?<\/li>)<\/ul>/', $login['response']['body'], $login['errors']); if (!empty($login['errors'])) { die("Invalid Credentials"); } else echo "Login successful\n"; } else die("Error fetching login page"); } // *********************************************** // Subscribe // *********************************************** echo "Subscribing to course....\n"; $subscribe['options'] = $urls['subscribePreview']['options']; $subscribe['options']['cookiefile'] = $user['cookiefile']; $subscribe = common_curl(str_replace(':courseId', $courseId, $urls['subscribePreview']['link']) , $urls['subscribePreview']['method'], $subscribe['options']); // *********************************************** // Fetch Curriculum // *********************************************** echo "Fetching course curriculum....\n"; $course['options'] = $urls['course']['options']; $course['options']['headers'] = array_merge($course['options']['headers'], ['X-Udemy-Bearer-Token: ' . $user['accesstoken']]); $course['link'] = str_replace(':courseId', $courseId, $urls['course']['link']); $course['response'] = common_curl($course['link'], $urls['course']['method'], $course['options']); $course['extras'] = true; if ($course['response']['status'] != 200) { $course['response'] = common_curl(str_replace('extras,', '', $course['link']) , $urls['course']['method'], $course['options']); $course['extras'] = false; } if ($course['response']['status'] != 200) die("Error fetching course details"); $course['decoded_response'] = json_decode($course['response']['body'], true); echo "Parsing links....\n"; $course['download_links'] = parse_links($courseId, $course['decoded_response'], $course['extras']); // *********************************************** // Download Course // *********************************************** echo "Downloading course....\n"; if (!file_exists($basedir)) mkdir($basedir); download_folder($basedir, $course['download_links'], $start, $end, $list, $downloader); switch ($downloader) { case 'idm': exec("idman /s"); echo "Course added to IDM and downloading started.\n"; break; default: echo "Course download complete.\n"; break; } ?>

Fork me on GitHub