みかづきブログ その3

3ヶ月つづけてみました。

Tumblr API で 投稿内容を取得する その2

前回Tumblr API をつかって 最新の投稿(しかもTextのみ)を取得しました が、今回は様々な投稿タイプに対応させつつ最新20件を取得するように改修してみました。


Tumblr API で 投稿内容を取得する - みかづきブログ その3


DEMO


JavaScript

// forked from kimmy's "Tumblr API" http://jsdo.it/kimmy/v6o2
$(function(){
    var domain = "surprisewindow.tumblr.com";

    // https://www.tumblr.com/oauth/apps にて登録
    var api_key = "FfE6jtsNbBS39vl6ObD418bzzSwodZv01PbqV5Veo9EUByDxtv";

    $.ajax({
        url: "http://api.tumblr.com/v2/blog/"+domain+"/posts?api_key="+api_key,
        dataType: "jsonp"
    }).done(function(evt) {
        var img = new Image();
        var ms = 200;
        var $tmpl;
        
        console.log(evt);

        try {
            for (var i = 0, length = evt.response.posts.length; i < length; ++i) {
                console.log(evt.response.posts[i].type);
                switch(evt.response.posts[i].type) {
                    case "text":
                        $tmpl = $("#tmpl-text").clone(false);
                        $tmpl.find(".post-ttl").text(evt.response.posts[i].title);
                        $tmpl.find(".post-body").html(evt.response.posts[i].body);
                        $tmpl.find(".post-footer").text(evt.response.posts[i].date);
                        break;
                    case "photo":
                        $tmpl = $("#tmpl-photo").clone(false);
                        $tmpl.find(".post-photo").css({
                            backgroundImage: "url(" + evt.response.posts[i].photos[0].alt_sizes[0].url + ")"
                        });
                        $tmpl.find(".post-body").html(evt.response.posts[i].caption);
                        $tmpl.find(".post-footer").text(evt.response.posts[i].date);
                        break;
                    case "quote":
                        $tmpl = $("#tmpl-quote").clone(false);
                        $tmpl.find(".post-ttl").text(evt.response.posts[i].title);
                        $tmpl.find(".post-body").html(evt.response.posts[i].text);
                        $tmpl.find(".post-src").html(evt.response.posts[i].source);
                        $tmpl.find(".post-footer").text(evt.response.posts[i].date);
                        break;
                    case "link":
                        $tmpl = $("#tmpl-link").clone(false);
                        $tmpl.find(".post-ttl").text(evt.response.posts[i].title);
                        $tmpl.find(".post-body").html(evt.response.posts[i].description);
                        $tmpl.find(".post-footer").text(evt.response.posts[i].date);
                        break;
                    case "chat":
                        $tmpl = $("#tmpl-chat").clone(false);
                        $tmpl.find(".post-ttl").text(evt.response.posts[i].title);
                        $tmpl.find(".post-body").html(evt.response.posts[i].body.replace(/\n|\r/g, "<br />"));
                        $tmpl.find(".post-footer").text(evt.response.posts[i].date);
                        break;
                    case "audio":
                        $tmpl = $("#tmpl-audio").clone(false);
                        $tmpl.find(".post-ttl").text(evt.response.posts[i].source_title);
                        $tmpl.find(".post-body").html(evt.response.posts[i].caption);
                        $tmpl.find(".post-footer").text(evt.response.posts[i].date);
                        break;
                    case "video":
                        $tmpl = $("#tmpl-video").clone(false);
                        $tmpl.find(".post-ttl").text(evt.response.posts[i].source_title);
                        $tmpl.find(".post-photo").css({
                            backgroundImage: "url(" + evt.response.posts[i].thumbnail_url + ")"
                        });
                        $tmpl.find(".post-body").html(evt.response.posts[i].caption);
                        $tmpl.find(".post-footer").text(evt.response.posts[i].date);
                        break;
                }

                $tmpl.find(".post-link").attr({
                    href: evt.response.posts[i].post_url,
                    target: "_blank"
                });
                
                $tmpl.appendTo($("#news"));
                $tmpl.css({
                    display: "block"
                });
            }
        } catch(err) {
            console.log(err);
        }
    });
});

HTML

<div id="news"></div>

<div id="tmpl-text" class="post">
    <p class="post-ttl"></p>
    <p class="post-body"></p>
    <p class="post-footer" class="footer"></p>
    <a class="post-link"></a>
</div>

<div id="tmpl-photo" class="post">
    <p class="post-photo"></p>
    <p class="post-body"></p>
    <p class="post-footer" class="footer"></p>
    <a class="post-link"></a>
</div>

<div id="tmpl-quote" class="post">
    <p class="post-body"></p>
    <p class="post-src"></p>
    <p class="post-footer" class="footer"></p>
    <a class="post-link"></a>
</div>

<div id="tmpl-link" class="post">
    <p class="post-ttl"></p>
    <p class="post-body"></p>
    <p class="post-footer" class="footer"></p>
    <a class="post-link"></a>
</div>

<div id="tmpl-chat" class="post">
    <p class="post-ttl"></p>
    <p class="post-body"></p>
    <p class="post-footer" class="footer"></p>
    <a class="post-link"></a>
</div>

<div id="tmpl-audio" class="post">
    <p class="post-ttl"></p>
    <p class="post-body"></p>
    <p class="post-footer" class="footer"></p>
    <a class="post-link"></a>
</div>

<div id="tmpl-video" class="post">
    <p class="post-photo"></p>
    <p class="post-body"></p>
    <p class="post-footer" class="footer"></p>
    <a class="post-link"></a>
</div>

SCSS

body {
    word-wrap: break-word;
    background-color: #263238;
}

.post {
    display: none;
    position: relative;
    margin: 5px;
    padding: 10px;
    font-family: "Courier New", Courier, monospace;
    background: #fff;
}

.post-ttl {
    padding: 10px 10px 0 10px;
    color: #494949;
    font-size: 16px;
    font-weight: bold;
}

.post-body, .post-src {
    padding: 10px;
    color: #6e7173;
    line-height: 15px;

    div, p, a {
        color: #6e7173;
        font-size: 13px;
        line-height: 15px;
    }
}

.post-photo {
    margin: auto;
    width: 300px; height: 300px;
    background-position: center center;
    background-repeat: no-repeat;
    background-size: contain;
}

.post-footer {
    margin-top: 10px;
    padding: 5px 10px;
    border-radius: 4px;
    color: #666;
    font-family: 'Courier New', Courier, monospace;
    font-size: 11px;
    background: #eaeaea;
}

.post-link {
    display: block;
    position: absolute;
    top: 0; left: 0;
    width: 100%; height: 100%;
}

AudioとかVideoのプレビュー機能を削り、元記事へ飛ばすことに専念させたのでコード自体は前回とそこまで変わってません。