2011-10-04 4 views
2

YouTube API를 통해 로그인하여 웹 페이지에서 비공개 동영상을 볼 수 있습니까?Youtube - 소유자 계정으로 API를 통해 '로그인'했을 때 비공개 동영상보기

페이지에 인증 된 세션이 있으면 다음과 같이 개인 비디오를 재생할 수 있습니다 : http://www.youtube.com/embed/gYD0lKSIwxY?

+0

내가 '개인'과 거의 같은 선한 '비공개', 따라서 필요하지 않는 한 비디오를 설정하여이 피해 갈 수있는 비상장로 동영상을 업로드하는 방법에. – Owen

+0

로그인해야합니다 .. . 일부 코드는 게시 할 수 있습니다. –

+1

아래 내 대답을 참조하십시오. – Owen

답변

5

이것은 비디오의 상태를 변경하는 방법입니다. 개인 동영상을 비공개로 변경하여 내 사이트에서 볼 수 있습니다. 나는 자바 스크립트 타이머와 아약스를 사용하여 재생을 시작한 후에 개인용으로 다시 변경합니다.

<?php 
/** 
* Change the status of a video on youtube 
*/ 
if (isset($_POST['video_id'])) { 

    $video_id = stripslashes(strip_tags($_POST['video_id'])); 
    $status = (isset($_POST['status'])) ? stripslashes(strip_tags($_POST['status'])) : 'private'; 
    $sessionToken = 'your_session_token'; 
    define('YT_DEVELOPER_KEY', 'your_developer_key'); 

    $uploadURL = $uploadToken = null; 

    try { 
    $hCurl = curl_init(); 

    if (!$hCurl) 
     throw new Exception('Failed to create cURL object'); 

    $videoPrivate = <<<mof 
     <entry xmlns='http://www.w3.org/2005/Atom' 
       xmlns:media='http://search.yahoo.com/mrss/' 
       xmlns:yt='http://gdata.youtube.com/schemas/2007' 
       xmlns:gd='http://schemas.google.com/g/2005' 
       gd:fields='media:group/yt:private'> 
      <media:group> 
       <yt:private/> 
      </media:group> 
     </entry> 
mof; 
    $videoUnlistedNotPrivate = <<<mof 
     <entry xmlns='http://www.w3.org/2005/Atom' 
      xmlns:yt='http://gdata.youtube.com/schemas/2007' 
      xmlns:gd='http://schemas.google.com/g/2005' 
      gd:fields='media:group(yt:private),yt:accessControl'> 
      <yt:accessControl action='comment' permission='allowed'/> 
      <yt:accessControl action='commentVote' permission='allowed'/> 
      <yt:accessControl action='embed' permission='allowed'/> 
      <yt:accessControl action='rate' permission='allowed'/> 
      <yt:accessControl action='list' permission='denied'/> 
      <yt:accessControl action='syndicate' permission='allowed'/> 
      <yt:accessControl action='videoRespond' permission='allowed'/> 
     </entry> 
mof; 

    // send email for testing purposes 
    if ($status == 'private') { 
     mail('[email protected]', 'VI test', 'setting private', 'from: [email protected]'); 
     $videoMeta = $videoPrivate; 
    } else { 
     $videoMeta = $videoUnlistedNotPrivate; 
     mail('[email protected]', 'VI test', 'setting unlisted', 'from: [email protected]'); 
    } 


    $contentLength = strlen($videoMeta); 
    $respData = null; 

    $url = 'http://gdata.youtube.com/feeds/api/users/YourYouTubeName/uploads/' . $video_id; 

    $ops = array(
     CURLOPT_URL => $url, 
     CURLOPT_POST => true, 
     CURLOPT_CUSTOMREQUEST => 'PATCH', 
     CURLOPT_FOLLOWLOCATION => true, 
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_MAXREDIRS => 1, 
     CURLOPT_HTTPHEADER => array(
     'Authorization: AuthSub token="' . $sessionToken . '"', 
     'GData-Version: 2', 
     'Content-Length: ' . $contentLength, 
     'Content-Type: application/xml', 
     'X-GData-Key: key=' . YT_DEVELOPER_KEY, 
     ), 
     CURLOPT_POSTFIELDS => $videoMeta 
    ); 

    curl_setopt_array($hCurl, $ops); 

    // fetch and parse the response to get upload URL and token 
    if (($respData = curl_exec($hCurl)) === false) { 
     throw new Exception('cURL returned an error while uploading video metadata: ' . curl_error($hCurl)); 
    } 

    } catch (Exception $e) { 
    echo $e->getMessage(); 
    exit; 
    } 
} 
?> 
관련 문제