[HELP] Заливалка на youtube

Discussion in 'PHP' started by nokochka, 17 Aug 2015.

  1. nokochka

    nokochka Member

    Joined:
    17 May 2010
    Messages:
    17
    Likes Received:
    12
    Reputations:
    0
    Всем ку!
    Помогите допилить самокат.
    Опа заключается в заливе на сам YTobe
    С локалки через неск. кликов мыши идет нормально, с сервера не идет(((
    Подключил обратный редирект, включил использование API v3 и на этом тишина.
    Куда копать? Кто-нить практиковал подобное?

    PHP:
    <?php

    require_once 'Google/Client.php';
    require_once 
    'Google/Service/YouTube.php';

    session_start();


    $OAUTH2_CLIENT_ID '579417448092-8grtf6a0000nr1pihp7ge923htpb7hlq.apps.googleusercontent.com';
    $OAUTH2_CLIENT_SECRET '8NBRgCI-3Dsc4Wz0000OmN9b';

    $client = new Google_Client();
    $client->setClientId($OAUTH2_CLIENT_ID);
    $client->setClientSecret($OAUTH2_CLIENT_SECRET);
    $client->setScopes('https://www.googleapis.com/auth/youtube');
    $redirect filter_var('http://' $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],
        
    FILTER_SANITIZE_URL);
    $client->setRedirectUri($redirect);

    // Define an object that will be used to make all API requests.
    $youtube = new Google_Service_YouTube($client);

    if (isset(
    $_GET['code'])) {
      if (
    strval($_SESSION['state']) !== strval($_GET['state'])) {

        die(
    'The session state did not match.');
      }

      
    $client->authenticate($_GET['code']);
      
    $_SESSION['token'] = $client->getAccessToken();
      
    header('Location: ' $redirect);
    }

    if (isset(
    $_SESSION['token'])) {
      
    $client->setAccessToken($_SESSION['token']);
    }

    // Check to ensure that the access token was successfully acquired.
    if ($client->getAccessToken()) {
      try{
        
    // читаем нах папку и выбираем файл для залива.
    if ($handle opendir('/var/www/zo127/data/www/mysite.ru/2')) { // открыт текущий каталог
      
    while (false !== ($file readdir($handle)))   {
        if (
    $file != "." && $file != "..")
        {
          echo 
    "$file"<br/>";

      
        
    $urla $file;
        
    $videoPath "/var/www/zo127/data/www/mysite.ru/2/".$urla."";
        }
      }
      
    closedir($handle);
    }
        
    // Create a snippet with title, description, tags and category ID
        // Create an asset resource and set its snippet metadata and type.
        // This example sets the video's title, description, keyword tags, and
        // video category.
        
    $snippet = new Google_Service_YouTube_VideoSnippet();
        
    $snippet->setTitle("Test title");
        
    $snippet->setDescription("Test description");
        
    $snippet->setTags(array("tag1""tag2"));

        
    // Numeric video category. See
        // https://developers.google.com/youtube/v3/docs/videoCategories/list
        
    $snippet->setCategoryId("22");

        
    // Set the video's status to "public". Valid statuses are "public",
        // "private" and "unlisted".
        
    $status = new Google_Service_YouTube_VideoStatus();
        
    $status->privacyStatus "public";

        
    // Associate the snippet and status objects with a new video resource.
        
    $video = new Google_Service_YouTube_Video();
        
    $video->setSnippet($snippet);
        
    $video->setStatus($status);

        
    // Specify the size of each chunk of data, in bytes. Set a higher value for
        // reliable connection as fewer chunks lead to faster uploads. Set a lower
        // value for better recovery on less reliable connections.
        
    $chunkSizeBytes 1024 1024;

        
    // Setting the defer flag to true tells the client to return a request which can be called
        // with ->execute(); instead of making the API call immediately.
        
    $client->setDefer(true);

        
    // Create a request for the API's videos.insert method to create and upload the video.
        
    $insertRequest $youtube->videos->insert("status,snippet"$video);

        
    // Create a MediaFileUpload object for resumable uploads.
        
    $media = new Google_Http_MediaFileUpload(
            
    $client,
            
    $insertRequest,
            
    'video/*',
            
    null,
            
    true,
            
    $chunkSizeBytes
        
    );
        
    $media->setFileSize(filesize($videoPath));


        
    // Read the media file and upload it chunk by chunk.
        
    $status false;
        
    $handle fopen($videoPath"rb");
        while (!
    $status && !feof($handle)) {
          
    $chunk fread($handle$chunkSizeBytes);
          
    $status $media->nextChunk($chunk);
        }

        
    fclose($handle);

        
    // If you want to make other calls after the file upload, set setDefer back to false
        
    $client->setDefer(false);


        
    $htmlBody .= "<h3>Video Uploaded</h3><ul>";
        
    $htmlBody .= sprintf('<li>%s (%s)</li>',
            
    $status['snippet']['title'],
            
    $status['id']);

        
    $htmlBody .= '</ul>';

      } catch (
    Google_Service_Exception $e) {
        
    $htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>',
            
    htmlspecialchars($e->getMessage()));
      } catch (
    Google_Exception $e) {
        
    $htmlBody .= sprintf('<p>An client error occurred: <code>%s</code></p>',
            
    htmlspecialchars($e->getMessage()));
      }

      
    $_SESSION['token'] = $client->getAccessToken();
    } else {
      
    // If the user hasn't authorized the app, initiate the OAuth flow
      
    $state mt_rand();
      
    $client->setState($state);
      
    $_SESSION['state'] = $state;

      
    $authUrl $client->createAuthUrl();
      
    $htmlBody = <<<END
      <h3>Authorization Required</h3>
      <p>You need to <a href="
    $authUrl">authorize access</a> before proceeding.<p>
    END;
    }
    ?>

    <!doctype html>
    <html>
    <head>
    <title>Video Uploaded</title>
    </head>
    <body>
      <?=$htmlBody?>
    </body>
    </html>
     
    #1 nokochka, 17 Aug 2015
    Last edited: 17 Aug 2015