【问题标题】:How to send YouTube video meta data via AJAX如何通过 AJAX 发送 YouTube 视频元数据
【发布时间】:2016-07-30 08:46:57
【问题描述】:

我目前正在开发通过 AJAX 将视频上传到我的频道的功能。到目前为止,我已经成功地对授权进行了排序,并且正在我的频道上创建一个“视频”,但这就是它结束的地方。似乎没有任何数据通过。我不确定如何正确发送元数据以及实际视频数据本身是否正确发送。

这里是 YouTube 参考:https://developers.google.com/youtube/v3/docs/videos/insert

另外一件奇怪的事情是,将请求设置为异步,我没有得到响应,加载函数也没有运行。将异步设置为 false,我收到了 YouTube 的回复。

function UploadVideo()
        {
            formData = new FormData();

            video = {
                snippet : {
                    title : "Test Video",
                    description : "This is a test video",
                    categoryId : "22",
                    tags : "test"
                    }
                };

            file = document.getElementById("test_video").files[0];

            ajax = new XMLHttpRequest();

            formData.append("file", file);
            formData.append("snippet", JSON.stringify(video));

            ajax.open("POST", "https://www.googleapis.com/upload/youtube/v3/videos?part=snippet", true);
            ajax.setRequestHeader("Content-type", "application/octet-stream");
            ajax.setRequestHeader("Authorization", '<?php echo $authorization_header; ?>');

            ajax.onload = function() {
                if (ajax.status == 200) {
                    alert(ajax.responseText);
                    document.getElementById("video_response").innerHTML = ajax.responseText;
                }
            };   
            ajax.send(formData);
        }

【问题讨论】:

    标签: javascript ajax api video youtube


    【解决方案1】:

    好吧,我没有弄清楚,但找到了一个整洁的解决方案。

    • 发布视频数据并从响应中获取 id
    • 然后使用所需的元数据更新新创建的视频

    所以它并不完美,但它实现了目标:通过 AJAX 上传带有元信息的新视频。

        function UpdateVideoInfo(video_id){
            var resource = {
                    'snippet':{
                        'title' : 'test title',
                        'description' : 'test description',
                        'categoryId' : 22
                    },
                    'status' : {
                        'privacyStatus' : 'private'
                    },
                    'id': video_id
                };
    
            post_string = JSON.stringify(resource);
    
            var ajax = new XMLHttpRequest();
            ajax.open('PUT', 'https://www.googleapis.com/youtube/v3/videos?part=snippet,status', true);
            ajax.setRequestHeader("Authorization", '<?php echo $authorization_header; ?>');
            ajax.setRequestHeader("Content-type", "application/json; charset=UTF-8");
            ajax.send(post_string);
    
            ajax.onload = function() {
                if (ajax.status == 200) {
                    alert(ajax.responseText);
                }
            };
        }
    
        function UploadVideo(){
            var file = document.getElementById("test_video").files[0];    
    
            var ajax = new XMLHttpRequest();
    
            ajax.open("POST", "https://www.googleapis.com/upload/youtube/v3/videos?part=snippet", true);
            ajax.setRequestHeader("Content-type", "application/octet-stream");
            ajax.setRequestHeader("Authorization", '<?php echo $authorization_header; ?>');
    
            ajax.onload = function() {
                if (ajax.status == 200) {
                    var response_body = JSON.parse(ajax.responseText);
    
                    document.getElementById("video_response").innerHTML = response_body;
    
                    UpdateVideoInfo(response_body['id']);
                }
            };
            ajax.send(file);           
    
            return false;
        }
    

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 2019-02-15
      • 2014-04-06
      • 1970-01-01
      • 2013-11-05
      相关资源
      最近更新 更多