Upload direto de formulário da API de dados do YouTube v3
-
21-12-2019 - |
Pergunta
Eu tinha um sistema configurado com a API de dados do YouTube v2 que permitia ao usuário enviar um vídeo diretamente para MEU Conta do YouTube por meio de um formulário em meu site (entendo as implicações disso, lembre-se de que estou apenas fornecendo uma descrição básica do que a ferramenta fez).Até agora não consegui descobrir como configurar esse mesmo sistema com a API v3, agora que a v2 está obsoleta.Outra observação rápida, gostaria de poder fazer isso sem enviar o usuário para a página OAuth, pois não preciso acessar deles Conta do YouTube.
Aqui está uma versão simplificada do código PHP que fez isso funcionar para a v2:
<?php
if ($_GET['op'] == "yt") {
if ($_GET['status'] == "200") {
// video upload was successful, $_GET['id'] contains the YouTube video ID for the upload
} else {
// video upload failed
}
} else {
require_once("Zend/Loader.php");
Zend_Loader::loadClass("Zend_Gdata_ClientLogin");
Zend_Loader::loadClass("Zend_Gdata_YouTube");
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
$username = "YOUTUBE_USERNAME",
$password = "YOUTUBE_PASSWORD",
$service = "youtube",
$client = null,
$source = "My Video Upload Bla Bla Bla",
$loginToken = null,
$loginCaptcha = null,
"https://www.google.com/accounts/ClientLogin"
);
$yt = new Zend_Gdata_YouTube($httpClient, "My Video Upload Bla Bla Bla", "My Video Upload Bla Bla Bla", "YOUTUBE_DEVELOPER_KEY");
$yt->setMajorProtocolVersion(2);
$myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();
$myVideoEntry->setVideoTitle("Video Title");
$myVideoEntry->setVideoDescription("Video Description");
$myVideoEntry->setVideoCategory("People");
$accessControlElement = new Zend_Gdata_App_Extension_Element("yt:accessControl", "yt", "http://gdata.youtube.com/schemas/2007", "");
$accessControlElement->setExtensionAttributes(array(
array("namespaceUri" => "", "name" => "action", "value" => "list"),
array("namespaceUri" => "", "name" => "permission", "value" => "denied")
));
$myVideoEntry->setExtensionElements(array($accessControlElement));
$tokenArray = $yt->getFormUploadToken($myVideoEntry, "http://gdata.youtube.com/action/GetUploadToken");
$nextUrl = urlencode("http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}?op=yt");
print "<form action=\"{$tokenArray['url']}?nexturl={$nextUrl}\" method=\"POST\" enctype=\"multipart/form-data\">\n";
print " <input name=\"file\" type=\"file\" />\n";
print " <input name=\"token\" type=\"hidden\" value=\"{$tokenArray['token']}\" />\n";
print " <input value=\"Upload Video File\" type=\"submit\" />\n";
print "</form>\n";
}
?>
Solução
Eu encontrei um artigo excelente que me ajudou com isso:
http://jasonwritescode.blogspot.com/2013/09 / YouTube-Browser-Browser-Uploading-with.html
Algumas coisas para apontar se você usar este artigo para ajudá-lo com o mesmo problema.A chamada de enrolamento para http://gdata.youtube.com/action/getuploadtoken precisa ser https não http e o formulário ação="{{post_url}}? next= {{next_url}} precisa ser ação=" {{post_url}}? nexturl ={{next_url}}.