MediaLab Love Chapter 2

Assistance of MediaLab Love about Javascript test and more...

はてなブックマーク追加時にタグを自動挿入するユーザスクリプト

はてなブックマーク追加時におすすめタグがある場合、その中に自分の今までのタグに一致したタグがあったときに自動でそのタグを挿入します。

Hatena Bookmark Auto Tag Insert for Greasemonkey

ただし、「これはひどい」等のタグもおすすめタグにある場合には自動挿入されるので、注意してください。

// ==UserScript==
// @name           Hatena Bookmark Auto Tag Insert
// @namespace      http://d.hatena.ne.jp/Koumei_S/
// @description    Inserts tags automatically when you use Hatena Bookmark
// @include        http://b.hatena.ne.jp/*
// ==/UserScript==

(function(){

  //自動挿入するタグ
  var insert_tags = [];

  //設定しているタグの取得
  var your_tags = document.evaluate("id('all-tags')/span[@class='tag']", document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

  //推薦タグの取得
  var recommended_tags = document.evaluate("id('recommend-tags')/span[@class='tag']", document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

  //コメント欄取得
  var comment = document.evaluate("id('comment')", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

  //ブックマークされている場合は何もしない
  var bookmarked = document.evaluate("//p[@class='bookmarked-confirm']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

  if(bookmarked){
    exit;
  }

  //計算
  for (var i=0;i<recommended_tags.snapshotLength;i++){
    var recotag = recommended_tags.snapshotItem(i).innerHTML;
    for (var j=0;j<your_tags.snapshotLength;j++){
      var yourtag = your_tags.snapshotItem(j).innerHTML;
      if(recotag == yourtag){
        insert_tags.push(yourtag);
      }
    }
  }
  
  //コメント挿入
  if(comment && insert_tags[0]){
    comment.setAttribute('value', '[' + insert_tags.join('][') + ']');
  }
})();