Last active
August 29, 2015 14:00
-
-
Save oflow/11361985 to your computer and use it in GitHub Desktop.
17sai.user.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// -*- coding: utf-8 -*- | |
// ==UserScript== | |
// @name They are all 17 years old | |
// @author HIRATA Yasuyuki <[email protected]> | |
// @namespace http://yasu.asuka.net/ | |
// @version 1.1.0 | |
// @include http://www.google.tld/search?* | |
// @include https://www.google.tld/search?* | |
// @include https://www.google.tld/webhp?* | |
// @include https://www.google.tld/#q=* | |
// @released 2013-04-23 | |
// @updated 2014-04-28 | |
// ==/UserScript== | |
/* | |
* 17sai.user.js は https://gist.github.com/hirataya/5442881 を元にあれこれ修正してます。 | |
* なんかもう適当に追加していったらこうなったのでGoogleの仕様変わったら死にます | |
*/ | |
(function(){ | |
/* 17歳教 - ニコニコ大百科 - http://dic.nicovideo.jp/a/17%E6%AD%B3%E6%95%99 */ | |
/* 17歳教☆チームT - Togetter - http://togetter.com/li/360631 */ | |
/* 23歳教 - ニコニコ大百科 - http://dic.nicovideo.jp/a/23%E6%AD%B3%E6%95%99 */ | |
/* 田中敦子17歳 - Twitter - https://twitter.com/atuwosyousa/status/220026704066904064 */ | |
var members = { | |
/* 名前: [年齢, 年, 月, 日] */ | |
'井上喜久子': [17, 1964, 9, 25], | |
'田村ゆかり': [17, 1976, 2, 27], | |
'野川さくら': [17, 1978, 3, 1], | |
'佐藤利奈': [17, 1981, 5, 2], | |
'堀江由衣': [17, 1976, 9, 20], | |
'石田燿子': [17, 1973, 10, 7], | |
'松澤由美': [17, 1974, 3, 29], | |
'こやまきみこ': [17, 1979, 1, 27], | |
'池澤春菜': [17, 1975, 12, 15], | |
'石黒千尋': [17, 1983, 1, 24], | |
'田中敦子': [17, 1962, 11, 14], | |
// '水落幸子': [17, null, 12, 18], わからんかった | |
'寺田はるひ': [17, 1973, 2, 11], | |
'榊原ゆい': [19, 1980, 10, 13], | |
'たかはし智秋': [23, 1977, 5, 8], | |
// '今井麻美': [23, 1977, 5, 16], | |
'後藤邑子': [29, 1975, 8, 28] | |
}; | |
/* 正規表現で調べるやつ */ | |
var regExpStr = ''; | |
for (name in members) { | |
regExpStr += '|' + name; | |
} | |
var regExpName = new RegExp('(' + regExpStr.substring(1) + ')'); | |
function fix17sai() { | |
/* ○○○ 年齢 と検索したときに出てくるやつ */ | |
var vk_ans = document.getElementsByClassName('vk_ans')[0]; | |
var vk_gy = document.getElementsByClassName('vk_gy')[0]; | |
if (vk_ans && vk_gy) { | |
if (/(.+)、\s年齢/.test(vk_gy.textContent)) { | |
var age = members[RegExp.$1]; | |
} | |
if (age && /^([\d]+歳)\s/.test(vk_ans.textContent)) { | |
vk_ans.textContent = vk_ans.textContent.replace(RegExp.$1, get17days(age, false)); | |
} | |
} | |
/* おまけで3人ほど年齢表示されるので対応させる */ | |
var kz = document.getElementsByClassName('_kz'); | |
for (var i = 0; i < kz.length; i++) { | |
var fl = kz[i].getElementsByClassName('fl')[0]; | |
var ut = kz[i].getElementsByClassName('_Ut')[0]; | |
var age = members[fl.textContent]; | |
if (age && /([\d]+歳)$/.test(ut.textContent)) { | |
ut.innerHTML = get17days(age, true); | |
} | |
} | |
/* 右側のプロフィールも年齢間違えてる */ | |
var knoecrpt = document.getElementsByClassName('kno-ecr-pt')[0]; | |
if (knoecrpt) { | |
var age = members[knoecrpt.textContent]; | |
if (age) { | |
var knofv = document.getElementsByClassName('kno-fv')[0]; | |
if (/\(([\d]+歳)\)/.test(knofv.textContent)) { | |
knofv.textContent = knofv.textContent.replace(RegExp.$1, get17days(age, false)); | |
} | |
} | |
} | |
/* サムネみたいに表示される箇所 */ | |
var kltat = document.getElementsByClassName('kltat'); | |
for (var i = 0; i < kltat.length; i++) { | |
var age = members[kltat[i].textContent]; | |
if (age) { | |
var klfact = kltat[i].parentNode.getElementsByClassName('klfact')[0]; | |
klfact.innerHTML = get17days(age, false); | |
} | |
} | |
/* 検索結果 わりと適当 */ | |
var h3 = document.getElementsByClassName('r'); | |
for (var i = 0; i < h3.length; i++) { | |
if (regExpName.test(h3[i].textContent) && h3[i].className.indexOf('17sai') == -1) { | |
var age = members[RegExp.$1]; | |
if (age) { | |
/* 説明文に年齢 */ | |
var st = h3[i].parentNode.getElementsByClassName('st')[0]; | |
if (/[\((]([\d]+歳)[\))]/.test(st.textContent)) { | |
st.innerHTML = st.innerHTML.replace(RegExp.$1, get17days(age, false)); | |
} | |
/* タイトルに年齢 */ | |
if (/([\d]+歳)/.test(h3[i].textContent)) { | |
h3[i].innerHTML = h3[i].innerHTML.replace(RegExp.$1, get17days(age, false)); | |
} | |
h3[i].className += ' 17sai'; | |
} | |
} | |
} | |
} | |
function get17days(age, br) { | |
var baseBirthday = new Date( | |
Number(age[1]) + age[0], | |
Number(age[2]) - 1, | |
Number(age[3]) | |
); | |
var today = Date.now(); | |
if (age[0] == 19) { | |
/* 今のところ榊原ゆいだけ */ | |
return '永遠のナインティーン'; | |
} else { | |
var days = Math.floor((today - baseBirthday)/(60*60*24*1000)); | |
return age[0] + '歳と' + (br ? '<br>' : '') + days + '日'; | |
} | |
} | |
fix17sai(); | |
var observer = new MutationObserver(function(mutations) { | |
mutations.forEach(function(mutation) { | |
if (mutation.type == 'childList') { | |
fix17sai(); | |
} | |
}); | |
}); | |
observer.observe(document.body, {childList: true}); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment