<?php
$_C00KIES = "cookies.txt" ;
$aVideos = array(" http://youtu.be/s--tMejlb_U?list=PLKpuH40Zgi4iSN26rouLAUCRZEUi8wSqa " );
$aUsers = array();
$aUsers [ 0 ] = array( "somemail@gmail.com" , "password_here" );
//$aUsers[1] = array("somemail@gmail.com","password_here");
for( $x = 0 ; $x < count ( $aVideos ); $x ++){
for( $y = 0 ; $y < count ( $aUsers ); $y ++){
if( file_exists ( $_C00KIES )){
@ unlink ( $_C00KIES );
}
$sYTLink = $aVideos [ $x ];
$sUser = $aUsers [ $y ][ 0 ];
$sPass = $aUsers [ $y ][ 1 ];
if( false !==( $iPos = strpos ( $sYTLink , "&" ))){
$sYTLink = substr ( $sYTLink , 0 , $iPos );
}
$aVID = explode ( "=" , $sYTLink );
if(!isset( $aVID [ 1 ])){
die( "Invalid video" );
}
$sVID = $aVID [ 1 ];
// open gmail and get dynamic field values everytime we start a login attempt
$ch = curl_init ( "https://accounts.google.com/ServiceLogin?continue=http%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26feature%3Dsign_in_button%26hl%3Dnl_NL%26next%3D%252F%26nomobiletemp%3D1&passive=true&service=youtube&uilel=3&hl=nl_NL" );
curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , true );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $ch , CURLOPT_SSL_VERIFYPEER , false );
curl_setopt ( $ch , CURLOPT_USERAGENT , $_SERVER [ 'HTTP_USER_AGENT' ]);
curl_setopt ( $ch , CURLOPT_SSL_VERIFYHOST , false );
curl_setopt ( $ch , CURLOPT_COOKIEFILE , $_C00KIES );
$sData = curl_exec ( $ch );
// get login form
$sPattern = "/<form(?=[^>]*novalidate id=\"gaia_loginform\")[^>].+<\/form>/Uis" ;
preg_match ( $sPattern , $sData , $aData );
if(isset( $aData [ 0 ])){
// get action
$sPattern = "/action=\"([^\"]+)/is" ;
preg_match ( $sPattern , $aData [ 0 ], $aTarget );
$sTarget = $aTarget [ 1 ];
// get all inputs
$sPattern = "/<input[^>]+/is" ;
preg_match_all ( $sPattern , $aData [ 0 ], $aInput );
// go through the inputs and extract the vars and their values
$sPost = "" ;
for( $y = 0 ; $y < count ( $aInput [ 0 ]); $y ++){
if( $y > 0 ){
$sPost .= "&" ;
}
// get var names
$sPattern = "/name=\"([^\"]+)/is" ;
preg_match ( $sPattern , $aInput [ 0 ][ $y ], $aVar );
if(!isset( $aVar [ 1 ])){
// no name
continue;
}
$sPost .= $aVar [ 1 ]. "=" ;
// add pass
if( $aVar [ 1 ]== "Passwd" ){
$sPost .= $sPass ;
continue;
}
// add email/user
if( $aVar [ 1 ]== "Email" ){
$sPost .= $sUser ;
continue;
}
// get values
$sPattern = "/value=\"([^\"]+)/is" ;
preg_match ( $sPattern , $aInput [ 0 ][ $y ], $aVal );
if(!isset( $aVal [ 1 ]) || empty( $aVal [ 1 ])){
// no value
continue;
}
$sPost .= $aVal [ 1 ];
}
// in case we are skipping an input with no name
$sPost = str_replace ( "&&" , "&" , $sPost );
curl_setopt ( $ch , CURLOPT_URL , $sTarget );
curl_setopt ( $ch , CURLOPT_POST , true );
curl_setopt ( $ch , CURLOPT_POSTFIELDS , $sPost );
curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , true );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $ch , CURLOPT_HTTPHEADER , array( "Content-type: application/x-www-form-urlencoded" ));
$sResponse = curl_exec ( $ch );
// find the user style string if it is there, login was successful
$iPos = strpos ( $sResponse , "refresh" );
if( $iPos ){
// ok we have logged in, go to youtube and get the video
curl_setopt ( $ch , CURLOPT_URL , $sYTLink );
curl_setopt ( $ch , CURLOPT_POST , false );
curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , true );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
$sResponse = curl_exec ( $ch );
preg_match ( '/\'PLAYBACK_ID\':\s+\"(.*)\"/' , $sResponse , $aPID );
preg_match ( '/yt\.setAjaxToken\(\'watch_actions_ajax\',\s+\"(.*)\"/' , $sResponse , $aSessionToken );
if(!isset( $aPID [ 1 ])){
echo "No playback id found" ;
}
elseif(!isset( $aSessionToken [ 1 ])){
echo "No session id found" ;
}
else{
// like this video
curl_setopt ( $ch , CURLOPT_URL , "http://www.youtube.com/watch_actions_ajax?action_like_video=1&video_id=" . $sVID . "&plid=" . $aPID [ 1 ]);
curl_setopt ( $ch , CURLOPT_POST , true );
curl_setopt ( $ch , CURLOPT_POSTFIELDS , "session_token=" . $aSessionToken [ 1 ]. "&screen=" . rawurlencode ( "h=800&w=1280&d=24" ));
curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , true );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $ch , CURLOPT_HTTPHEADER , array( "Content-type: application/x-www-form-urlencoded" ));
$sResponse = curl_exec ( $ch );
curl_close ( $ch );
//echo $sResponse;
}
}
else{
echo "Login failed" ;
}
}
else{
die( "Unable to find login form, terminating script\n" );
}
}
}
?>
$_C00KIES = "cookies.txt" ;
$aVideos = array(" http://youtu.be/s--tMejlb_U?list=PLKpuH40Zgi4iSN26rouLAUCRZEUi8wSqa " );
$aUsers = array();
$aUsers [ 0 ] = array( "somemail@gmail.com" , "password_here" );
//$aUsers[1] = array("somemail@gmail.com","password_here");
for( $x = 0 ; $x < count ( $aVideos ); $x ++){
for( $y = 0 ; $y < count ( $aUsers ); $y ++){
if( file_exists ( $_C00KIES )){
@ unlink ( $_C00KIES );
}
$sYTLink = $aVideos [ $x ];
$sUser = $aUsers [ $y ][ 0 ];
$sPass = $aUsers [ $y ][ 1 ];
if( false !==( $iPos = strpos ( $sYTLink , "&" ))){
$sYTLink = substr ( $sYTLink , 0 , $iPos );
}
$aVID = explode ( "=" , $sYTLink );
if(!isset( $aVID [ 1 ])){
die( "Invalid video" );
}
$sVID = $aVID [ 1 ];
// open gmail and get dynamic field values everytime we start a login attempt
$ch = curl_init ( "https://accounts.google.com/ServiceLogin?continue=http%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26feature%3Dsign_in_button%26hl%3Dnl_NL%26next%3D%252F%26nomobiletemp%3D1&passive=true&service=youtube&uilel=3&hl=nl_NL" );
curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , true );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $ch , CURLOPT_SSL_VERIFYPEER , false );
curl_setopt ( $ch , CURLOPT_USERAGENT , $_SERVER [ 'HTTP_USER_AGENT' ]);
curl_setopt ( $ch , CURLOPT_SSL_VERIFYHOST , false );
curl_setopt ( $ch , CURLOPT_COOKIEFILE , $_C00KIES );
$sData = curl_exec ( $ch );
// get login form
$sPattern = "/<form(?=[^>]*novalidate id=\"gaia_loginform\")[^>].+<\/form>/Uis" ;
preg_match ( $sPattern , $sData , $aData );
if(isset( $aData [ 0 ])){
// get action
$sPattern = "/action=\"([^\"]+)/is" ;
preg_match ( $sPattern , $aData [ 0 ], $aTarget );
$sTarget = $aTarget [ 1 ];
// get all inputs
$sPattern = "/<input[^>]+/is" ;
preg_match_all ( $sPattern , $aData [ 0 ], $aInput );
// go through the inputs and extract the vars and their values
$sPost = "" ;
for( $y = 0 ; $y < count ( $aInput [ 0 ]); $y ++){
if( $y > 0 ){
$sPost .= "&" ;
}
// get var names
$sPattern = "/name=\"([^\"]+)/is" ;
preg_match ( $sPattern , $aInput [ 0 ][ $y ], $aVar );
if(!isset( $aVar [ 1 ])){
// no name
continue;
}
$sPost .= $aVar [ 1 ]. "=" ;
// add pass
if( $aVar [ 1 ]== "Passwd" ){
$sPost .= $sPass ;
continue;
}
// add email/user
if( $aVar [ 1 ]== "Email" ){
$sPost .= $sUser ;
continue;
}
// get values
$sPattern = "/value=\"([^\"]+)/is" ;
preg_match ( $sPattern , $aInput [ 0 ][ $y ], $aVal );
if(!isset( $aVal [ 1 ]) || empty( $aVal [ 1 ])){
// no value
continue;
}
$sPost .= $aVal [ 1 ];
}
// in case we are skipping an input with no name
$sPost = str_replace ( "&&" , "&" , $sPost );
curl_setopt ( $ch , CURLOPT_URL , $sTarget );
curl_setopt ( $ch , CURLOPT_POST , true );
curl_setopt ( $ch , CURLOPT_POSTFIELDS , $sPost );
curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , true );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $ch , CURLOPT_HTTPHEADER , array( "Content-type: application/x-www-form-urlencoded" ));
$sResponse = curl_exec ( $ch );
// find the user style string if it is there, login was successful
$iPos = strpos ( $sResponse , "refresh" );
if( $iPos ){
// ok we have logged in, go to youtube and get the video
curl_setopt ( $ch , CURLOPT_URL , $sYTLink );
curl_setopt ( $ch , CURLOPT_POST , false );
curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , true );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
$sResponse = curl_exec ( $ch );
preg_match ( '/\'PLAYBACK_ID\':\s+\"(.*)\"/' , $sResponse , $aPID );
preg_match ( '/yt\.setAjaxToken\(\'watch_actions_ajax\',\s+\"(.*)\"/' , $sResponse , $aSessionToken );
if(!isset( $aPID [ 1 ])){
echo "No playback id found" ;
}
elseif(!isset( $aSessionToken [ 1 ])){
echo "No session id found" ;
}
else{
// like this video
curl_setopt ( $ch , CURLOPT_URL , "http://www.youtube.com/watch_actions_ajax?action_like_video=1&video_id=" . $sVID . "&plid=" . $aPID [ 1 ]);
curl_setopt ( $ch , CURLOPT_POST , true );
curl_setopt ( $ch , CURLOPT_POSTFIELDS , "session_token=" . $aSessionToken [ 1 ]. "&screen=" . rawurlencode ( "h=800&w=1280&d=24" ));
curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , true );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $ch , CURLOPT_HTTPHEADER , array( "Content-type: application/x-www-form-urlencoded" ));
$sResponse = curl_exec ( $ch );
curl_close ( $ch );
//echo $sResponse;
}
}
else{
echo "Login failed" ;
}
}
else{
die( "Unable to find login form, terminating script\n" );
}
}
}
?>
