依頼があったのでGoogleとYahoo!の検索結果に他の検索エンジンへのリンクを追加するユーザスクリプトをSleipnir以外にも対応させた

[追記 2012 Mar. 01st 23:25ごろ]
Googleの仕様が変更されて動かなくなったみたいなので、修正したものをこちらのエントリで公開しました。
現時点ではYahooの方はこちらのものでおkです。

[/追記]

以前の記事

1年位前にGoogleとYahoo!の検索結果に他の検索エンジンの結果へのリンクを追加するスクリプトってのを書いてるんですが、
それのChromeバージョンが出来ないかとの依頼がコメントされてたので、他のブラウザでも動くだろう感じに作り直してみました。

概要

以前のはiniファイルを用意して、さらにfaviconもローカルから読み込む仕様でした。
今回はそういうわけにもいかないので、各種検索エンジンの設定はスクリプトファイルに直接書き込むようにし、faviconもサイトのものに直リンさせるような感じになっています。

一応今回のものはSleipnir2.9.7(+IE9)、Chrome 12.0.742.30 beta-m、Firefox 3.6.17、Firefox 4.0.1にて動作を確認しています。


インストールの仕方
  • 当然、予めユーザスクリプトが使える状態にはしておいてください。
  • どのブラウザでも適当なファイル名(拡張子は".user.js")でお好きな場所に保存してください。

※ただし、保存時の文字コードに注意。Sleipnirは"Shift-JIS"、Chromeは"UTF-8"で保存しないといけないみたいです。*1

  • Sleipnirの場合はSeahorseフォルダに放り込んでください。起動中に放り込んだ場合はSeaHorseの再読み込みか、再起動を行ってください。
  • ChromeFirefoxの場合はブラウザのビュー部分にD&Dすると良いです。再起動などの必要はありません。
設定の仕方

スクリプトの先頭の方にある配列部分を書き換えたり、追記したりしてください。
新しく追加してみたTwitterを例にとると…

new Array(1, "Twitter", "http://twitter.com/favicon.ico", "http://search.twitter.com/search?q=\{searchTerms\}", true),
  • 最初の「1」という数字の部分は表示させる内容です。「0〜3」を入れてください。
0 表示しない
1 アイコンのみ表示
2 検索エンジン名だけ表示
3 両方表示
    • 下のスクリプトのやつはわざと違う番号を指定していますが、どう考えても数は揃えた方が使いやすくなるので、自分で書き換えてください。
  • 2番目の「"Twitter"」の部分はリンクで表示させる検索エンジン名です。
    • 1番目の値が2、3の場合に有効になります。
  • 3番目の「"http://twitter.com/favicon.ico"」は表示させるアイコンのパスです。
    • 1番目の値が1、3の場合に有効になります。
    • 大抵のサイトは「http://ドメイン名/favicon.ico」でおkだと思います。違う場合はHTMLのソースを見たりして自分で調べてね。
  • 4番目の「"http://search.twitter.com/search?q=\{searchTerms\}」は検索エンジンのリクエスト文です。
    • \{searchTerms\}のところに検索ワードが入ります。
    • 多分、GETメソッドな検索エンジンしか登録できないでしょう。
  • 5番目の「true」は検索ワードをエンコードするかどうかのフラグです。「true/false」を入れてください。
Googleの検索結果に追加するユーザスクリプト
  • Googleの検索結果は最近AJAXなものに変わっていますが、(技量不足もあり)一部の検索結果には対応できていません。
  • 具体的には、Googleトップページからの検索結果、検索結果から別のワードで検索した場合などです。
// ==UserScript==
// @name          Other Search Engine Link on Google+
// @namespace     http://d.hatena.ne.jp/barrackdo/
// @include       http://*google.co*/search?*q=*
// @include       http://www.google.com/webhp?*#*q=*
// @include       http://www.google.co.jp/*#*q=*
// @include       http://www.google.co.jp/hws/search?
// ==/UserScript==

