2016-04-08 7 views
1

Ich arbeite gerade an einer Funktion, um Videos über AJAX auf meinen Kanal hochzuladen. Ich habe es bis jetzt geschafft, die Autorisierung erfolgreich zu sortieren, und auf meinem Kanal wird ein "Video" erstellt, aber dort endet es. Keine der Daten scheint durchzukommen. Ich bin nicht sicher, wie man die Metadaten richtig sendet und ob die eigentlichen Videodaten selbst richtig gesendet werden.So senden Sie YouTube-Video-Metadaten über AJAX

Hier ist die Referenz YouTube: https://developers.google.com/youtube/v3/docs/videos/insert

Eine andere seltsame Sache, mit der Bitte, asynchron sein gesetzt, bekomme ich keine Antwort und die Ladefunktion nicht ausgeführt. Wenn asynchron auf "false" gesetzt ist, erhalte ich eine Antwort von 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); 
     } 

Antwort

0

Nun, ich habe es nicht genau herausgefunden, aber eine saubere Lösung gefunden.

  • Videodaten Post und erfassen die ID aus der Antwort
  • Dann mit den erforderlichen Metadaten

So ist das neu erstellte Video aktualisieren es nicht perfekt, aber es erreicht das Ziel: ein neues Video hochladen über AJAX mit Meta-Informationen.

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; 
    }