从Android应用上传视频到YouTube

时间:2014-08-19 20:53:30

标签: android youtube-api google-oauth

我正在尝试开发一款Android应用,用户可以在该应用中将视频从设备上传到我的YouTube频道。

我使用Youtube Data API v3坚持使用OAuth2身份验证。我找到了允许用户选择自己的帐户并用于验证的代码,但这不是我想要的。

怎么做?

提前致谢。

1 个答案:

答案 0 :(得分:2)

如果您的意思是从用户上传'移动/浏览器客户端直接直接到Youtube服务器,是的,它可以完全完成。我花了不少时间来弄清楚这些技巧。

这一步有点复杂。


步骤1.您需要注册一个" YouTube Data API v3" Google上的应用。

https://console.developers.google.com/project

到达那里并创建一个项目。然后去" APIS"并启用" YouTube Data API v3"。

您还需要为下一步获取客户ID和客户端密码。

并且不要忘记设置" redirect_uri" on" YouTube Data API v3" API控制台指向" http://YOURWEBSITE.com/get_refresh_token.php"。


步骤2.您需要来自youtube的刷新令牌。在大多数" youtube上传客户端"教程,他们教你如何上传到用户的频道,而不是你自己的频道。为了实现这个棘手的功能,您需要的是刷新令牌。

为了获得刷新令牌,您需要将此php文件放在您自己的服务器/网站上,并运行一次。将文件命名为" get_refresh_token.php"并把它放在你的网站上。它的网址必须与" redirect_uri"匹配。在最后一步中提到。

<?php 
if(isset($_GET['code'])) {
    $code = $_GET['code'];
    $url = 'https://accounts.google.com/o/oauth2/token';
    $params = array(
        "code" => $code,
        "client_id" => "CLIENT ID GET FROM GOOGLE",
        "client_secret" => "CLIENT SECRET GET FROM GOOGLE",
        "redirect_uri" => "http://YOURWEBSITE.com/get_refresh_token.php",
        "grant_type" => "authorization_code"
    );

    echo getOnlineData($url, $params);
} else {
    $params = array(
        "response_type" => "code",
        "client_id" => "CLIENT ID GET FROM GOOGLE",
        "redirect_uri" => "CLIENT SECRET GET FROM GOOGLE",
        "scope" => "https://www.googleapis.com/auth/youtube",
        "access_type" => "offline"
        );

    $request_to = "https://accounts.google.com/o/oauth2/auth?".http_build_query($params);

    header("Location: " . $request_to);
}

function getOnlineData($url, $post_arr) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);

    if($post_arr) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_arr));
    }

    $temp_data = curl_exec($ch);
    curl_close($ch);
    return $temp_data;
}
?>

使用您频道的帐户登录。最后你会得到一个长串。找到&#34; refresh_token&#34;并安全地将其保存在您的数据库中。


步骤3.现在你有了refresh_token吗?然后,每当用户需要将视频上传到您的频道时,您的应用都需要为您的服务器调用access_token。您需要做的就是转换&#34; refresh_token&#34;通过以下代码进入多汁刷新access_token。

<?php
$url = "https://accounts.google.com/o/oauth2/token";
$params = array(
    "client_id" => "CLIENT ID GET FROM GOOGLE",
    "client_secret" => "CLIENT SECRET GET FROM GOOGLE",
    "refresh_token" => "REFRESH TOKEN STORED IN DATABASE A LONG TIME AGO",
    "grant_type" => "refresh_token"
);

$temp_data = getOnlineData($url, $params);
$temp_json = json_decode($temp_data);

echo $temp_json->access_token;
?>

步骤4.好了,现在你有#34; access_token&#34;,然后你需要做的就是把它传递到客户端(你的应用程序)。

现在你已经拥有了所需的一切。让魔法发生(javascript part)

var file = $('#VIDEO').get(0).files[0];
var token = 'THE TOKEN RETRIEVED FROM SERVER SIDE"

var metadata = {
    snippet: {
        title: "TITLE OF THE VIDEO",
        description: "DESCR OF THE VIDEO",
        categoryId: 22
    },
    status: {
        privacyStatus: "public",
        license: "youtube"
    }
};

$.ajax({
    url: 'https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet,status',
    method: 'POST',
    contentType: 'application/json',
    headers: {
        Authorization: 'Bearer ' + token,
        'x-upload-content-length': file.size,
        'x-upload-content-type': file.type
    },
    data: JSON.stringify(metadata)
}).done(function(data, textStatus, jqXHR) {
    resumableUpload({
        url: jqXHR.getResponseHeader('Location'),
        file: file,
        start: 0
    });
})

function resumableUpload(options) {
    $.ajax({
        url: options.url,
        method: 'PUT',
        contentType: options.file.type,
        headers: {
            'Content-Range': 'bytes ' + options.start + '-' + (options.file.size - 1) + '/' + options.file.size
        },
        xhr: function() {
            var xhr = $.ajaxSettings.xhr();

            if(xhr.upload) {
                xhr.upload.addEventListener('progress', function(e) {
                    if(e.lengthComputable) {
                        var bytesTransferred = e.loaded;
                        var totalBytes = e.total;
                        var percentage = Math.round((100*bytesTransferred/totalBytes));

                        if(percentage >= 100) percentage = 99;

                        $('#td_submit').text("Video Uploading on "+percentage+"%");
                    }
                }, false);
            }
            return xhr;
        },
        processData: false,
        data: options.file
    }).done(function(response) {        
        alert("Your video's URL is https://www.youtube.com/watch?v="+response.id);
    })
}

之后,您可以在

上看到所有处理视频

https://www.youtube.com/my_videos?o=U