SBMCommentsViewerのLivedoor ClipのJSONP対応パッチ作成

クリップ情報取得 API - livedoor クリップ まとめサイト - livedoor Wiki(ウィキ)に作成方法が載っているんで、早速パッチ作成してみた。

面倒なので全貼り付け
patch -c sbmcommentsviewer.user.js patch.fileでいけると思う。

*** sbmcommentsviewer.user.js	Sat Nov 24 05:12:54 2007
--- sbmcommentsviewer.20071125.user.js	Sun Nov 25 03:14:10 2007
***************
*** 77,82 ****
--- 77,83 ----
      // false : RSS
      var hatena_use_jsonp = true;
      var buzzurl_use_jsonp = true;
+     var livedoor_use_jsonp = true;
  
      // --------------------------------------------------------------
      // CSS
***************
*** 899,905 ****
                            tags = RegExp.$4.split(" ");
                        }
                        var date = RegExp.$3;
!                       var comment = RegExp.$1;
                        if(comment.match(/&lt;p class="description">([^<]+)&lt;\/p>/)){
                            comment = RegExp.$1.replace(/^\s+|\s+$/g, "");
                        }
--- 900,906 ----
                            tags = RegExp.$4.split(" ");
                        }
                        var date = RegExp.$3;
!                       var comment = RegExp.$1.replace(/&#x26;/g,'&');
                        if(comment.match(/&lt;p class="description">([^<]+)&lt;\/p>/)){
                            comment = RegExp.$1.replace(/^\s+|\s+$/g, "");
                        }
***************
*** 991,997 ****
  	var livedoor = "http://clip.livedoor.com/clips/";
  	var livedoor_favicon = "http://clip.livedoor.com/favicon.ico";
  	var livedoor_page = livedoor_url + uri;
! 	function ldLoad() {
  		GM_xmlhttpRequest({
  		  method: "GET",
  		  url: livedoor_url + uri ,
--- 992,998 ----
  	var livedoor = "http://clip.livedoor.com/clips/";
  	var livedoor_favicon = "http://clip.livedoor.com/favicon.ico";
  	var livedoor_page = livedoor_url + uri;
! 	function ldLoadHTML() {
  		GM_xmlhttpRequest({
  		  method: "GET",
  		  url: livedoor_url + uri ,
***************
*** 1091,1096 ****
--- 1092,1137 ----
  		}
  	}
      // --------------------------------------------------------------
+     // Livedoor Clip (josn)
+     // --------------------------------------------------------------
+ 	var ld_jsonp = 'http://api.clip.livedoor.com/json/comments';
+ 	function ldLoadJSONP(){
+ 		w.ldCallback = function(json){
+ 			var comments = [];
+ 			if(json && json.isSuccess){
+ 				comment_area.addCount(json.total_clip_count, livedoor_favicon, livedoor_page);
+ 				var count = (json.Comments.length < MAX_GET_COUNT)? json.Comments.length : MAX_GET_COUNT;
+ 				for (var i=0; i<count; i++){
+ 					var bm = json.Comments[i];
+ 					var user = bm.livedoor_id;
+ 					var href = livedoor + user;
+ 					var image = 'http://image.clip.livedoor.com/profile/?viewer_id=[%%20member.livedoor_id%20%]&target_id=' + user;
+ 					var tags = bm.tags;
+ 					var comment = bm.notes ? bm.notes.replace(/</g,'&lt;').replace(/>/g,'&gt;') : '';
+ 					var date = new Date(bm.created_on*1000);
+ 					var tag_base = livedoor + user + '/tag/';
+ 					comments.push(new Comment(user, image, href, tags, comment, date, tag_base, 'livedoor'));
+ 				}
+ 				comment_area.addComments('livedoor', comments);
+ 			} else {
+ 				comment_area.addCount(0, livedoor_favicon, livedoor_page);
+ 			}
+ 		}
+ 		var json = document.createElement('script');
+ 		json.src = ld_jsonp + '?link=' + encodeURIComponent(uri.replace(/%23/g,'#')) + '&callback=ldCallback&all=1';
+ 		json.type = 'text/javascript';
+ 		json.charset = 'utf-8';
+ 		comment_area.div.appendChild(json);
+ 	}
+ 	function ldLoad(){
+ 		if(livedoor_use_jsonp){
+ 			ldLoadJSONP();
+ 		} else {
+ 			ldLoadHTML();
+ 		}
+ 	}
+ 
+     // --------------------------------------------------------------
      // buzzurl (html)
      // --------------------------------------------------------------
      var buzzurl_rss  = 'http://buzzurl.jp/entry/comment/rss/';