コマネタ帳(旧) by iyoupapa

PCや土いじりやゲームやオモチャ、思いつくまま細切れネタを書き散らかす日記

Creative Commons Licenseiyoupapaが書いたコマネタ帳の文章は「Creative Commons 表示-継承 2.1 日本」ライセンスです。写真については私のFlickrで配布しています。新しい「コマネタ帳」に移転しました。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[プログラミング]TomblooでdeviantART(Version 7)からCC情報を付けてポストする

deviantARTVersion 7へ更新されていました。以前作ったTomblooパッチが動かなくなっていたので、修正しました。

以前はサムネイルの画像とフルサイズの画像で別のHostが使われていましたが、今度からフルサイズを縮小してサムネイルとして表示するようです。その方がCDNとか都合がいいのか、JavaScriptとか動かないとフルサイズ優先と言うことなのか判りませんけど、地味な変更です。

あと作者の名前を取り出すxPathが変わっていますね…。

ということで、よろしければお使い下さいませ。あと、動かないよって時は優しくお知らせ下さると嬉しいな。

See also:

スポンサーサイト

[プログラミング]TomblooでdeviantARTからCC情報を付けてポストする

前回の「[プログラミング]TomblooでFlickrのCC情報をつけてポストする」を改造して、deviantARTからポストするときもCreative Commonsの情報を付けるようにしてみました。

2010/5/19 追記

こちらのソースは deviantART Version 7 では動作しません。「[プログラミング]TomblooでdeviantART(Version 7)からCC情報を付けてポストする」をご覧下さい。

前回やった31_Tombloo.Service.extractors.jsの書き換えは、関数置き換えに直しました。やっぱりTomblooの更新毎に書き換えるのは面倒だからね。

以下ソース。前回のFlickr.cc.jsとは衝突するので、万が一使っている人がいたら削除してからにしてね。ダウンロードはCCAppend.jsからどうぞ。

