Tumblr API以大尺寸获得最近50张不太合适的照片帖子

时间:2014-05-14 09:57:05

标签: jquery ajax api jsonp tumblr

我有一些非常接近我需要的东西,但我必须遗漏一些东西。

这是我的代码:

$.ajax({
   url: "http://api.tumblr.com/v2/blog{my-blog}/posts?limit=50",
   dataType: 'jsonp',
   data: {
       api_key: "{my key}"
   },
success: function(results){
    console.log(results);
    var i = 0;

    while (i < 50) {

        var type = results.response.posts[i].type;
        console.log(results.response.posts.length);

            if (type == "photo") {
                var getImages = results.response.posts[i].photos[i].alt_sizes[0].url;
                $("#tumblr-posts").append("<div class='postbody'>" + "<img src=" + getImages + " /></div>");
            }
        i++;
    }   
}
});

这是从我的博客中返回大尺寸的第一张图片,但我也在控制台中收到错误:无法读取未定义的属性'alt_sizes'。我尝试了一些变化,但购买我的逻辑循环应该返回所有帖子.posts [i],所有照片.photos [i]然后alt_sizes [0]数组中的第一个图像应该是大图像。

控制台显示正在返回50个对象,因此对API的调用是正常的。

任何帮助非常感谢。

1 个答案:

答案 0 :(得分:3)

您正在使用计数器i来选择postsphotos的特定属性,这就是它返回undefined的原因,例如:

i = 1;
var getImages = results.response.posts[1].photos[1].alt_sizes[0].url;

posts[1]是回复中的第二篇帖子,但photos[1]引用了posts[1]的第二张照片,可能不存在作为单个照片信息。

你需要创建另一个循环来检查每个帖子多张照片,照片最多可以有10张照片。

var i = 0;

while (i < 50) {

  var type = results.response.posts[i].type;

  if (type == "photo") {

    var photos = results.response.posts[i].photos;

    for (var j = 0; j < photos.length; j++) {
      console.log( photos[j].alt_sizes[0].url );
    }

  }

  i++;

}   

还值得一提的是,在较旧的图片上,如果没有高分辨率版本可用,它不会回退到另一个URL,其左边空白,所以您可能还需要检查它。