youtube的请求和我的要求之间的区别

时间:2015-06-10 07:18:41

标签: javascript post youtube

我想创建一个脚本,使每个视频的评论部分看起来像仍旧旧的那样。 例如,此频道上的视频:https://www.youtube.com/user/TheMysteryofGF/videos 在Firebug中,在Net选项卡中,我注意到请求的JSON文件的URL是不同的。 我试图在youtube手表页面上运行一个代码,它会以同样的方式请求文件,但它不起作用,并且在firebug中它说它被禁止了。 URL是相同的,它们都是POST,我无法弄清楚有什么不同。我甚至可以在firebug中重新发送原始请求并且它有效...所以无论如何,这是我用“1vptNpkysBQ”视频网址尝试的代码。

var getJSON = function(url, successHandler, errorHandler) {
  var xhr = typeof XMLHttpRequest != 'undefined'
    ? new XMLHttpRequest()
    : new ActiveXObject('Microsoft.XMLHTTP');
  xhr.open('post', url, true);
  xhr.onreadystatechange = function() {
    var status;
    var data;
     // https://xhr.spec.whatwg.org/#dom-xmlhttprequest-readystate
    if (xhr.readyState == 4) { // `DONE`
      status = xhr.status;
      if (status == 200) {
        data = JSON.parse(xhr.responseText);
        successHandler && successHandler(data);
       } else {
        errorHandler && errorHandler(status);
      }
    }
  };
  xhr.send();
};

getJSON('https://www.youtube.com/watch_fragments_ajax?v=1vptNpkysBQ&tr=time&frags=comments&spf=load', function(data) {
  alert('Your public IP address is: ' + data);
}, function(status) {
  alert('Something went wrong.');
});

1 个答案:

答案 0 :(得分:0)

您正在使用Ajax获取数据。 Ajax有1个限制:您只能从自己的服务器获取数据。当您尝试从另一个服务器/域获取数据时,您将获得一个" Access-Control-Allow-Origin"错误。

任何时候在网址中输入http://(或https://),都会出现此错误。

你必须以Youtube的方式去做。

这就是他们制作javascript API的原因。这是它的工作原理(原理)。您可以使用<来自其他服务器的javascript文件。脚本>标签

所以如果你能找到一个以

开头的javascript文件
var my_videos = ['foo', 'bar', 'hello', 'world'];

然后您可以在脚本中的任何位置使用var my_videos。这可以用于功能和数据。因此,服务器将此(动态生成的)脚本放在某个特定URL上。您,客户网站可以使用它。

如果你想真正理解它,你应该尝试构建自己的API;你会学到很多东西。

次要的事情:使用GET。

POST表示客户端将数据添加到服务器(例如:发表评论,上传文件,......)。 GET意味着您向服务器发送某种ID,然后服务器将自己的数据返回给客户端。

所以你在这里做的是纯粹的GET。