はてなアルバムからはてなブログに引っ越す

    
      
  • /*
     * @title はてなアルバムからはてなブログに引っ越す
     * @description はてなアルバムからはてなブログにインポート可能なMT形式を生成します.アルバムページで実行してください.
     * @include http://album.hatena.ne.jp/album/*
     * @license MIT License
     * @require http://higashi-dance-network.appspot.com/bon/js/base64.js
     */
    
    var template = function(text) {
        return function(values) {
            return text.replace(/{([^}]+)}/g, function(_, key) {
                return values[key];
            });
        }
    };
    
    var item_template = template([
        "AUTHOR: {author_name}",
        "DATE: {date}",
        "PRIMARY_CATEGORY: {category}",
        "-----",
        "BODY:",
        "{body}",
        "--------"
    ].join("\n"));
    
    var item_to_mt_syntax = function($img, category) {
        var fotolife_url = $img.attr('data-image-url');
        var image_url = $img.attr('data-image-image');
        var $a = $('<a>');
        $a.attr('href', fotolife_url);
        var pathname = $a[0].pathname;
        var author_name = pathname.split('/')[1];
        var date = pathname.split('/')[2];
        var year = date.substr(0, 4);
        var month = date.substr(4, 2);
        var day = date.substr(6, 2);
        var hour = date.substr(8, 2);
        var minute = date.substr(10, 2);
        var second = date.substr(12, 2);
    
        var body_template = template('<p><img class="http-image" src="{url}"></p>\n<p>Photo by id:{author_name}:detail</p>');
        var date_template = template('{month}/{day}/{year} {hour}:{minute}:{second}');
    
        return item_template({
            body: body_template({url: image_url, author_name: author_name}),
            date: date_template({year: year, month:month, day:day, hour:hour, minute:minute, second:second}),
            author_name: author_name,
            basename: date,
            category: category
        });
    };
    
    var main = function() {
        var mt_syntax = $('.photo-image').map(function() {
            var $img = $(this);
            return item_to_mt_syntax($img, Hatena.Album.title);
        }).get().join("\n") + "\n";
    
        var $message = $('<p>');
        $message.css('background', 'white', 'padding', '5px');
        $message.append('右クリックで保存してください:');
        var $download = $('<a>');
        $download.css('text-decoration', 'underline');
        $download.text(Hatena.Album.title + '.txt');
        $download.attr({
            href: 'data:text/plain;charset=utf-8;base64,' + Base64.encode(mt_syntax)
        });
        $message.append($download);
    
        $message.append('<br>');
        $message.append('ダウンロードしたファイルはMovableTye形式ではてなブログにインポートできます:');
        var $import_link = $('<a>');
        $import_link.css('text-decoration', 'underline');
        $import_link.attr('target', '_blank');
        $import_link.attr('href', 'http://blog.hatena.ne.jp/my/import/movable_type');
        $import_link.text('はてなブログにインポートする');
        $message.append($import_link);
    
        $message.hide();
        $('#container').prepend($message);
        $message.slideDown();
    };
    
    if (!$('body.album')[0]) {
        alert('アルバムページで実行してください');
        return;
    }
    
    main();
    
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2014/06/22 22:29:31 - 2014-06-22
  2. 2014/06/22 22:08:14 - 2014-06-22