允许我的Tumblr博客的内容被另一个页面访问

Zac*_*ier 1 api ajax jsonp tumblr httpcontent

我试图使用我在不同网页上编写的脚本从我的Tumblr博客中复制所有实际内容,但是我在获取内容时遇到了一些麻烦.我的ajax电话如下:

$.ajax({
     url: "http://solacingsavant.tumblr.com/",
     dataType: 'jsonp',
     success: function(data) {
          var elements = $("<div>").html(data)[0].getElementsByTagName("ul")[0].getElementsByTagName("li");
          for(var i = 0; i < elements.length; i++) {
               var theText = elements[i].firstChild.nodeValue;
               alert(theText); // Alert if I got something
              // This is where I'll strip the data for the items I want
          }
     }
});
Run Code Online (Sandbox Code Playgroud)

但因为它是控制台给我一个错误"资源解释为脚本,但转移与MIME类型text/html",我在这里查看并更改meta我的博客的HTML 相应的标签,但<meta http-equiv="Content-Type" content="application/javascript; charset=utf-8" />没有成功

我也尝试过使用dataType: 'html'(这对我来说更有意义)但是我收到了一个控制台错误"来自Access-Control-Allow-Origin不允许来源" ,我也调查过并向我的Tumblr博客添加了一个元标记<meta Access-Control-Allow-Origin="*" />,但又没有成功

这是一个可以使用的jsFiddle

我的方法不起作用,因为Tumblr作为一个整体不允许更改Access-Control吗?如果是这样,我该如何解决这个问题呢?如果没有,我做错了什么?

主要编辑(基于mikedidthis的有用评论)

似乎没有Tubmlr API我无法做到这一点,所以我获得了一个API密钥,现在可以访问API发出的json结果.我能够在控制台中使用API​​密钥获取jsonp对象.我的javascript目前:

$.ajax({
    url: "http://api.tumblr.com/v2/blog/solacingsavant.tumblr.com/info?api_key=APIkeyGoesHeRe",
    dataType: 'jsonp',
    success: function(results){
        console.log(results); 
        // Get data from posts here
    }
});
Run Code Online (Sandbox Code Playgroud)

这篇SO帖子有助于理解我如何从源代码更改我的Tubmlr页面上的数据,并找到有关该站点的基本信息,而不是如何从各个帖子获取实际数据.我尝试查看results对象并且无法找到与帖子相关的任何数据,也无法将结果附加到jsfiddle.所以我现在的问题是,"我可以使用这种方法从个别帖子中复制数据(比如帖子中的书面文字)吗?如果是这样,怎么样?如果不是,我应该使用其他什么方法?"

mik*_*his 5

一个非常快速的答案

tumblr API文档确实涵盖了使用API​​,但是,为了给你一点开始,让我们抓住你所有的文本帖子.

首先,您需要查询任何Text类型的帖子的API .

文档声明(http://www.tumblr.com/docs/en/api/v2#posts)我们应该使用以下URL并指定我们将设置的类型text:

api.tumblr.com/v2/blog/solacingsavant.tumblr.com/posts[/type]
Run Code Online (Sandbox Code Playgroud)

下面是一个基于OP小提琴的例子.

$.ajax({
    url: "http://api.tumblr.com/v2/blog/solacingsavant.tumblr.com/posts/text?api_key=XXXXXXX",
    dataType: 'jsonp',
    success: function(data){
        posts = data.response.posts
        $.each(posts, function(i) {
            console.log( posts[i].title, posts[i].body )
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

因此,对于API的每个查询,我们将收到一个对象.您需要过滤此对象以从中获取所需的数据.

在帖子查询的上下文中,您可以使用data.response.posts对象直接访问您的帖子.

要查找每种帖子类型可用的数据,请参阅文档:http://www.tumblr.com/docs/en/api/v2#text-posts

对于每个Text帖子类型的内容,您需要遍历该posts对象,然后获取名为title和的键的值body.

示例:http://jsfiddle.net/ZpFwL/

奖励时间 通过type从URL中删除,可以获取所有类型的帖子:

http://api.tumblr.com/v2/blog/solacingsavant.tumblr.com/posts/?api_key=XXXXXXX "

请记住,这是一个非常快速的例子,而不适用于现实世界.