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

时间:2013-10-14 19:39:09

标签: ajax api 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
          }
     }
});

但因为它是控制台给我一个错误“资源解释为脚本,但转移了MIME类型text / html”I looked into here并更改了我的博客的HTML中相应的meta标记到<meta http-equiv="Content-Type" content="application/javascript; charset=utf-8" />没有成功

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

<击> Here is a jsFiddle to work with

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

MAJOR EDIT(基于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
    }
});

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

1 个答案:

答案 0 :(得分:5)

一个非常快速的回答

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

首先,您需要查询任何类型为文字的帖子的API。

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

api.tumblr.com/v2/blog/solacingsavant.tumblr.com/posts[/type]

下面是一个基于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 )
        });
    }
});

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

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

要了解每种帖子类型可用的数据,文档都包含以下内容:http://www.tumblr.com/docs/en/api/v2#text-posts

对于每个文本帖子类型的内容,您需要遍历posts对象,然后获取名为title和{{}的键的值1}}。

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

加分时间 通过从网址中删除body,可以获取所有类型的帖子:

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

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