Hatena::Groupgeneration1991

gigi-net@G91

2009-06-13

[]mixiニュースに提供元の記事へ飛ぶリンクを追加するGreasemonkeyスクリプト書いてみた 17:04

これは何?

http://gyazo.com/3f5dbee5f3926a28e801f58840bd4c41.png

mixiニュースから記事提供元の元記事に飛ぶリンクを追加します。

mixiニュースで面白い記事を見つけても、ブックマークするのにいちいち元記事を探すのが不便だったので作ってみた。

むしろ公式で付いていないのがおかしいよなあ・・・。


インストール

userscript.orgからどうぞ!

Redirect mixi News Source for Greasemonkey


Greasemonkey以外のユーザースクリプト導入手段でも動作すると思われますが、未確認です。

フィードバックお待ちしております。


技術的なお話

mixiニュースの記事の中から、見出しと、提供元サイトのURLを取得して、クエリーを作成し、GoogleのI'm feeling Luckyに投げているだけです。

なので、発想だけで技術的に難しいことは特にしておりません。


既知の問題点

Googleを使うという仕様故

・更新されて間もない記事の場合、まだGoogleにクロールされていない可能性があって、表示されない

・同じ提供元が、他のポータルサイトにも同一記事を配信しているとそこがヒットしてしまう(主にYahoo!ニュースとか)

・そもそもヒットしない


などといった問題が起こる場合がありますが、大抵は大丈夫なはずです。

クエリーを

<見出し> site:提供元サイトのドメイン

といった感じで飛ばしているのですが、提供元によってはドメインを付けないとヒットしない場合と、むしろ付けるとヒットしなくなる場合が混在している模様。

最初は付けて検索して、仮にヒットしなかった場合は外して検索し直すといった仕様も考えたのですが、導入が面倒なので見送りました。

気が向いたら付けるかも。


アイコン素材など

こちらの素材を使わせていただきました。感謝。

pinvoke - Icons and pixel fonts


ソースコード

// ==UserScript==
// @name           Redirect mixi News Source
// @namespace      http://gigi-net.net
// @include        http://news.mixi.jp/view_news.pl?*
// ==/UserScript==
(function(){

var baseurl = "http://www.google.co.jp/search?hl=ja&btnI=&q=";
//Xpath取得関数
function GetXpath(query) {
    var results = document.evaluate(query, document, null, 7, null);
    var nodes = new Array();
    for(var i=0; i<results.snapshotLength; i++){
        nodes.push(results.snapshotItem(i));
    }
    return nodes;
}
//記事タイトルを取得
var title=document.getElementsByTagName("h2")[1].textContent;
//元記事の提供もとドメインを取得

var domain;
var p =document.getElementsByTagName("p");
for(var i=0;i<p.length;i++){
	if(p[i].getAttribute("class")=="mediaIcon"){
		var domain = p[i].getElementsByTagName("a")[0].getAttribute("href");
	}
}
domain =domain.replace(/http:\/\/www./,"http://*.");
domain =domain.replace(/http:\/\//,"");
domain =domain.replace(/\/$/,"");

//クエリーを作成
var query =title+" "+"site:"+domain;
var url=baseurl+encodeURIComponent(query);

//I'm feeling Lucky!
//元の記事を読むアイコンの表示
var diaryUtility = GetXpath("/html/body/div/div/div/div/ul");
var link=document.createElement("li");
var a=document.createElement("a");
a.href=url;
a.innerHTML="元のソースを表示";
link.appendChild(a);

with(link.style){
	backgroundImage="url(http://gigi-net.net/script/images/MixiAppManager/newspaper.png)";
	backgroundRepeat="no-repeat";
	paddingLeft="23px";
	marginLeft="8px";
	borderLeft="1px solid #ffcd8f";
}
diaryUtility[0].appendChild(link);
})();

ゲスト



トラックバック - http://generation1991.g.hatena.ne.jp/gigi-net/20090613