(function() {

//document.addEventListener('DOMContentLoaded', function(){

	var array = new Array(
		new Array(1, "Twitter", "http://twitter.com/favicon.ico", "http://search.twitter.com/search?q=\{searchTerms\}", true),
		new Array(2, "Yahoo!J", "http://www.yahoo.co.jp/favicon.ico", "http://search.yahoo.co.jp/search?ei=UTF-8&fr=yjdnqp&p=\{searchTerms\}", true),
		new Array(3, "bing", "http://www.bing.com/favicon.ico", "http://www.bing.com/search?q=\{searchTerms\}&go=&form=QBLH&qs=n&sk=", true),
		new Array(1, "Wikipedia", "http://ja.wikipedia.org/favicon.ico", "http://ja.wikipedia.org/w/wiki.phtml?search=\{searchTerms\}", true),
		new Array(2, "amazon", "http://www.amazon.co.jp/favicon.ico", "http://www.amazon.co.jp/exec/obidos/external-search/250-0880593-9671458?mode=blended&tag=sleipnir0a-22&field-keywords=\{searchTerms\}", true),
		new Array(3, "YouTube", "http://www.youtube.com/favicon.ico", "http://www.youtube.com/results?search_query=\{searchTerms\}&search_sort=video_date_uploaded", true),
		new Array(1, "ニコ動", "http://www.nicovideo.jp/favicon.ico", "http://www.nicovideo.jp/search/\{searchTerms\}", true)
	);
	
	if(document.forms.namedItem("gs") || document.forms.namedItem("f")) {
		if(document.forms.namedItem("gs")) {
			var q = document.forms.namedItem("gs").elements.namedItem("q").value;
		}else if(document.forms.namedItem("f")) {
			var q = document.forms.namedItem("f").elements.namedItem("q").value;
		}
		if(location.pathname=="/hws/search") {
			var q_elem = document.getElementById("pnirRight");
		}else {
			if(document.getElementById("subform_ctrl")){
				var q_elem = document.getElementById("subform_ctrl");
			}else if(document.getElementById("resultState")){
				var q_elem = document.getElementById("resultState");
			}
		}
		
		var oselog = new Array(array.length);
		
		for(var i = 0; i < array.length; i++) {
			
			if(array[i][0] > 0) {
				oselog[i] = document.createElement("a");
				if(array[i][4]) {
					oselog[i].href = array[i][3].replace("\{searchTerms\}", encodeURIComponent(q));
				}else {
					oselog[i].href = array[i][3].replace("\{searchTerms\}", q);
				}
				var tmp_link = "";
				if(array[i][0] % 2 == 1) {
					tmp_link += "<img src=\"" + array[i][2] + "\" width=\"16\" height=\"16\" style=\"border:none;\">";
				}
				if(array[i][0] / 2 >= 1) {
					tmp_link += array[i][1];
				}
				oselog[i].innerHTML = tmp_link;
				oselog[i].target = "_blank";
				oselog[i].style.marginLeft = "0.5em";
				q_elem.appendChild(oselog[i]);
			}
		}
	}

//}, false);

})();
Yahoo!JAPANの検索結果に追加するユーザスクリプト
// ==UserScript==
// @name          Other Search Engine link on Yahoo+
// @namespace     http://d.hatena.ne.jp/barrackdo/
// @include       http://search.yahoo.co.jp/search?*p=*
// ==/UserScript==

(function() {

//document.addEventListener('DOMContentLoaded', function(){

	var array = new Array(
		new Array(1, "Twitter", "http://twitter.com/favicon.ico", "http://search.twitter.com/search?q=\{searchTerms\}", true),
		new Array(2, "Google", "http://www.google.com/favicon.ico", "http://www.google.com/search?aq=f&hl=ja&ie=UTF-8&q=\{searchTerms\}", true),
		new Array(3, "bing", "http://www.bing.com/favicon.ico", "http://www.bing.com/search?q=\{searchTerms\}&go=&form=QBLH&qs=n&sk=", true),
		new Array(1, "Wikipedia", "http://ja.wikipedia.org/favicon.ico", "http://ja.wikipedia.org/w/wiki.phtml?search=\{searchTerms\}", true),
		new Array(2, "amazon", "http://www.amazon.co.jp/favicon.ico", "http://www.amazon.co.jp/exec/obidos/external-search/250-0880593-9671458?mode=blended&tag=sleipnir0a-22&field-keywords=\{searchTerms\}", true),
		new Array(3, "YouTube", "http://www.youtube.com/favicon.ico", "http://www.youtube.com/results?search_query=\{searchTerms\}&search_sort=video_date_uploaded", true),
		new Array(1, "ニコ動", "http://www.nicovideo.jp/favicon.ico", "http://www.nicovideo.jp/search/\{searchTerms\}", true)
	).reverse();
	
	if(document.forms.namedItem("sbn")) {
		var p = document.forms.namedItem("sbn").elements.namedItem("p").value;
		var p_elem = document.getElementById("Sf");
		
		var oseloy = new Array(array.length);
		
		for(var i = 0; i < array.length; i++) {
			
			if(array[i][0] > 0) {
				oseloy[i] = document.createElement("a");
				if(array[i][4]) {
					oseloy[i].href = array[i][3].replace("\{searchTerms\}", encodeURIComponent(p));
				}else {
					oseloy[i].href = array[i][3].replace("\{searchTerms\}", p);
				}
				var tmp_link = "";
				if(array[i][0] % 2 == 1) {
					tmp_link += "<img src=\"" + array[i][2] + "\" width=\"16\" height=\"16\" style=\"border:none;\">";
				}
				if(array[i][0] / 2 >= 1) {
					tmp_link += array[i][1];
				}
				oseloy[i].innerHTML = tmp_link;
				oseloy[i].target = "_blank";
				oseloy[i].style.marginLeft = "0.5em";
				p_elem.insertBefore(oseloy[i], p_elem.firstChild);
			}
		}
	}

//}, false);

})();

依頼はウェルカム

うちのブログはコメント少ないんで、依頼とかされると喜んで頑張りますw
まぁ、技量が心もとないのがアレなんですけどw

ちなみにブコメは10日前くらいのエントリまでしか見てないです。
しかも、ツイートだけの日も含めて10日前までw

*1:Firefoxは"Shift-JIS"、"UTF-8"のどちらでもおkぽい