// ==UserScript==
// @name Google検索結果に時期指定、再生時間指定、画像サイズ指定、日本語のみボタンを設置する
// @description 画面解像度が高い人向き ニコ動・ヤフオク・ヨドバシ検索結果にも並べ替えボタンを設置 (実験的:Google検索結果にGoogle NewsやTwitter検索へのRSSリンクを追加)
// @include *://www.google.tld/search?*
// @include *://www.nicovideo.jp/search/*
// @include *://www.nicovideo.jp/tag/*
// @include *://www.nicovideo.jp/mylist_search/*
// @include *://www.nicovideo.jp/mylist/*
// @include *://auctions.yahoo.co.jp/search/*
// @include *://auctions.yahoo.co.jp/category/list/*
// @match *://www.ebay.com/sch/*
// @match *://www.yodobashi.com/*
// @version 0.7.8
// @grant none
// @namespace https://greasyfork.org/users/181558
// @downloadURL none
// ==/UserScript==
(function() {
let p = eleget0('//button[@aria-label="Google 検索"]');
if (p) {
var e = document.createElement("div");
e.id = "gkbPanel";
e.style = "position:absolute;top:1.5em;left:860px; z-index:330;line-height:1.3em;";
document.body.appendChild(e);
}
addLink("google", "//div[@id='gkbPanel']", "none", "", "全て", "|", /&tbs=qdr:[hdwmy]/, "");
addLink("google", "//div[@id='gkbPanel']", "", "", "1時間以内", "|", /&tbs=qdr:[hdwmy]/, "&tbs=qdr:h");
addLink("google", "//div[@id='gkbPanel']", "", "", "24時間以内", "|", /&tbs=qdr:[hdwmy]/, "&tbs=qdr:d");
addLink("google", "//div[@id='gkbPanel']", "", "", "1週間以内", "|", /&tbs=qdr:[hdwmy]/, "&tbs=qdr:w");
addLink("google", "//div[@id='gkbPanel']", "", "", "1ヶ月以内", "|", /&tbs=qdr:[hdwmy]/, "&tbs=qdr:m");
addLink("google", "//div[@id='gkbPanel']", "", "", "1年以内", "
", /&tbs=qdr:[hdwmy]/, "&tbs=qdr:y");
addLink("google", "//div[@id='gkbPanel']", "&tbm=vid", "", "動画", "|", /&tbs=qdr:[hdwmy]/, "");
addLink("google", "//div[@id='gkbPanel']", "&tbm=vid", "", "4分未満", "|", /&tbs=dur:[sml]/, "&tbs=dur:s");
addLink("google", "//div[@id='gkbPanel']", "&tbm=vid", "", "4~20分", "|", /&tbs=dur:[sml]/, "&tbs=dur:m");
addLink("google", "//div[@id='gkbPanel']", "&tbm=vid", "", "20分以上", " ", /&tbs=dur:[sml]/, "&tbs=dur:l");
addLink2(/^https?:\/\/www\.google\..*\/search\?/, "//div[@id='gkbPanel']", "", "", "YouTube", "|", "", "https://www.youtube.com/results?search_query=***");
addLink2(/^https?:\/\/www\.google\..*\/search\?/, "//div[@id='gkbPanel']", "", "", "ニコ動", "", "", "https://www.nicovideo.jp/search/***?sort=f&order=d");
addLink("google", "//div[@id='gkbPanel']", "&tbm=isch", "", "画像", "|", /&tbs=isz:[iml]/, "");
addLink("google", "//div[@id='gkbPanel']", "&tbm=isch", "", "アイコンサイズ", "|", /&tbs=isz:[iml]/, "&tbs=isz:i");
addLink("google", "//div[@id='gkbPanel']", "&tbm=isch", "", "中", "|", /&tbs=isz:[iml]/, "&tbs=isz:m");
addLink("google", "//div[@id='gkbPanel']", "&tbm=isch", "", "大", " ", /&tbs=isz:[iml]/, "&tbs=isz:l");
addLink("google", "//div[@id='gkbPanel']", "", "", "日本語のみ", "|", /&lr=lang_ja/, "&lr=lang_ja");
addLink("google", "//div[@id='gkbPanel']", "", "", "英語のみ", " ", /&lr=lang_ja/, "&lr=lang_en");
var nicoPlace = '//div[@class="message"]|//div[@class="contentBody"]';
var nicodeleteOpt = /[\?&]f_range=.|[\?&]l_range=.|[\?&]opt_md=.*|[\?&]start=.*|[\?&]end=.*|[\?&]ref=[^&]*|[\?&]sort=.|[\?&]order=.|[\?&]page=\d*|[\?&]track=[^&]*/g;
addLink("nico", nicoPlace, "", "", "人気高", "|", nicodeleteOpt, "?sort=h&order=d");
addLink("nico", nicoPlace, "", "", "お勧め", " ", nicodeleteOpt, "?sort=p&order=d");
addLink("nico", nicoPlace, "", "", "投稿新", "|", nicodeleteOpt, "?sort=f&order=d");
addLink("nico", nicoPlace, "", "", "投稿古", " ", nicodeleteOpt, "?sort=f&order=a");
addLink("nico", nicoPlace, "", "", "コメ新", "|", nicodeleteOpt, "?sort=n&order=d");
addLink("nico", nicoPlace, "", "", "コメ古", " ", nicodeleteOpt, "?sort=n&order=a");
addLink("nico", nicoPlace, "", "", "コメ多", "|", nicodeleteOpt, "?sort=r&order=d");
addLink("nico", nicoPlace, "", "", "コメ少", " ", nicodeleteOpt, "?sort=r&order=a");
addLink("nico", nicoPlace, "", "", "再生多", "|", nicodeleteOpt, "?sort=v&order=d");
addLink("nico", nicoPlace, "", "", "再生少", " ", nicodeleteOpt, "?sort=v&order=a");
addLink("nico", nicoPlace, "", "", "マイリス多", "|", nicodeleteOpt, "?sort=m&order=d");
addLink("nico", nicoPlace, "", "", "マイリス少", " ", nicodeleteOpt, "?sort=m&order=a");
addLink("nico", nicoPlace, "", "", "時間長", "|", nicodeleteOpt, "?sort=l&order=d");
addLink("nico", nicoPlace, "", "", "時間短", " ", nicodeleteOpt, "?sort=l&order=a");
var nicodeleteOpt = /[\?&]f_range=.|[\?&]l_range=.|[\?&]opt_md=.*|[\?&]start=.*|[\?&]end=.*|[\?&]ref=[^&]*|[\?&\+]sort=.|[\?&]order=.|[\?&]page=\d*|[\?&]track=[^&]*/g;
addLink("nicovideo.jp/mylist_search/", '//table[@id="b_message"]/tbody/tr/td[2]', "", "
", "人気", " ", nicodeleteOpt, "?sort=p&order=d");
addLink("nicovideo.jp/mylist_search/", '//table[@id="b_message"]/tbody/tr/td[2]', "", "", "動画多", "|", nicodeleteOpt, "?sort=n&order=d");
addLink("nicovideo.jp/mylist_search/", '//table[@id="b_message"]/tbody/tr/td[2]', "", "", "動画少", " ", nicodeleteOpt, "?sort=n&order=a");
addLink("nicovideo.jp/mylist_search/", '//table[@id="b_message"]/tbody/tr/td[2]', "", "", "更新新", " ", nicodeleteOpt, "?sort=u&order=d");
addLink("nicovideo.jp/mylist_search/", '//table[@id="b_message"]/tbody/tr/td[2]', "", "", "適合高", " ", nicodeleteOpt, "?sort=r&order=d");
addLink("nicovideo.jp/mylist_search/", '//table[@id="b_message"]/tbody/tr/td[2]', "", "", "作成新", "|", nicodeleteOpt, "?sort=c&order=d");
addLink("nicovideo.jp/mylist_search/", '//table[@id="b_message"]/tbody/tr/td[2]', "", "", "作成古", " ", nicodeleteOpt, "?sort=c&order=a");
addLink("nicovideo.jp/mylist_search/", '//table[@id="b_message"]/tbody/tr/td[2]', "", "", "フォロー多", " ", nicodeleteOpt, "?sort=f&order=d");
setTimeout(() => {
var nicodeleteOpt = /[\?&]f_range=.|[\?&]l_range=.|[\?&]opt_md=.*|[\?&]start=.*|[\?&]end=.*|[\?&]ref=[^&]*|\#\+sort=\d*|[\?&]order=.|[\?&]page=\d*|[\?&]track=[^&]*/g;
var nicoPlace = '//div[@id="SYS_box_mylist_header"]/div/h1/..';
addLink("nicovideo.jp/mylist/", nicoPlace, "", "", "登録新", "|", nicodeleteOpt, "#+sort=1");
addLink("nicovideo.jp/mylist/", nicoPlace, "", "", "登録古", " ", nicodeleteOpt, "#+sort=0");
// addLink("nicovideo.jp/mylist/", nicoPlace, "", "", "タイトル↓", "|", nicodeleteOpt, "#+sort=4");
// addLink("nicovideo.jp/mylist/", nicoPlace, "", "", "タイトル↑", " ", nicodeleteOpt, "#+sort=5");
addLink("nicovideo.jp/mylist/", nicoPlace, "", "", "投稿新", "|", nicodeleteOpt, "#+sort=6");
addLink("nicovideo.jp/mylist/", nicoPlace, "", "", "投稿古", " ", nicodeleteOpt, "#+sort=7");
addLink("nicovideo.jp/mylist/", nicoPlace, "", "", "コメ新", " ", nicodeleteOpt, "#+sort=10");
addLink("nicovideo.jp/mylist/", nicoPlace, "", "", "コメ多", " ", nicodeleteOpt, "#+sort=12");
addLink("nicovideo.jp/mylist/", nicoPlace, "", "", "再生多", " ", nicodeleteOpt, "#+sort=8");
addLink("nicovideo.jp/mylist/", nicoPlace, "", "", "マイリス多", " ", nicodeleteOpt, "#+sort=14");
addLink("nicovideo.jp/mylist/", nicoPlace, "", "", "時間長", "|", nicodeleteOpt, "#+sort=16");
addLink("nicovideo.jp/mylist/", nicoPlace, "", "", "時間短", " ", nicodeleteOpt, "#+sort=17");
}, 100);
if (location.href.indexOf("auctions.yahoo.co.jp/") !== -1) {
var yadeleteOpt = /[\?&]s1=.*&o1=.*(?=&)|[\?&]s1=.*&o1=.*(?=$)/g;
var pta = '//a[@class="Info__closedLink"]|//div[@class="Option"]/..';
//var ele = eleget0(pta);
//if (ele) ele.style.textAlign = "right";
var ele = eleget0(pta);
if (ele) ele.style.display = "inline";
addLink("auctions.yahoo.co.jp/", pta, "", " ", "おすすめ", " ", yadeleteOpt, "[&?]s1=score2&o1=d");
addLink("auctions.yahoo.co.jp/", pta, "", "", "現価安", "|", yadeleteOpt, "[&?]s1=cbids&o1=a");
addLink("auctions.yahoo.co.jp/", pta, "", "", "現価高", " ", yadeleteOpt, "[&?]s1=cbids&o1=d");
addLink("auctions.yahoo.co.jp/", pta, "", "", "残時短", "|", yadeleteOpt, "[&?]s1=end&o1=a");
addLink("auctions.yahoo.co.jp/", pta, "", "", "残時長", " ", yadeleteOpt, "[&?]s1=end&o1=d");
addLink("auctions.yahoo.co.jp/", pta, "", "", "入札少", "|", yadeleteOpt, "[&?]s1=bids&o1=d");
addLink("auctions.yahoo.co.jp/", pta, "", "", "入札多", " ", yadeleteOpt, "[&?]s1=bids&o1=a");
addLink("auctions.yahoo.co.jp/", pta, "", "", "即決安", "|", yadeleteOpt, "[&?]s1=bidorbuy&o1=a");
addLink("auctions.yahoo.co.jp/", pta, "", "", "即決高", " ", yadeleteOpt, "[&?]s1=bidorbuy&o1=d");
addLink("auctions.yahoo.co.jp/", pta, "", "", "新しい", "", yadeleteOpt, "[&?]s1=new&o1=d");
}
if (location.href.match(/yodobashi\.com\/.*\?.*?=/)) {
addLink("yodobashi", '//div[@class="srcResultBoxNew"]/div/div', "", " ", "人気", " ", /&sorttyp=\w*/, "&sorttyp=COINCIDENCE_RANKING");
addLink("yodobashi", '//div[@class="srcResultBoxNew"]/div/div', "", "", "新着", " ", /&sorttyp=\w*/, "&sorttyp=NEW_ARRIVAL_RANKING");
addLink("yodobashi", '//div[@class="srcResultBoxNew"]/div/div', "", "", "安い", "|", /&sorttyp=\w*/, "&sorttyp=SELL_PRICE_ASC");
addLink("yodobashi", '//div[@class="srcResultBoxNew"]/div/div', "", "", "高い", " ", /&sorttyp=\w*/, "&sorttyp=SELL_PRICE_DESC");
addLink("yodobashi", '//div[@class="srcResultBoxNew"]/div/div', "", "", "新発売", " ", /&sorttyp=\w*/, "&sorttyp=RELEASE_DATE_DESC");
}
//addLink("","" , "", "", "", " ", , "?");
setTimeout(() => addAutoDiscovery(), 100);
// addAutoDiscovery();
return;
function addAutoDiscovery() { // Google検索結果に同じ検索ワードでGoogle NewsかTwitter検索へのRSSリンクとRSS Autodiscoveryを埋め込む
embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@#])/, "$1", "*** | Google ニュース", "https://news.google.com/news/rss/search/section/q/***?ned=jp&hl=ja&gl=JP")
embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@#])/, "$1", "*** | Google News (En)", "https://news.google.com/news/rss/search/section/q/***?ned=us&hl=en&gl=US")
embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@#])/, "$1", "*** | Reddit (En)", "https://www.reddit.com/search.rss?q=***&sort=new")
// embedAutoDiscovery('google',"//div[@id='gkbPanel']",'//input[@aria-label="検索"]|//input[@aria-label="Search"]', /(^@)/, "", "*** | TwitRSS Twitterユーザー", "https://twitrss.me/twitter_user_to_rss/?user=***")
// embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@])/, "$1", "*** | Queryfeed Twitterキーワード", "https://queryfeed.net/tw?q=***")
// embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@])/, "$1", "*** (filter:images OR filter:videos) | Queryfeed Twitterキーワード 画像か動画", "https://queryfeed.net/tw?q=***%20 (filter:images OR filter:videos)")
// embedAutoDiscovery('google',"//div[@id='gkbPanel']",'//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@])/, "$1", "*** (filter:videos) | Queryfeed Twitterキーワード 動画", "https://queryfeed.net/tw?q=***%20 (filter:videos)")
embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@])/, "$1", "*** | Nitter Twitterキーワード", "https://nitter.net/search/rss?f=tweets&q=***")
embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@])/, "$1", "*** | Nitter Twitterキーワード 画像か動画", "https://nitter.net/search/rss?f=tweets&q=***+(filter:images OR filter:videos)")
embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@])/, "$1", "*** | Nitter Twitterキーワード 日本語ツイートのみ", "https://nitter.net/search/rss?f=tweets&q=***+lang:ja")
embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@])/, "$1", "*** | Nitter Twitterキーワード 日本語ツイートのみ 画像か動画", "https://nitter.net/search/rss?f=tweets&q=***+lang:ja+(filter:images OR filter:videos)")
// embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /(^@)/, "from:@", "from:*** | Queryfeed Twitterユーザー名", "https://queryfeed.net/tw?q=***")
// embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /(^@)/, "from:@", "from:*** (filter:images OR filter:videos) | Queryfeed Twitterユーザー 画像か動画", "https://queryfeed.net/tw?q=***%20 (filter:images OR filter:videos)")
embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /(^@)/, "", "*** | Nitter Twitterユーザー名", "https://nitter.net/***/rss")
embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /(^@)/, "", "*** | Nitter Twitterユーザー 画像か動画", "https://nitter.net/***/media/rss")
// embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@])/, "$1", "*** | Queryfeed Instagram ユーザーネーム", "https://queryfeed.net/instagram?q=***");
// embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@])/, "\#$1", "#*** | Queryfeed Instagram ハッシュタグ", "https://queryfeed.net/instagram?q=***");
embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@])/, "$1", "*** | DeviantArt (En) キーワード", "https://backend.deviantart.com/rss.xml?q=***");
embedAutoDiscovery('google', "//div[@id='gkbPanel']", '//input[@aria-label="検索"]|//input[@aria-label="Search"]', /^([^@])/, "$1", "*** | CiNii 論文検索 キーワード", "https://ci.nii.ac.jp/opensearch/search?q=***&range=2&sortorder=1&start=1&count=20&format=rss");
embedAutoDiscovery('ebay', '//div[@id="gh-ac-box2"]/input/..', '//div[@id="gh-ac-box2"]/input', /^([^@])/, "$1", "*** | eBay キーワード", "https://www.ebay.com/sch/i.html?_nkw=***&_rss=1");
return;
}
function embedAutoDiscovery(site, place, wordXP, wordtermRE, replaceStr, itemName, url) {
if (location.href.indexOf(site) == -1) return
//else console.log(site)
var ele = eleget0(wordXP);
if (!ele || !(ele.value.match(wordtermRE))) return;
var word = ele.value;
if (itemName.match(/\(En\)|ユーザー名|ユーザーネーム|DeviantArt/) && !(word.match(/^[\x20-\x7e]*$/))) return; // google news en や、ユーザー検索なら半角英数以外を含んだらやらない
if (itemName.match("日本語ツイートのみ") && !(word.match(/^[\x20-\x7e]*$/))) return;
//console.log(ele, word)
var link = document.body.parentNode.insertBefore(document.createElement("link"), document.body);
link.title = itemName.replace("***", word);
link.rel = "alternate"
link.type = "application/rss+xml"
link.href = url.replace("***", encodeURIComponent(word.replace(wordtermRE, replaceStr)));
var place = eleget0(place);
// var place = eleget0("//div[text()='ニュース']|//a[text()='ニュース']");
if (!place) return;
var url = link.href;
var ele = place.appendChild(document.createElement('span'));
ele.setAttribute("style", "font-weight:normal;");
let rssICON = '
';
ele.innerHTML = " " + rssICON + "";
return;
}
function addLink(site, placexpath, terms, beforetitle, title, append, deleteoption, option) {
if (location.href.indexOf(site) == -1) return;
var place = eleget0(placexpath);
if (!place) return;
var url = window.location.href;
if (terms !== "") url = url.replace(/&tbm=.*/, "");
if (terms !== "none") url = url + terms;
url = url.replace(deleteoption, '');
option = option.replace("[&?]", (url.indexOf("?") == -1) ? "?" : "&");
url += option;
var ele = document.createElement('span');
ele.setAttribute("style", "font-weight:normal;");
ele.innerHTML = beforetitle + "" + title + "" + append;
place.appendChild(ele);
return;
}
function addLink2(site, placexpath, terms, beforetitle, title, append, deleteoption, option) {
if (site.test(location.href) === false) return;
var place = eleget0(placexpath);
if (!place) return;
var ele = place.appendChild(document.createElement('span'));
ele.innerHTML = beforetitle + "" + title + "" + append;
}
function eleget0(xpath) {
var ele = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
return ele.snapshotLength > 0 ? ele.snapshotItem(0) : "";
}
function xa(xpath, node = document) {
if (!xpath) return [];
if (xpath.match(/^\/\//)) {
try {
var array = [];
var ele = document.evaluate("." + xpath, node, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = 0; i < ele.snapshotLength; i++) array[i] = ele.snapshotItem(i);
return array;
} catch (e) { return []; }
} else {
return $(xpath);
}
}
})();