Skip to content

Instantly share code, notes, and snippets.

@oflow
Last active August 29, 2015 14:00

Revisions

  1. oflow revised this gist Feb 27, 2015. 1 changed file with 16 additions and 16 deletions.
    32 changes: 16 additions & 16 deletions 17sai.user.js
    Original file line number Diff line number Diff line change
    @@ -3,13 +3,13 @@
    // @name They are all 17 years old
    // @author HIRATA Yasuyuki <[email protected]>
    // @namespace http://yasu.asuka.net/
    // @version 1.1.0
    // @version 1.1.1
    // @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-06-02
    // @updated 2015-02-27
    // ==/UserScript==

    /*
    @@ -18,7 +18,6 @@
    * class名が変わるのでXPathで強引に取得してます。やっぱり重いです。
    * 17歳でなく17才が正しいようです。
    */

    (function(){


    @@ -59,7 +58,6 @@ function getElmXPath(elm, xpath) {
    var result = document.evaluate(xpath, elm, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
    return result.singleNodeValue;
    }

    function fixAge(elm, member, regexp, br) {
    if (!elm || !member) return;
    if (regexp) {
    @@ -82,28 +80,30 @@ function fix17sai() {
    var n = getElmXPath(mod[1], './div/*[contains(text(), "年齢")]');
    if (a && n) {
    if (/(.+)\s/.test(n.textContent)) {
    fixAge(a, members[RegExp.$1], /^([\d]+)\s/);
    var name = RegExp.$1.replace(/\s/g, '');
    fixAge(a, members[name], /^([\d]+)\s/);
    }
    }

    /* おまけで3人ほど年齢表示されるので対応させる */
    /* className.contains('ellip') */
    var ellip = mod[2].getElementsByClassName('ellip');
    for (var i = 0; i < ellip.length; i += 2) {
    fixAge(ellip[i + 1], members[ellip[i].textContent], /([\d]+)$/, true);
    fixAge(ellip[i + 1], members[ellip[i].textContent.replace(/\s/g, '')], /([\d]+)$/, true);
    }
    /* 右側のプロフィールも年齢間違えてる */
    var knoecrpt = document.getElementsByClassName('kno-ecr-pt')[0];
    if (knoecrpt) {
    fixAge(
    document.getElementsByClassName('kno-fv')[0],
    members[knoecrpt.textContent],
    members[knoecrpt.textContent.replace(/\s/g, '')],
    /\(([\d]+)\)/
    );
    }
    /* 上のサムネみたいに表示される箇所 */
    var kltat = document.getElementsByClassName('kltat');
    for (var i = 0, elm; elm = kltat[i]; i++) {
    if (member = members[elm.textContent]) {
    if (member = members[elm.textContent.replace(/\s/g, '')]) {
    fixAge(
    elm.parentNode.getElementsByClassName('klfact')[0],
    member
    @@ -132,22 +132,21 @@ function fix17sai() {
    }

    function get17days(member, br) {
    if (member.age == 19) {
    if (member['age'] == 19) {
    /* 今のところ榊原ゆいだけ */
    return '永遠のナインティーン';
    } else {
    var baseBirthday = new Date(
    member.age + member.y,
    member.m - 1,
    member.d
    member['age'] + member['y'],
    member['m'] - 1,
    member['d']
    );
    var sai = (member.age == 17 ? '才' : '歳');
    var sai = (member['age'] == 17 ? '才' : '歳');
    var days = Math.floor((Date.now() - baseBirthday) / (60*60*24*1000));
    return member.age + sai + 'と' + (br ? '<br>' : '') + days + '日';
    return member['age'] + sai + 'と' + (br ? '<br>' : '') + days + '日';
    }
    }


    fix17sai();
    var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
    @@ -157,4 +156,5 @@ var observer = new MutationObserver(function(mutations) {
    });
    });
    observer.observe(document.body, {childList: true});
    })();

    })();
  2. oflow revised this gist Jun 2, 2014. 1 changed file with 3 additions and 2 deletions.
    5 changes: 3 additions & 2 deletions 17sai.user.js
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@
    // @include https://www.google.tld/webhp?*
    // @include https://www.google.tld/#q=*
    // @released 2013-04-23
    // @updated 2014-05-28
    // @updated 2014-06-02
    // ==/UserScript==

    /*
    @@ -48,7 +48,6 @@ var members = {
    // '今井麻美': {age: 23, y: 1977, m: 5, d: 16}, 23歳教 元患部
    '後藤邑子': {age: 29, y: 1975, m: 8, d: 28}
    };

    /* 正規表現で調べるやつ */
    var regExpStr = '';
    for (name in members) {
    @@ -72,10 +71,12 @@ function fixAge(elm, member, regexp, br) {
    elm.textContent = get17days(member);
    }
    }

    function fix17sai() {
    var mod = document.querySelectorAll('li.mod');
    /* ○○○ 年齢 と検索したとき上に出てくるやつ */
    // ○歳 (YYYY年MM月DD日) となってないと失敗
    if (!mod.length) return;
    var a = getElmXPath(mod[1], './div/*[contains(text(), "歳")]');
    // 名前、年齢
    var n = getElmXPath(mod[1], './div/*[contains(text(), "年齢")]');
  3. oflow revised this gist May 28, 2014. 1 changed file with 67 additions and 72 deletions.
    139 changes: 67 additions & 72 deletions 17sai.user.js
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@
    // @include https://www.google.tld/webhp?*
    // @include https://www.google.tld/#q=*
    // @released 2013-04-23
    // @updated 2014-05-26
    // @updated 2014-05-28
    // ==/UserScript==

    /*
    @@ -29,24 +29,24 @@
    /* 「17歳教」ではなく「17才教」が正しい - 井上喜久子 オフィシャルサイト http://www.manbow.com/profile */

    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]
    /* 名前: {age: 年齢, y: 年, m: 月, d: 日} */
    '井上喜久子': {age: 17, y: 1964, m: 9, d: 25},
    '田村ゆかり': {age: 17, y: 1976, m: 2, d: 27},
    '野川さくら': {age: 17, y: 1978, m: 3, d: 1},
    '佐藤利奈': {age: 17, y: 1981, m: 5, d: 2},
    '堀江由衣': {age: 17, y: 1976, m: 9, d: 20},
    '石田燿子': {age: 17, y: 1973, m: 10, d: 7},
    '松澤由美': {age: 17, y: 1974, m: 3, d: 29},
    'こやまきみこ': {age: 17, y: 1979, m: 1, d: 27},
    '池澤春菜': {age: 17, y: 1975, m: 12, d: 15},
    '石黒千尋': {age: 17, y: 1983, m: 1, d: 24},
    '田中敦子': {age: 17, y: 1962, m: 11, d: 14},
    // '水落幸子': {age: 17, y: null, m: 12, d: 18}, わからんかった
    '寺田はるひ': {age: 17, y: 1973, m: 2, d: 11},
    '榊原ゆい': {age: 19, y: 1980, m: 10, d: 13},
    'たかはし智秋': {age: 23, y: 1977, m: 5, d: 8},
    // '今井麻美': {age: 23, y: 1977, m: 5, d: 16}, 23歳教 元患部
    '後藤邑子': {age: 29, y: 1975, m: 8, d: 28}
    };

    /* 正規表現で調べるやつ */
    @@ -56,18 +56,22 @@ for (name in members) {
    }
    var regExpName = new RegExp('(' + regExpStr.substring(1) + ')');

    function getElmsXPath(elm, xpath) {
    var nodes = document.evaluate(xpath, elm, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0, elm = [], length = nodes.snapshotLength; i < length; i++) {
    elm.push(nodes.snapshotItem(i));
    }
    return elm;
    }
    function getElmXPath(elm, xpath) {
    var result = document.evaluate(xpath, elm, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
    return result.singleNodeValue;
    }

    function fixAge(elm, member, regexp, br) {
    if (!elm || !member) return;
    if (regexp) {
    if (regexp.test(elm.textContent)) {
    var age = RegExp.$1;
    elm.innerHTML = elm.innerHTML.replace(new RegExp(age, 'g'), get17days(member, br));
    }
    } else {
    elm.textContent = get17days(member);
    }
    }
    function fix17sai() {
    var mod = document.querySelectorAll('li.mod');
    /* ○○○ 年齢 と検索したとき上に出てくるやつ */
    @@ -77,76 +81,68 @@ function fix17sai() {
    var n = getElmXPath(mod[1], './div/*[contains(text(), "年齢")]');
    if (a && n) {
    if (/(.+)\s/.test(n.textContent)) {
    var age = members[RegExp.$1];
    }
    if (age && /^([\d]+)\s/.test(a.textContent)) {
    a.textContent = a.textContent.replace(RegExp.$1, get17days(age, false));
    fixAge(a, members[RegExp.$1], /^([\d]+)\s/);
    }
    }
    /* おまけで3人ほど年齢表示されるので対応させる */
    /* className.contains('ellip') */
    var ellip = mod[2].getElementsByClassName('ellip');
    for (var i = 0; i < ellip.length; i += 2) {
    var age = members[ellip[i].textContent];
    if (age && /([\d]+)$/.test(ellip[i + 1].textContent)) {
    ellip[i + 1].innerHTML = get17days(age, true);
    }
    fixAge(ellip[i + 1], members[ellip[i].textContent], /([\d]+)$/, 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));
    }
    }
    fixAge(
    document.getElementsByClassName('kno-fv')[0],
    members[knoecrpt.textContent],
    /\(([\d]+)\)/
    );
    }
    /* サムネみたいに表示される箇所 */
    /* 上のサムネみたいに表示される箇所 */
    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);
    for (var i = 0, elm; elm = kltat[i]; i++) {
    if (member = members[elm.textContent]) {
    fixAge(
    elm.parentNode.getElementsByClassName('klfact')[0],
    member
    );
    }
    }
    /* 検索結果 わりと適当 */
    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 r = document.getElementsByClassName('r');
    for (var i = 0, h3; h3 = r[i]; i++) {
    if (regExpName.test(h3.textContent) && h3.className.indexOf('17sai') == -1) {
    var member = members[RegExp.$1];
    if (member) {
    /* 説明文に年齢 */
    var st = h3[i].parentNode.getElementsByClassName('st')[0];
    if (/[\(]([\d]+)[\)]/.test(st.textContent)) {
    st.innerHTML = st.innerHTML.replace(RegExp.$1, get17days(age, false));
    }
    fixAge(
    h3.parentNode.getElementsByClassName('st')[0],
    member,
    /[\(]([\d]+)[\)]/
    );

    /* タイトルに年齢 */
    if (/([\d]+)/.test(h3[i].textContent)) {
    h3[i].innerHTML = h3[i].innerHTML.replace(RegExp.$1, get17days(age, false));
    }
    h3[i].className += ' 17sai';
    fixAge(h3, member, /([\d]+)/);
    h3.className += ' 17sai';
    }
    }
    }
    }

    function get17days(age, br) {
    var baseBirthday = new Date(
    Number(age[1]) + age[0],
    Number(age[2]) - 1,
    Number(age[3])
    );
    var sai = (age[0] == 17 ? '才' : '歳');
    var today = Date.now();
    if (age[0] == 19) {
    function get17days(member, br) {
    if (member.age == 19) {
    /* 今のところ榊原ゆいだけ */
    return '永遠のナインティーン';
    } else {
    var days = Math.floor((today - baseBirthday)/(60*60*24*1000));
    return age[0] + sai + 'と' + (br ? '<br>' : '') + days + '日';
    var baseBirthday = new Date(
    member.age + member.y,
    member.m - 1,
    member.d
    );
    var sai = (member.age == 17 ? '才' : '歳');
    var days = Math.floor((Date.now() - baseBirthday) / (60*60*24*1000));
    return member.age + sai + 'と' + (br ? '<br>' : '') + days + '日';
    }
    }

    @@ -160,5 +156,4 @@ var observer = new MutationObserver(function(mutations) {
    });
    });
    observer.observe(document.body, {childList: true});

    })();
  4. oflow revised this gist May 26, 2014. 1 changed file with 5 additions and 2 deletions.
    7 changes: 5 additions & 2 deletions 17sai.user.js
    Original file line number Diff line number Diff line change
    @@ -15,7 +15,8 @@
    /*
    * 17sai.user.js は https://gist.github.com/hirataya/5442881 を元にあれこれ修正してます。
    * なんかもう適当に追加していったらこうなったのでGoogleの仕様変わったら死にます。
    * class名が変わるのでXPathで強引に取得するのでやっぱり重いです。
    * class名が変わるのでXPathで強引に取得してます。やっぱり重いです。
    * 17歳でなく17才が正しいようです。
    */

    (function(){
    @@ -25,6 +26,7 @@
    /* 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 */
    /* 「17歳教」ではなく「17才教」が正しい - 井上喜久子 オフィシャルサイト http://www.manbow.com/profile */

    var members = {
    /* 名前: [年齢, 年, 月, 日] */
    @@ -137,13 +139,14 @@ function get17days(age, br) {
    Number(age[2]) - 1,
    Number(age[3])
    );
    var sai = (age[0] == 17 ? '才' : '歳');
    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 + '日';
    return age[0] + sai + 'と' + (br ? '<br>' : '') + days + '日';
    }
    }

  5. oflow revised this gist May 26, 2014. 1 changed file with 32 additions and 16 deletions.
    48 changes: 32 additions & 16 deletions 17sai.user.js
    Original file line number Diff line number Diff line change
    @@ -9,12 +9,13 @@
    // @include https://www.google.tld/webhp?*
    // @include https://www.google.tld/#q=*
    // @released 2013-04-23
    // @updated 2014-05-21
    // @updated 2014-05-26
    // ==/UserScript==

    /*
    * 17sai.user.js は https://gist.github.com/hirataya/5442881 を元にあれこれ修正してます。
    * なんかもう適当に追加していったらこうなったのでGoogleの仕様変わったら死にます
    * なんかもう適当に追加していったらこうなったのでGoogleの仕様変わったら死にます。
    * class名が変わるのでXPathで強引に取得するのでやっぱり重いです。
    */

    (function(){
    @@ -53,25 +54,40 @@ for (name in members) {
    }
    var regExpName = new RegExp('(' + regExpStr.substring(1) + ')');

    function getElmsXPath(elm, xpath) {
    var nodes = document.evaluate(xpath, elm, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0, elm = [], length = nodes.snapshotLength; i < length; i++) {
    elm.push(nodes.snapshotItem(i));
    }
    return elm;
    }
    function getElmXPath(elm, xpath) {
    var result = document.evaluate(xpath, elm, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
    return result.singleNodeValue;
    }

    function fix17sai() {
    /* ○○○ 年齢 と検索したときに出てくるやつ */
    var vk_ans = document.getElementsByClassName('_iq')[0];
    var vk_gy = document.getElementsByClassName('_TK')[0];
    if (vk_ans && vk_gy) {
    if (/(.+)\s/.test(vk_gy.textContent)) {
    var mod = document.querySelectorAll('li.mod');
    /* ○○○ 年齢 と検索したとき上に出てくるやつ */
    // ○歳 (YYYY年MM月DD日) となってないと失敗
    var a = getElmXPath(mod[1], './div/*[contains(text(), "歳")]');
    // 名前、年齢
    var n = getElmXPath(mod[1], './div/*[contains(text(), "年齢")]');
    if (a && n) {
    if (/(.+)\s/.test(n.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));
    if (age && /^([\d]+)\s/.test(a.textContent)) {
    a.textContent = a.textContent.replace(RegExp.$1, get17days(age, false));
    }
    }
    /* おまけで3人ほど年齢表示されるので対応させる */
    var knofbctx = document.getElementsByClassName('_Tg');
    for (var i = 0; i < knofbctx.length; i++) {
    var ellip = knofbctx[i].getElementsByClassName('ellip');
    var age = members[ellip[0].textContent];
    if (age && /([\d]+)$/.test(ellip[1].textContent)) {
    ellip[1].innerHTML = get17days(age, true);
    /* className.contains('ellip') */
    var ellip = mod[2].getElementsByClassName('ellip');
    for (var i = 0; i < ellip.length; i += 2) {
    var age = members[ellip[i].textContent];
    if (age && /([\d]+)$/.test(ellip[i + 1].textContent)) {
    ellip[i + 1].innerHTML = get17days(age, true);
    }
    }
    /* 右側のプロフィールも年齢間違えてる */
    @@ -142,4 +158,4 @@ var observer = new MutationObserver(function(mutations) {
    });
    observer.observe(document.body, {childList: true});

    })();
    })();
  6. oflow revised this gist May 21, 2014. 1 changed file with 10 additions and 11 deletions.
    21 changes: 10 additions & 11 deletions 17sai.user.js
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@
    // @include https://www.google.tld/webhp?*
    // @include https://www.google.tld/#q=*
    // @released 2013-04-23
    // @updated 2014-04-28
    // @updated 2014-05-21
    // ==/UserScript==

    /*
    @@ -55,8 +55,8 @@ 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];
    var vk_ans = document.getElementsByClassName('_iq')[0];
    var vk_gy = document.getElementsByClassName('_TK')[0];
    if (vk_ans && vk_gy) {
    if (/(.+)\s/.test(vk_gy.textContent)) {
    var age = members[RegExp.$1];
    @@ -66,13 +66,12 @@ function fix17sai() {
    }
    }
    /* おまけで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 knofbctx = document.getElementsByClassName('_Tg');
    for (var i = 0; i < knofbctx.length; i++) {
    var ellip = knofbctx[i].getElementsByClassName('ellip');
    var age = members[ellip[0].textContent];
    if (age && /([\d]+)$/.test(ellip[1].textContent)) {
    ellip[1].innerHTML = get17days(age, true);
    }
    }
    /* 右側のプロフィールも年齢間違えてる */
    @@ -143,4 +142,4 @@ var observer = new MutationObserver(function(mutations) {
    });
    observer.observe(document.body, {childList: true});

    })();
    })();
  7. oflow revised this gist Apr 28, 2014. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions 17sai.user.js
    Original file line number Diff line number Diff line change
    @@ -123,8 +123,7 @@ function get17days(age, br) {
    Number(age[3])
    );
    var today = Date.now();
    var a = age[0];
    if (a == 19) {
    if (age[0] == 19) {
    /* 今のところ榊原ゆいだけ */
    return '永遠のナインティーン';
    } else {
  8. oflow revised this gist Apr 28, 2014. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions 17sai.user.js
    Original file line number Diff line number Diff line change
    @@ -6,12 +6,15 @@
    // @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(){
  9. oflow created this gist Apr 28, 2014.
    144 changes: 144 additions & 0 deletions 17sai.user.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,144 @@
    // -*- 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?*
    // @released 2013-04-23
    // @updated 2014-04-28
    // ==/UserScript==

    /*
    * 17sai.user.js は https://gist.github.com/hirataya/5442881 を元にあれこれ修正してます。
    */

    (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();
    var a = age[0];
    if (a == 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});

    })();