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";
    }
?>
Foi útil?

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}}.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top