193 lines
6.5 KiB
PHP
Executable File
193 lines
6.5 KiB
PHP
Executable File
<?php
|
|
$_pluginInfo=array(
|
|
'name'=>'YouTube',
|
|
'version'=>'1.0.2',
|
|
'description'=>"Get the contacts from a YouTube account AddressBook ",
|
|
'base_version'=>'1.8.0',
|
|
'type'=>'email',
|
|
'check_url'=>'http://www.youtube.com',
|
|
'requirement'=>'user',
|
|
'allowed_domains'=>false,
|
|
);
|
|
/**
|
|
* Youtube Plugin
|
|
*
|
|
* Imports user's contacts from YouTube AddressBook and
|
|
|
|
*
|
|
* @author OpenInviter
|
|
* @version 1.0.0
|
|
*/
|
|
class youtube extends openinviter_base
|
|
{
|
|
private $login_ok=false;
|
|
public $showContacts=true;
|
|
public $debug_array=array(
|
|
'initial_get'=>'ltmpl',
|
|
'login_post'=>'location.replace(',
|
|
'url_redirect'=>'gXSRF_token',
|
|
'url_addressbook'=>'YT_address_book',
|
|
'url_contacts'=>'fid'
|
|
|
|
);
|
|
|
|
/**
|
|
* Login function
|
|
*
|
|
* Makes all the necessary requests to authenticate
|
|
* the current user to the server.
|
|
*
|
|
* @param string $user The current user.
|
|
* @param string $pass The password for the current user.
|
|
* @return bool TRUE if the current user was authenticated successfully, FALSE otherwise.
|
|
*/
|
|
public function login($user,$pass)
|
|
{
|
|
$this->resetDebugger();
|
|
$this->service='youtube';
|
|
$this->service_user=$user;
|
|
$this->service_password=$pass;
|
|
if (!$this->init()) return false;
|
|
$res=$this->get("https://www.google.com/accounts/ServiceLogin?uilel=3&service=youtube&passive=true&continue=http%3A%2F%2Fwww.youtube.com%2Fsignup%3Fnomobiletemp%3D1%26hl%3Den_US%26next%3D%252F&hl=en_US<mpl=sso");
|
|
if ($this->checkResponse('initial_get',$res))
|
|
$this->updateDebugBuffer('initial_get',"https://www.google.com/accounts/ServiceLogin?uilel=3&service=youtube&passive=true&continue=http%3A%2F%2Fwww.youtube.com%2Fsignup%3Fnomobiletemp%3D1%26hl%3Den_US%26next%3D%252F&hl=en_US<mpl=sso",'GET');
|
|
else
|
|
{
|
|
$this->updateDebugBuffer('initial_get',"https://www.google.com/accounts/ServiceLogin?uilel=3&service=youtube&passive=true&continue=http%3A%2F%2Fwww.youtube.com%2Fsignup%3Fnomobiletemp%3D1%26hl%3Den_US%26next%3D%252F&hl=en_US<mpl=sso",'GET',false);
|
|
$this->debugRequest();
|
|
$this->stopPlugin();
|
|
return false;
|
|
}
|
|
|
|
$form_action="https://www.google.com/accounts/ServiceLoginAuth?service=youtube";
|
|
$post_elements=array('ltmpl'=>'sso',
|
|
'continue'=>'http://www.youtube.com/signin?action_handle_signin=true&nomobiletemp=1&hl=en_US&next=%2Findex',
|
|
'next'=>'/',
|
|
'service'=>'youtube',
|
|
'uilel'=>3,
|
|
'ltmpl'=>'sso',
|
|
'hl'=>'en_US',
|
|
'ltmpl'=>'sso',
|
|
'GALX'=>$this->getElementString($res,'name="GALX" value="','"'),
|
|
'Email'=>$user,
|
|
'Passwd'=>$pass,
|
|
'PersistentCookie'=>'yes',
|
|
'rmShown'=>1,
|
|
'signIn'=>'Sign in',
|
|
'asts'=>false,
|
|
);
|
|
$res=$this->post($form_action,$post_elements,true,true);
|
|
if ($this->checkResponse('login_post',$res))
|
|
$this->updateDebugBuffer('login_post',$form_action,'POST',true,$post_elements);
|
|
else
|
|
{
|
|
$this->updateDebugBuffer('login_post',$form_action,'POST',false,$post_elements);
|
|
$this->debugRequest();
|
|
$this->stopPlugin();
|
|
return false;
|
|
}
|
|
|
|
$url_redirect=html_entity_decode(urldecode(str_replace('\x', '%', $this->getElementString($res,'location.replace("','"'))));
|
|
$res=$this->get($url_redirect,true);
|
|
if ($this->checkResponse('url_redirect',$res))
|
|
$this->updateDebugBuffer('url_redirect',"{$url_redirect}",'GET');
|
|
else
|
|
{
|
|
$this->updateDebugBuffer('url_redirect',"{$url_redirect}",'GET',false);
|
|
$this->debugRequest();
|
|
$this->stopPlugin();
|
|
return false;
|
|
}
|
|
|
|
$this->login_ok='http://www.youtube.com/address_book';
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Get the current user's contacts
|
|
*
|
|
* Makes all the necesarry requests to import
|
|
* the current user's contacts
|
|
*
|
|
* @return mixed The array if contacts if importing was successful, FALSE otherwise.
|
|
*/
|
|
public function getMyContacts()
|
|
{
|
|
if ($this->login_ok===false)
|
|
{
|
|
$this->debugRequest();
|
|
$this->stopPlugin();
|
|
return false;
|
|
}
|
|
else $url=$this->login_ok;
|
|
|
|
$res=$this->get($url);
|
|
if ($this->checkResponse('url_addressbook',$res))
|
|
$this->updateDebugBuffer('url_addressbook',"{$url}",'GET');
|
|
else
|
|
{
|
|
$this->updateDebugBuffer('url_addressbook',"{$url}",'GET',false);
|
|
$this->debugRequest();
|
|
$this->stopPlugin();
|
|
return false;
|
|
}
|
|
|
|
$form_action='http://www.youtube.com/address_book?action_ajax=1';
|
|
$post_elements=array('session_token'=>$this->getElementString($res,"YT_address_book('session_token=","'"),
|
|
'messages'=>'[{"type":"ajax_fetch_contacts","request":{"gid":"_all_contacts_","link_count":1000,"page":1}}]',
|
|
);
|
|
$res=$this->post($form_action,$post_elements);
|
|
if ($this->checkResponse('url_contacts',$res))
|
|
$this->updateDebugBuffer('url_contacts',$form_action,'POST',true,$post_elements);
|
|
else
|
|
{
|
|
$this->updateDebugBuffer('url_contacts',$form_action,'POST',false,$post_elements);
|
|
$this->debugRequest();
|
|
$this->stopPlugin();
|
|
return false;
|
|
}
|
|
|
|
$contacts=array();
|
|
if (preg_match_all("#fid\"\: \"(.+)\"\}#U", $res, $matchesArray))
|
|
{
|
|
if (!empty($matchesArray[1]))
|
|
foreach($matchesArray[1] as $dummy=>$id)
|
|
{
|
|
$emailsArray=array();$namesArray=array();
|
|
$res=$this->get("http://www.youtube.com/address_book?action_display_contact_details=1&fid={$id}");
|
|
if (preg_match_all("#mailto\:(.+)\"#U", $res, $emailsArray))
|
|
{
|
|
if (preg_match_all("#\"\/user\/(.+)\"#U", $res, $namesArray)) $contacts[$emailsArray[1][0]]=array('first_name'=>$namesArray[1][0],'email_1'=>$emailsArray[1][0]);
|
|
else $contacts[$emailsArray[1][0]]=array('first_name'=>$emailsArray[1][0],'email_1'=>$emailsArray[1][0]);
|
|
}
|
|
}
|
|
}
|
|
foreach ($contacts as $email=>$dummy) if (!$this->isEmail($email)) unset($contacts[$email]);
|
|
return $this->returnContacts($contacts);
|
|
}
|
|
|
|
|
|
/**
|
|
* Terminate session
|
|
*
|
|
* Terminates the current user's session,
|
|
* debugs the request and reset's the internal
|
|
* debudder.
|
|
*
|
|
* @return bool TRUE if the session was terminated successfully, FALSE otherwise.
|
|
*/
|
|
public function logout()
|
|
{
|
|
if (!$this->checkSession()) return false;
|
|
$res=$this->get('http://www.youtube.com/index',true);
|
|
$post_elements=array('action_logout'=>1,
|
|
'session_token'=>$this->getElementString($res,"YT_php_support('","'"),
|
|
);
|
|
$res=$this->post('http://www.youtube.com/index',$post_elements,true);
|
|
$this->debugRequest();
|
|
$this->resetDebugger();
|
|
$this->stopPlugin();
|
|
return true;
|
|
}
|
|
}
|
|
?>
|