使用jQuery getJson获取Tumblr博客的所有帖子

3
我希望使用Tumblr的API和jQuery的getJson方法获取一个Tumblr博客的所有文本帖子。
我尝试使用以下代码,但只获得了20个帖子:
function loadPosts () {

  var key = "api_key=xBcVPLfdDKpH0GjMCd1whW7rPoYkzLgZD3ZwpzndISFI4huSpA"
  var api = "https://api.tumblr.com/v2/blog/only-text-posts.tumblr.com/"
  var post_amount

  $.getJSON(api + "info?" + key,function(data) {
    post_amount = data.response.blog.posts
    $.getJSON(api + "posts/text?&filter=text&limit=" + post_amount + "&" + key,function(data) {
      $.each(data.response.posts, function(i, item) {
        var content = item.body
        $("#Posts ul").append('<li>' + content + '</li>')
      });
    })
  })

}

这是一个用于测试的不错的Tumblr博客示例: http://only-text-posts.tumblr.com/

2
请添加您的代码并阅读http://stackoverflow.com/help/how-to-ask。 - jgillich
1
@jgillich 抱歉,这是我在StackOverflow上的第一个问题。现在我已经清楚了规则,非常感谢。 - Alice Chan
只是想说,如果你在主题中进行这个操作,你可以在主题本身中排除其他不想显示/输出的文章类型(除了文本文章)。但我不确定你的最终目标是什么。 - jonathanbell
2个回答

4
根据文档,最多只返回20篇文章。您可以使用offset参数指定偏移量,并通过多次调用检索所有文章:
function loadPosts () {

    var key = "api_key=your_key";
    var api = "https://api.tumblr.com/v2/blog/only-text-posts.tumblr.com/";
    var retrieve_more = function (offset) {
        $.getJSON(api + "posts/text?callback=?&filter=text&limit=20&offset=" + offset + "&" + key,function(data) {
            $.each(data.response.posts, function(i, item) {
                var content = item.body;
                $("#Posts ul").append('<li>' + content + '</li>')
            });

            if (data.response.posts.length == 20) {
                retrieve_more(offset + 20);
            }
        });
    };

    retrieve_more(0);
}

loadPosts();

fiddle


1
根据Tumblr Api文档,每个请求的帖子数量限制为20。您可以使用递增的偏移量执行多个请求。
var max_posts_per_page = 20;
$.getJSON(api + "info?" + key,function(data) {
    post_amount = data.response.blog.posts;
    for (var offset = 0; offset < post_amount; offset += max_posts_per_page) {
        $.getJSON(api + "posts/text?&filter=text&limit=" + max_posts_per_page + "&offset=" + offset + "&" + key,function(data) {
            $.each(data.response.posts, function(i, item) {
                var content = item.body
                $("#Posts ul").append('<li>' + content + '</li>')
            });
        });
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接