如何通过AJAX发送YouTube视频元数据

How to send YouTube video meta data via AJAX

本文关键字:视频 元数据 YouTube 发送 何通过 AJAX      更新时间:2024-04-13

我目前正在开发一个功能,通过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);
        }

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

  • 发布视频数据并从响应中捕获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;
    }