素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

いろんなサイトをhAtomに対応させるGreasemonkey

// ==UserScript==
// @name           microformats
// @namespace      http://d.hatena.ne.jp/javascripter/ 
// @include        http://*
// ==/UserScript==

function getSITEINFO(){
	if(!GM_getValue('cache')){
		GM_xmlhttpRequest({
method:'GET',
url:'http://wedata.net/databases/AutoPagerize/items.json',
onload:function(res){GM_setValue('cache',res.responseText)}
});
}
return eval(GM_getValue('cache'));
}

function getMatchData(){
	var data=null;
	getSITEINFO().some(
			function(site){
			if(location.href.search(site.data.url)!=-1){
			data=site.data;
			return true;
			}
			});
	return data;
}

var data=getMatchData();

if(!data)return;

unsafeWindow.console.log(data.pageElement);

$x(data.pageElement).forEach(
		function(element){
		addClassName(element,'hentry');
		unsafeWindow.console.log(element)
		}
		);
		

$x(data.nextLink).forEach(
		function(element){
		addRelName(element,'next');
		}
		);



function addClassName(element,className){
	var list=element.className.split(' ');
	if(list.indexOf(className)==-1){
		list.push(className);
		element.className=list.join(' ');
	}
}
function addRelName(element,relName){
	var list=element.rel.toLowerCase().split(' ');
	if(list.indexOf(relName.toLowerCase())==-1){
		list.push(relName);
		element.rel=list.join(' ');
	}
}

function $x(xpath,context){
	var x=document.evaluate(xpath,context||document,null,7,null),r=new Array;
	for(var i=0;i<x.snapshotLength;i++)r.push(x.snapshotItem(i));
	return r;
}


このようなものを作ったのだけれども、非同期の処理がよく分からなくなったのでイマイチ。