จะอัปเดตตัวอย่างและค่าสถานะของวิดีโอที่อัปโหลดแล้วผ่าน YouTube API v3 ได้อย่างไร

วิธีเปลี่ยนตัวอย่างและค่าสถานะของวิดีโอที่อัปโหลดแล้วผ่าน YouTube API v3 "https://www.googleapis.com/youtube/v3/videos" โดยใช้คำขอ AJAX หรือไม่

รหัสที่อัปเดตของฉัน (ไม่ทำงาน):

$.ajax({
        type: "PUT",
        dataType: "jsonp", 
        url: "https://www.googleapis.com/youtube/v3/videos?part=id,snippet,status&key=<API Key>",
        headers: {
            "Content-Type": "application/json",
            "Authorization": "Bearer " + <Access Token>
        },
        data: $.parseJSON('{"id": "<Video ID>", "snippet": {"title": "New Title", "description": "New Description"}, "status": {"privacyStatus": "unlisted"}}'), 
        success: function(data, error, completeError) {
            alert( JSON.stringify(data));
            alert( JSON.stringify(error));
            alert( JSON.stringify(completeError));
        }
    });

person user2985035    schedule 10.02.2016    source แหล่งที่มา


คำตอบ (2)


ส่งคำขอ PUT ไปยังปลายทาง videos/update ด้วยพารามิเตอร์ part=id,snippet,status:

HTTP PUT: https://www.googleapis.com/youtube/v3/videos?part=id,snippet,status&key={YOUR_API_KEY}

เนื้อความของคำขอของคุณ:

{
    "id": "VIDEO_ID",
    "snippet": { // any snippet fields you want to change
        "description": "New Video Description"
    },
    "status": { // any status fields you want to change
        "privacyStatus": "public"
    }
}
person JAL    schedule 10.02.2016
comment
URL ควรเป็นดังนี้ (แก้ไขฉันหากฉันผิด) - person user2985035; 10.02.2016
comment
googleapis.com/youtube/v3/videos/{YOUR_API_KEY} ของคุณ - person user2985035; 10.02.2016
comment
@ user2985035 ไม่ใช่ /videos/update มันเป็นแค่ /videos URL แบบเต็มในคำตอบของฉันคือตำแหน่งที่คุณควรเรียกคำขอ PUT: https://www.googleapis.com/youtube/v3/videos?part=id%2C+snippet&key={YOUR_API_KEY} - person JAL; 10.02.2016
comment
ตกลง แต่ฉันสับสนกับส่วนนี้ part=id%2C+snippet ใน url - person user2985035; 10.02.2016
comment
@ user2985035 โอ้ ฉันเข้าใจสิ่งที่คุณพูดแล้ว ฉันคิดว่านั่นเป็นปัญหาเกี่ยวกับการเข้ารหัส URL ทางฝั่งของ Google URL แบบเต็มควรมีลักษณะดังนี้: https://www.googleapis.com/youtube/v3/videos?part=id,snippet,status&key={YOUR_API_KEY} คุณต้องส่งผ่านใน id เพื่อรับวิดีโอ และ snippet และ status เนื่องจากคุณกำลังแก้ไขคุณสมบัติเหล่านั้น - person JAL; 10.02.2016
comment
@ user2985035 %2C เป็นอักขระหลีกการเข้ารหัส URL สำหรับ , คุณจะต้องเข้ารหัสพารามิเตอร์ URL ก่อนทำการร้องขอ เพื่อให้ถูกต้อง - person JAL; 10.02.2016
comment
โอเค ไม่เป็นไร ฉันควรส่งวัตถุ Json ตามที่เป็นอยู่หรือควรทำให้เป็น JSON.stringify(data) หรือไม่ - person user2985035; 10.02.2016
comment
@ user2985035 หากคุณกำลังสร้าง JSON เป็นพจนานุกรม ก็ไม่จำเป็นต้องเข้ารหัส หากคุณกำลังสร้างมันเป็นสตริง ให้ใช้ parseJSON อาจมีลักษณะเช่นนี้: $.parseJSON('{"id": "VIDEO_ID", "snippet": {"title": "New Title", "description": "New Description"}, "status": {"privacyStatus": "unlisted"}}') - person JAL; 10.02.2016
comment
ฉันลองแล้ว แต่น่าเสียดายที่มันไม่ได้อัปเดตค่าวิดีโอ มันให้ค่าเดียวกันกลับคืนมาโดยไม่มีการเปลี่ยนแปลงและไม่มีข้อผิดพลาดด้วย - person user2985035; 10.02.2016
comment
@ user2985035 คุณแน่ใจหรือว่าคุณกำลังตั้งค่าคำขอโพสต์ HTTP อย่างถูกต้อง คุณสามารถโพสต์รหัสเต็มของคุณในคำถามของคุณได้หรือไม่? - person JAL; 10.02.2016

นี่คือรหัสที่ฉันใช้เมื่อเล่น มันทำงานได้ดีแม้ว่า มันไม่ได้ใช้ JQuery แต่ควรชี้คุณไปในทิศทางที่ถูกต้อง

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);
            }
        };
    }
person cypher2012    schedule 03.05.2016