Advertisement
Guest User

Untitled

a guest
Jan 27th, 2012
382
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.44 KB | None | 0 0
  1. <?
  2. class youtube_auth{
  3. var $authResponseUrl;
  4. var $username;
  5. var $password;
  6. var $authType;
  7. var $accessToken;
  8. var $sessionToken;
  9. public function __construct($params=array()){
  10. foreach ($params as $key=>$value){
  11. $this->$key=$value;
  12. }
  13. if (!empty($this->authToken)){
  14. $this->authSubSessionToken();
  15. }
  16. }
  17. public function clientLoginAuth($username,$pass){
  18. $this->authType = 'GoogleLogin';
  19. $url = 'https://www.google.com/youtube/accounts/ClientLogin';
  20. $data = 'Email='.urlencode($username).'&Passwd='.urlencode($pass).'&service=youtube&source=Test';
  21. $result = array();
  22. $ch = curl_init();
  23. curl_setopt($ch, CURLOPT_URL, $url);
  24. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  25. $curlheader[0] = "Content-Type:application/x-www-form-urlencoded";
  26. curl_setopt($ch, CURLOPT_POST, 1);
  27. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  28. curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
  29. curl_setopt($ch, CURLOPT_HTTPHEADER, $curlheader);
  30. $result['output'] = curl_exec($ch);
  31. $result['err'] = curl_errno( $ch );
  32. $result['errmsg'] = curl_error( $ch );
  33. $result['header'] = curl_getinfo( $ch );
  34. $temp = explode("YouTubeUser=",$result['output']);
  35. $result['username'] = trim($temp[1]);
  36. $temp2 = explode("=",trim($temp[0]));
  37. $result['token'] = trim($temp2[1]);
  38. $this->setAccessToken($result['token']);
  39. curl_close($ch);
  40. $this->username = !empty($result['username'])?$result['username']:'';
  41. return $result;
  42. }
  43.  
  44. public function getCurrentUrl(){
  45. $pageURL = 'http';
  46. if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
  47. $pageURL .= "://";
  48. if ($_SERVER["SERVER_PORT"] != "80") {
  49. $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
  50. } else {
  51. $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
  52. }
  53. return $pageURL;
  54. }
  55.  
  56.  
  57. public function showAuthSubRequest($authResponseUrl=''){
  58. $urlParams['scope'] = 'http://gdata.youtube.com';
  59. $urlParams['session'] = 1;
  60. $urlParams['next'] = !empty($authResponseUrl)?$authResponseUrl:$this->authResponseUrl;
  61. if (empty($urlParams['next'])){
  62. $urlParams['next'] = $this->getCurrentUrl();
  63. }
  64. $params = http_build_query($urlParams);
  65. $url = 'https://www.google.com/accounts/AuthSubRequest?'.$params;
  66. header("Location:".$url);
  67.  
  68. }
  69.  
  70. public function setAccessToken($accessToken=''){
  71. $this->accessToken = $accessToken;
  72. }
  73.  
  74. public function setSessionToken($sessionToken){
  75. $this->authType='AuthSub';
  76. $this->sessionToken = $sessionToken;
  77. }
  78.  
  79. public function authSubSessionToken(){
  80. if (empty($this->accessToken)){
  81. $this->showAuthSubRequest();
  82. }
  83. $url = 'https://www.google.com/accounts/AuthSubSessionToken';
  84. $curlHeader[0] = 'Content-Type: application/x-www-form-urlencoded';
  85. $curlHeader[1] = 'Authorization: AuthSub token="'.$this->accessToken.'"';
  86. $ch = curl_init();
  87. curl_setopt($ch, CURLOPT_URL, $url);
  88. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  89. curl_setopt($ch, CURLOPT_POST, 1);
  90. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  91. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false );
  92. curl_setopt($ch, CURLOPT_HTTPHEADER, $curlHeader);
  93. $result['output'] = curl_exec($ch);
  94. $result['err'] = curl_errno( $ch );
  95. $result['errmsg'] = curl_error( $ch );
  96. $result['header'] = curl_getinfo( $ch );
  97. if ($result['err']==0 && $result['header']['http_code']==200){
  98. $data = explode('=',$result['output']);
  99. $this->setSessionToken($data[1]);
  100. }
  101. return $result;
  102.  
  103. }
  104. }
  105.  
  106. class youtube_uploader extends youtube_auth{
  107. var $uploadResponseUrl;
  108. var $developerKey;
  109. var $videoId;
  110.  
  111. public function __construct($params=array()){
  112. foreach ($params as $key=>$value){
  113. $this->$key=$value;
  114. }
  115. }
  116.  
  117. public function getCategories(){
  118. $url = 'http://gdata.youtube.com/schemas/2007/categories.cat';
  119. $categoriesArray = array();
  120. $xml = simplexml_load_file($url);
  121. $namespaces = $xml->getNamespaces(true);
  122. foreach ($namespaces as $key=>$namespace){
  123. $xml->registerXPathNamespace($key, $namespace);
  124. }
  125. foreach ($xml->xpath('atom:category') as $entry){
  126. if ($entry->xpath('yt:assignable')){
  127. $CatObject = new stdClass();
  128. $CatObject->Value = (string)$entry['term'];
  129. $CatObject->Description = (string)$entry['label'];
  130. $categoriesArray[] = $CatObject;
  131. }
  132. }
  133. return $categoriesArray;
  134. }
  135. public function createApiXmlRequest($params=array()){
  136. $return = '<'.'?xml version="1.0"?'.'>
  137. <entry xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007">
  138. <media:group>
  139. <media:title type="plain">'.$params['title'].'</media:title>
  140. <media:description type="plain">'.$params['description'].'</media:description>
  141. <media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">'.$params['category'].'</media:category> <media:keywords>'.$params['keywords'].'</media:keywords>
  142. </media:group>
  143. </entry>
  144. ';
  145. return $return;
  146. }
  147. public function getPrivate()
  148. {
  149. return $this->_private;
  150. }
  151.  
  152. /**
  153. * Sets the private value of this element
  154. *
  155. * @param Zend_Gdata_YouTube_Extension_Private $value The private value
  156. * @return Zend_Gdata_YouTube_Extension_MediaGroup Provides a fluent
  157. * interface
  158. */
  159. public function setPrivate($value)
  160. {
  161. $this->_private = $value;
  162. return $this;
  163. }
  164.  
  165. public function updateVideoData($params=array()){
  166. if (!empty($params['videoId'])){
  167. $this->videoId = $params['videoId'];
  168. }
  169. $url = 'http://gdata.youtube.com/feeds/api/users/default/uploads/'.$params['videoId'];
  170. $data = $this->createApiXmlRequest($params);
  171. $curlHeader[0] = 'Host: gdata.youtube.com';
  172. $curlHeader[1] = 'Content-Type: application/atom+xml';
  173. $curlHeader[2] = 'Content-Length: '.strlen($data);
  174. $curlHeader[3] = "Authorization: ".$this->authType." ".(($this->authType == 'GoogleLogin')?'auth':'token')."=\"".(!empty($this->sessionToken)?$this->sessionToken:$this->accessToken)."\"";
  175. $curlHeader[4] = 'GData-Version: 2';
  176. $curlHeader[5] = 'X-GData-Key: key="'.$this->developerKey.'"';
  177. $ch = curl_init();
  178. curl_setopt($ch, CURLOPT_URL, $url);
  179. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  180. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
  181. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  182. curl_setopt($ch, CURLOPT_HTTPHEADER, $curlHeader);
  183. $result['output'] = curl_exec($ch);
  184. $output = curl_exec($ch);
  185. $info = curl_getinfo($ch);
  186. curl_close($ch);
  187. return $result;
  188. }
  189.  
  190. public function getUploadToken($params=array()){
  191. $token = $this->accessToken;
  192. $developerKey = $this->developerKey;
  193. $response = '';
  194. $data = $this->createApiXmlRequest($params);
  195. $ch = curl_init();
  196. curl_setopt($ch, CURLOPT_URL, 'http://gdata.youtube.com/action/GetUploadToken');
  197. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  198. $curlheader[0] = "Host: gdata.youtube.com";
  199. if($this->authType == 'GoogleLogin'){
  200. $curlheader[1] = "Authorization: ".$this->authType." auth=\"$token\"";
  201. }
  202. else {
  203. if (!empty($this->sessionToken)){
  204. $curlheader[1] = "Authorization: ".$this->authType." token=\"".$this->sessionToken."\"";
  205. } else {
  206. $curlheader[1] = "Authorization: ".$this->authType." token=\"".$this->accessToken."\"";
  207. }
  208. }
  209. $curlheader[2] = "GData-Version: 2";
  210. $curlheader[3] = "X-GData-Client: 1";
  211. $curlheader[3] = "X-GData-Key: key=\"".$developerKey."\"";
  212. $curlheader[4] = "Content-Type: application/atom+xml";
  213. $curlheader[5] = "Accept-encoding: identity";
  214. $curlheader[6] = "Content-Length: ".strlen($data);
  215. $curlheader[7] = "Connection: close";
  216. curl_setopt($ch, CURLOPT_HTTPHEADER, $curlheader);
  217. curl_setopt($ch, CURLOPT_POST, 1);
  218. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  219. $output = curl_exec($ch);
  220. $info = curl_getinfo($ch);
  221. curl_close($ch);
  222. $result = $this->parseResults($output);
  223. if($result['status'] == 'ok')
  224. {
  225. $returnUrl = (string) $result['xml']->url[0];
  226. $returnToken = (string) $result['xml']->token[0];
  227. return array('status'=>'ok','url'=>!empty($returnUrl)?$returnUrl:'','token'=>!empty($returnToken)?$returnToken:'');
  228. } else {
  229. return array('status'=>'error','message'=>$result['error_message']);
  230. }
  231. }
  232.  
  233. public function checkUploadedVideo($params=array()){
  234. $url = 'http://gdata.youtube.com/feeds/api/users/'.$params['username'].'/uploads/'.$params['videoid'];
  235. $result = array();
  236. $ch = curl_init();
  237. curl_setopt($ch, CURLOPT_URL, $url);
  238. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  239. $result['output'] = curl_exec($ch);
  240. $result['err'] = curl_errno( $ch );
  241. $result['errmsg'] = curl_error( $ch );
  242. $result['header'] = curl_getinfo( $ch );
  243. curl_close($ch);
  244. $xml = simplexml_load_string($result['output']);
  245. $tmp = $xml->xpath("app:control");
  246. if ($tmp[0]->xpath("yt:state")){
  247. $status = $tmp[0]->xpath("yt:state");
  248. $result['status'] = $status[0];
  249. $result['error'] = $status[0];
  250. } else {
  251. $result['status']='ok';
  252. $result['error']='';
  253. $result['mediaInfo'] = $this->getVideoInfo(array('videoid'=>$params['videoid']));
  254. }
  255. return $result;
  256.  
  257. }
  258.  
  259. public function getUploadedVideos($params=array()){
  260. $developerKey = $this->developerKey;
  261. $url = 'http://gdata.youtube.com/feeds/api/users/default/uploads?start-index='.$params['start-index'].'&max-results='.$params['max-results'];//newmaxresults;
  262. $token = $this->accessToken;
  263. $ch = curl_init();
  264. curl_setopt($ch, CURLOPT_URL, $url);
  265. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  266. if($this->authType == 'GoogleLogin'){
  267. $curlheader[1] = "Authorization: ".$this->authType." auth=\"".$this->accessToken."\"";
  268. }
  269. else {
  270. if (!empty($this->sessionToken)){
  271.  
  272. $curlheader[1] = "Authorization: ".$this->authType." token=\"".$this->sessionToken."\"";
  273. }
  274. }
  275. $curlheader[2] = "X-GData-Key: key=\"$developerKey\"";
  276. $curlheader[3] = "Content-Type:application/x-www-form-urlencoded";
  277. curl_setopt($ch, CURLOPT_HTTPHEADER, $curlheader);
  278. $output = curl_exec($ch);
  279. $result['output'] = $output;
  280. $result['err'] = curl_errno( $ch );
  281. $result['errmsg'] = curl_error( $ch );
  282. $result['header'] = curl_getinfo( $ch );
  283. curl_close($ch);
  284. return $result;
  285. }
  286.  
  287. public function formatVideoResponse($output){
  288. $xml = new SimpleXMLElement($output);
  289. $mediaInfo = array();
  290. $i=0;
  291. //Youtube has <feed><entry>...</entry></feed> response for getting uploaded videos and <entry>...</entry> response for updated video
  292. //so we have to find a workaround for handling the 2 types of responses
  293. if ($xml->getName() == 'entry'){
  294. $childreen[0]=$xml;
  295. } else {
  296. $childreen = $xml->entry;
  297. }
  298. foreach ($childreen as $entry){
  299. $app = $yt = $gd = $media = '';
  300. $namespaces = $entry->getNameSpaces(true);
  301. foreach ($namespaces as $key=>$namespace){
  302. if (!empty($key)){
  303. $entry->registerXPathNamespace($key, $namespace);
  304. $$key = $entry->children($namespace);
  305. }
  306. }
  307. $mediaInfo[$i]['videoId'] = !empty($this->videoId)?$this->videoId:basename($entry->id);
  308. $mediaInfo[$i]['published'] = preg_replace('/\.\w+/i','',str_replace('T',' ',basename($entry->published)));
  309. if ($app){
  310. $ytState = $app->xpath('yt:state');
  311. if ($ytState){
  312. //processing, restricted, deleted, rejected and failed.
  313. $mediaInfo[$i]['status'] = (string)$ytState[0]->attributes()->name;
  314. if ($mediaInfo[$i]['status'] != 'processing'){
  315. $mediaInfo[$i]['reason'] = (string)$ytState[0]->attributes()->reasonCode;
  316. }
  317. } else {
  318. $mediaInfo[$i]['status'] = 'OK';
  319. }
  320. } else {
  321. $mediaInfo[$i]['status'] = 'OK';
  322. }
  323. if($gd->rating){
  324. $rating = (string)$gd->rating->attributes();
  325. $mediaInfo[$i]['rating'] = $rating['average'];
  326. }else{
  327. $mediaInfo[$i]['rating'] = 0;
  328. }
  329. if ($media->group->category){
  330. $mediaInfo[$i]['category'] = sprintf("%s",$media->group->category[0]);
  331. }
  332. if($media->group->title){
  333. $mediaInfo[$i]['title'] = sprintf("%s",$media->group->title[0]);
  334. }else{
  335. $mediaInfo[$i]['title'] = '';
  336. }
  337. if($media->group->thumbnail){
  338. $mediaInfo[$i]['thumbnails']['default'] = sprintf("%s",$media->group->thumbnail[0]->attributes()->url);
  339. }else{
  340. $mediaInfo[$i]['thumbnails']['default'] = '';
  341. }
  342.  
  343. if($media->group->keywords){
  344. $mediaInfo[$i]['tags'] = sprintf("%s",$media->group->keywords[0]);
  345. }else{
  346. $mediaInfo[$i]['tags'] = '';
  347. }
  348.  
  349. if($media->group->description){
  350. $mediaInfo[$i]['description'] = sprintf("%s",$media->group->description[0]);
  351. }else{
  352. $mediaInfo[$i]['description'] = '';
  353. }
  354. $i++;
  355. }
  356. return $mediaInfo;
  357. }
  358.  
  359.  
  360. public function parseResults($response){
  361. $result = array();
  362. $result['status'] = 'ok';
  363. $reg_ex = '/<H1>Bad Request<\/H1>/';
  364.  
  365. $res = preg_match_all($reg_ex,$response,$matches);
  366. if(!empty($matches[0])) {
  367. $result['status'] = 'error';
  368. $result['error'] = "Bad Request";
  369. }
  370. else {
  371.  
  372. $xml = @simplexml_load_string($response);
  373. if($xml === FALSE && $response !=''){
  374. $result['error'] = $response;
  375. $result['status'] = 'error';
  376. }
  377. else{
  378. if(@$xml->error){
  379. $msg = @(string)$xml->error->code.':'.@(string)$xml->error->internalReason;
  380. $location = @(string)$xml->error->location;
  381. unset($xml);
  382. $result['error']['message'] = $msg;
  383. $result['error']['location'] = $location;
  384. $result['status'] = 'error';
  385. }
  386. else{
  387. $result['xml'] = $xml;
  388. }
  389. }
  390. }
  391. unset($xml);
  392. unset($response);
  393. return $result;
  394.  
  395. }
  396. }
  397.  
  398.  
  399. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement