Прогресс бар для прямых загрузок YouTube с данными? - PullRequest
3 голосов
/ 06 декабря 2011

Я хотел бы отобразить индикатор выполнения для прямой загрузки с YouTube, используя API gdata. У меня есть загрузки, запускаемые ajax-вызовом сценария uploader.php, и когда он завершается, я обновляю статус на странице, которую видит пользователь. Мне бы очень хотелось установить таймер для обновления индикатора выполнения каждые 5 секунд или около того, чтобы пользователь не терял терпение и не отменял совершенную загрузку.

Я видел много сообщений, в которых люди пытались найти способ получить информацию о прогрессе из своих загрузок во время их выполнения, при этом API YouTube использовал прямые загрузки. Я не видел никаких ответов. Это похоже на то, что должно поддерживаться в API. Есть ли способ сделать это?

Есть ли совсем другой способ, который бы работал?

1 Ответ

0 голосов
/ 18 марта 2012

Вы можете создать страницу php и выполнить загрузку через браузер, используя CURL. Это означает, что у вас есть контроль над загрузкой и вы можете создать индикатор выполнения.
Вот пример того, как может выглядеть загрузка. Нижняя часть этого кода является интересной частью. Он выполняет «загрузку на основе браузера» с использованием CURL, а затем возвращает результат;

// upload.php


require_once 'Zend/Loader.php'; // the Zend dir must be in your include_path
Zend_Loader::loadClass('Zend_Gdata_YouTube');
$yt = new Zend_Gdata_YouTube();

// Define the authentication that will be used
Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); 

// Authenticate
$authenticationURL= 'https://www.google.com/accounts/ClientLogin';
$httpClient = 
  Zend_Gdata_ClientLogin::getHttpClient(
              $username = "USERNAME",
              $password = "PASSWORD",
              $service = 'youtube',
              $client = null,
              $source = 'HTML SOURCE CODE SNIPPET',
              $loginToken = null,
              $loginCaptcha = null,
              $authenticationURL);

$applicationId = 'YOUR APPLICATION ID';
$clientId = 'Upload videos to youtube using the youtube API';
$developerKey = 'YOUR DEVELOPER KEY';
$yt = new Zend_Gdata_YouTube($httpClient, $applicationId, $clientId, $developerKey);



// create a new VideoEntry object
$myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();

$myVideoEntry->setVideoTitle($videoTitle);
$myVideoEntry->setVideoDescription($VideoDescription);
// The category must be a valid YouTube category!
$myVideoEntry->setVideoCategory($VideoCategory);

// Set keywords. Please note that this must be a comma-separated string
// and that individual keywords cannot contain whitespace
$myVideoEntry->SetVideoTags($VideoTags);

$tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken';
$tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl);
$tokenValue = $tokenArray['token'];
$postUrl = $tokenArray['url'];


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $postUrl."?nexturl=http://YOUR_WEBPAGE.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_POST, true);
// same as <input type="file" name="file">
$post = array("file"=>"@".$VideoFile['tmp_name'], "token"=>$tokenValue);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
$response = curl_exec($ch);
$info = curl_getinfo($ch);

echo $info;

Вы можете прочитать больше здесь https://developers.google.com/youtube/2.0/developers_guide_php#Browser_based_Upload

...