(function() {
Tombloo.Service.extractors.register({
  name : 'Photo - DeviantArt',
  ICON : 'http://st.deviantart.net/icons/favicon.ico',
  URL  : 'http://www.deviantart.com/',
  check : function(ctx){
    return ctx.onImage && 
      ctx.target.src.match('^http://.....deviantart\.(net|com)/..../');
  },
  extract : function(ctx){
    var author = $x('(//div[@class="catbar"]//a[@class="u"])[1]');
    var cc = $x('(//div[@class="cc_license_text"])');
    if (cc) {
      cc = cc.innerHTML
             .replace(/<\/?em>/g, '')
             .replace(/<br>/g, '')
             .replace(/rel="license"/g, '')
             .replace(/target="_blank"/g, '')
             .replace(/  +/g, ' ');
    }
    var url;
    if (ctx.target.src.match('^http://.....deviantart\.net/..../')) {
      url = ctx.target.src
          .replace(/..(..)\.deviantart\.net\/(....)\/[^\/]+\//, 'fc$1.deviantart.com/$2/');
    } else {
      url = ctx.target.src;
    }
    // http://th05.deviantart.net/fs50/300W/f/2009/261/9/0/Pegasus_Manip_by_blommix.png
    // http://fc05.deviantart.com/fs50/f/2009/261/9/0/Pegasus_Manip_by_blommix.png
    return {
      type      : 'photo',
      item      : ctx.title.extract(/(.*) by .+ on deviantART/i),
      itemUrl   : url,
      author    : author.textContent.trim(),
      authorUrl : author.href,
      license   : cc,
    };
  },
}, 'Photo', false);

Tombloo.Service.extractors['Photo - Flickr']['extract'] = function(ctx){
  var id = this.getImageId(ctx);
  return new DeferredHash({
    'info'  : Flickr.getInfo(id),
    'sizes' : Flickr.getSizes(id),
  }).addCallback(function(r){
    if(!r.info[0])
      throw new Error(r.info[1].message);

    var info = r.info[1];
    var sizes = r.sizes[1];

    var title = info.title._content;
    ctx.title = title + ' on Flickr'
    ctx.href  = info.urls.url[0]._content;

    return {
      type      : 'photo',
      item      : title,
      itemUrl   : sizes.pop().source,
      author    : info.owner.username,
      authorUrl : ctx.href.extract('^(http://.*?flickr.com/photos/.+?/)'),
      favorite  : {
        name : 'Flickr',
        id   : id,
      },
      license   : info.license,
      date      : info.dates.taken,
    }
  }).addErrback(function(err){
    return Tombloo.Service.extractors['Photo'].extract(ctx);
  });
};

addAround(
  Tombloo.Service.extractors,
  'extract',
  function(proceed, args, target, methodName) {
    return proceed(args).addCallback(function(ps){
      switch (ps.license) {
      case '1':
        var dd = ps.date.split('-');
        ps.description = '(c) ' + dd[0] + ' <a href="' + ps.authorUrl + '">' + ps.author + '</a>'
        + ' under <a href="http://creativecommons.org/licenses/by-nc-sa/2.0/">CC-BY-NC-SA</a> license.'
        ps.private = false;
        break;
      case '2':
        var dd = ps.date.split('-');
        ps.description = '(c) ' + dd[0] + ' <a href="' + ps.authorUrl + '">' + ps.author + '</a>'
        + ' under <a href="http://creativecommons.org/licenses/by-nc/2.0/">CC-BY-NC</a> license.'
        ps.private = false;
        break;
      case '3':
        var dd = ps.date.split('-');
        ps.description = '(c) ' + dd[0] + ' <a href="' + ps.authorUrl + '">' + ps.author + '</a>'
        + ' under <a href="http://creativecommons.org/licenses/by-nc-nd/2.0/">CC-BY-NC-ND</a> license.'
        ps.private = false;
        break;
      case '4':
        var dd = ps.date.split('-');
        ps.description = '(c) ' + dd[0] + ' <a href="' + ps.authorUrl + '">' + ps.author + '</a>'
        + ' under <a href="http://creativecommons.org/licenses/by/2.0/">CC-BY</a> license.'
        ps.private = false;
        break;
      case '5':
        var dd = ps.date.split('-');
        ps.description = '(c) ' + dd[0] + ' <a href="' + ps.authorUrl + '">' + ps.author + '</a>'
        + ' under <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a> license.'
        ps.private = false;
        break;
      case '6':
        var dd = ps.date.split('-');
        ps.description = '(c) ' + dd[0] + ' <a href="' + ps.authorUrl + '">' + ps.author + '</a>'
        + ' under <a href="http://creativecommons.org/licenses/by-nd/2.0/">CC-BY-ND</a> license.'
        ps.private = false;
        break;
      default:
        if (ps.license) {
          ps.description = '(c) <a href="' + ps.authorUrl + '">' + ps.author
          + '</a> ' + ps.license;
          ps.private = false;
        } else if (ps.type == 'photo') {
          //ps.private = true;
        }
        break;
      }
      return ps;
    });
  }
);

})();

実はエラー処理をサボっているので、Full Viewの映像が取れないとかするとスクリプトエラーになります(苦笑)。ごめんね、ごめんね。あ、githubに入れておけば他の人に弄ってもらいやすいのか…やってみる価値あるかもね。アカウントだけは作ったんだけどなー。

[プログラミング]TomblooでFlickrのCC情報をつけてポストする

2009/09/19 追記

[プログラミング]TomblooでdeviantARTからCC情報を付けてポストする | コマネタ帳」もご覧ください。

LDR+TomblooでTumblrしているんですが、せっかくCreative Commonsな画像をポストしても適切な情報が付加されないという勿体ない状態に。とりあえず、Flickrからのポストの時はCCライセンスの情報をAPIでもらってクレジットをつけてみるようにしました。せっかくなのでソースを晒しておきますが、ほとんどテストしていませんのでご注意ください。

まずは本体ファイル。tombloo/scriptフォルダに保存します。ファイル名はとりあえずFlickr.cc.jsにしています。本当はID番号とURIの関係は別のAPIで取得するべきなんですがサボってます、すみません。

addAround(
  Tombloo.Service.extractors['Photo - Flickr'], 'extract',
  function(proceed, args, target, methodName) {
    return proceed(args).addCallback(function(ps){
      switch (ps.license) {
      case '1':
        var dd = ps.date.split('-');
        ps.description = '(c) ' + dd[0] + ' <a href="' + ps.authorUrl + '">' + ps.author + '</a>'
        + ' Licensed under <a href="http://creativecommons.org/licenses/by-nc-sa/2.0/">CC-BY-NC-SA</a>.'
        break;
      case '2':
        var dd = ps.date.split('-');
        ps.description = '(c) ' + dd[0] + ' <a href="' + ps.authorUrl + '">' + ps.author + '</a>'
        + ' Licensed under <a href="http://creativecommons.org/licenses/by-nc/2.0/">CC-BY-NC</a>.'
        break;
      case '3':
        var dd = ps.date.split('-');
        ps.description = '(c) ' + dd[0] + ' <a href="' + ps.authorUrl + '">' + ps.author + '</a>'
        + ' Licensed under <a href="http://creativecommons.org/licenses/by-nc-nd/2.0/">CC-BY-NC-ND</a>.'
        break;
      case '4':
        var dd = ps.date.split('-');
        ps.description = '(c) ' + dd[0] + ' <a href="' + ps.authorUrl + '">' + ps.author + '</a>'
        + ' Licensed under <a href="http://creativecommons.org/licenses/by/2.0/">CC-BY</a>.'
        break;
      case '5':
        var dd = ps.date.split('-');
        ps.description = '(c) ' + dd[0] + ' <a href="' + ps.authorUrl + '">' + ps.author + '</a>'
        + ' Licensed under <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>.'
        break;
      case '6':
        var dd = ps.date.split('-');
        ps.description = '(c) ' + dd[0] + ' <a href="' + ps.authorUrl + '">' + ps.author + '</a>'
        + ' Licensed under <a href="http://creativecommons.org/licenses/by-nd/2.0/">CC-BY-ND</a>.'
        break;
      }
      return ps;
    });
});

次に31_Tombloo.Service.extractors.jsを変更します。Tomblooを更新すると変更が上書きされるので避けたいのですが、この中で呼んでるgetInfo APIでライセンス情報が取れるので、とりあえずこちらを変更しました。いっそextractメソッド丸ごとFlickr.cc.jsに持ってくればいいのかな?

  {
    name : 'Photo - Flickr',
    ICON : models.Flickr.ICON,
    // 中略

    extract : function(ctx){
      var id = this.getImageId(ctx);
      return new DeferredHash({
        'info'  : Flickr.getInfo(id),
        'sizes' : Flickr.getSizes(id),
      }).addCallback(function(r){
        if(!r.info[0])
          throw new Error(r.info[1].message);
        
        var info = r.info[1];
        var sizes = r.sizes[1];
        
        var title = info.title._content;
        ctx.title = title + ' on Flickr'
        ctx.href  = info.urls.url[0]._content;
        
        return {
          type      : 'photo',
          item      : title,
          itemUrl   : sizes.pop().source,
          author    : info.owner.username,
          authorUrl : ctx.href.extract('^(http://.*?flickr.com/photos/.+?/)'),
          favorite  : {
            name : 'Flickr',
            id   : id,
          },
          // ここから追加
          license   : info.license,
          date      : info.dates.taken,
          // ここまで追加
        }
      });
    },
  },

これでFlickrからポストすると、Descriptionに例えば「(c) 2008 iyoupapa Licensed under CC-BY-SA.」といった文字列が自動で設定されます。表記としてこれで正しいのか、全く自信がないのですが何もないよりいいんじゃないかな。

できればrel="license"とかRDFを認識した方が適用範囲は広くなるんですが、意外と機械的に適用できない(一部分だけに適用、とかReblogは除く、とか)ケースが見受けられるので、比較的確実なFlickrに絞ってみました。RDFの適用範囲とか調べないとダメですね。

あとは過去のポストのライセンスを確認して、CC情報をつけるか削除(orプライベート)するかしないと…手作業じゃ無理なんでなんか作るしかないですね。そこまでするならTumblrヤメレってのは無しの方向で。

[プログラミング]リファラのスライサで遊んでみる

コマネタ帳のネタ帳mojalogさんの「リファラをスライスするウェブサービスとajaxでサイト内再検索ウェブパーツ (mojalog)」へリンクしたところ、「検索ワードの有効利用エントリのお詫びと訂正 (mojalog)」にて「クロスドメインでも使えるように直したよ!」とお知らせいただきました。ありがたや~。

さっそく、リファラの検索ワードを左上の検索窓に入れるのと、検索ワードの最初の1つでのサイト内検索結果をエントリの下に表示するようにしてみました。mojalogさんがやっていることを追いかけているだけで、なんの新しさもないわけですが、「mojalog.com以外のドメインでも動きます」サンプルとしてご覧ください。

続きを読む

skin presented by myhurt : BLOG | SKIN

FC2Ad

  
copyright © 2005 コマネタ帳(旧) some rights reserved. Powered by FC2ブログ