【问题标题】:Youtube data api - uploading video's to one channelYoutube 数据 api - 将视频上传到一个频道
【发布时间】:2017-02-11 19:32:21
【问题描述】:

我被分配创建一个节点 js 应用程序,该应用程序提供给一些需要提交视频的受信任的人。预算真的很小,他们没有钱租用云存储。

现在我想知道是否可以生成某种密钥并将视频从设备上传到单个 youtube 频道。我搜索了文档,但找不到相关内容。

用户是内部的和受信任的,应用程序不可能掌握在其他人的手中。

这可能吗?如果没有,有什么好的选择?

谢谢, 尼克

【问题讨论】:

    标签: javascript node.js upload youtube-api


    【解决方案1】:

    google-api-nodejs-client repo 中,您有一个youtube 视频上传代码示例here 和示例文档here

    它使用Youtube insert API 用于将视频上传到 YouTube 并设置视频的元数据

    这是一个最小的功能示例(此示例中需要手动设置授权码):

    var google = require('googleapis');
    var util = require('util');
    var fs = require('fs');
    var http = require('http');
    var spawn = require('child_process').spawn;
    var querystring = require('querystring');
    var url = require('url');
    
    var OAuth2 = google.auth.OAuth2;
    
    var FILENAME = '/home/user/test.mp4';
    
    // get these from https://console.developers.google.com/apis/credentials (don't forget to activate Youtube API)
    var YOUR_CLIENT_ID = "XXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com";
    var YOUR_CLIENT_SECRET = "XXXXX-XXXXXXXXXXXXXXXXXX";
    var YOUR_REDIRECT_URL = "https://your-domain/redirect";
    
    var oauth2Client = new OAuth2(
        YOUR_CLIENT_ID,
        YOUR_CLIENT_SECRET,
        YOUR_REDIRECT_URL
    );
    
    // initialize the Youtube API library
    var youtube = google.youtube({
        version: 'v3',
        auth: oauth2Client
    });
    
    // very basic example of uploading a video to youtube
    function uploadVideo() {
    
        var req = youtube.videos.insert({
            part: 'id,snippet,status',
            notifySubscribers: false,
            resource: {
                snippet: {
                    title: 'Node.js YouTube Upload Test',
                    description: 'Testing YouTube upload via Google APIs Node.js Client'
                },
                status: {
                    privacyStatus: 'private'
                }
            },
            media: {
                body: fs.createReadStream(FILENAME)
            }
        }, function(err, data) {
            if (err) {
                console.error('Error: ' + err);
            }
            if (data) {
                console.log(util.inspect(data, false, null));
            }
            process.exit();
        });
    
        var fileSize = fs.statSync(FILENAME).size;
    
        // show some progress
        var id = setInterval(function() {
            var uploadedBytes = req.req.connection._bytesDispatched;
            var uploadedMBytes = uploadedBytes / 1000000;
            var progress = uploadedBytes > fileSize ? 100 : (uploadedBytes / fileSize) * 100;
            process.stdout.clearLine();
            process.stdout.cursorTo(0);
            process.stdout.write(uploadedMBytes.toFixed(2) + ' MBs uploaded. ' +
                progress.toFixed(2) + '% completed.');
            if (progress === 100) {
                process.stdout.write('\nDone uploading, waiting for response...\n');
                clearInterval(id);
            }
        }, 250);
    }
    
    var scopes = [
        'https://www.googleapis.com/auth/youtube.upload',
        'https://www.googleapis.com/auth/youtube'
    ];
    
    var authorizeUrl = oauth2Client.generateAuthUrl({
        access_type: 'offline',
        scope: scopes.join(' ')
    });
    
    console.log("go to " + authorizeUrl + " to get authorization code");
    
    var AUTHORIZATION_CODE = "X/XXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXX";
    
    oauth2Client.getToken(AUTHORIZATION_CODE, function(err, tokens) {
        // Now tokens contains an access_token and an optional refresh_token. Save them.
        if (!err) {
            oauth2Client.setCredentials(tokens);
            uploadVideo();
        } else {
            console.log(err);
        }
    });
    

    如果用户获得正确频道的授权码,视频将上传到该频道

    【讨论】:

    • 我忘了提到我在客户端使用 angular,所以 require 在这里不起作用。不过,这让我有了更好的洞察力。我会告诉你它是否有效:)
    • 如果你想调用api客户端你有一个Javascript例子here
    • 是的,也找到了 :) 只是对如何用我的凭据替换 google 登录按钮感到困惑。
    • 你在 youtube/api-samples github repo 中有一个完整的例子here
    • 是的,但我很难从代码中进行身份验证。该示例有一个用户的谷歌登录按钮,但我不需要那个,我只想在加载时初始化所有内容,因为用户不必登录
    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 2015-07-12
    • 2015-08-31
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    相关资源
    最近更新 更多