「いいね!した人一覧」のリストを自動で最後まで表示する 

色々なブログを見て歩くと、とんでもなく「いいね!」を沢山もらっている方もいます。 自分を基準にしていてはいけません xx); 「ペタ」が終了すると、この種の機能は完全に「いいね!」に集約され、そういう方の「いいね!」は更に増えるのかもしれません。

 

「いいね!した人一覧」が大変に多いリストを見ていると、「もっと見る」を何度も押すのがおっくうになります。 下は「スタッフブログ」で極端な例ですが、「いいね!」は数百件というのが普通です。

 

 

そこで、以前に作った自動でボタンを押す機能を、このダイアログにも実装する事を考えました。 まあ、余り必要の無い機能の様な気がしますが、案外と「あって良かった」と思うかもしれませんから。

 

 

 

コードは「いいね!履歴」のページ用を輸入 

「いいね!履歴」のページで、「Space」キーを押すと自動で「もっと見る」ボタンを押し続け、もういちど「Soace」キーを押すとストップする機能を作りました。 制作時は苦労したコードですが、「いいね!した人一覧」のダイアログでも問題なく動作します。 若干のコードの最適化をして、ブログページに組込みました。

 

この特別な操作が可能な事を示す必要があり、ダイアログの下に一行の操作説明を表示する様にしました。

 

 

「Space」キーを押すと、自動的にスクロールしながら、データの取り込みが始まりますが、見易い様にこの機能を使うとリストの高さを拡大する様にしました。

 

 

リストは、ウインドウの高さの「80%」になります。

 

この自動のデータ取り込みは、「Space」を押すと停止できます。 少しずつリストを見る事や、最後まで自動でデータを読み込ませる事もできます。 リストの最後まで読み込むと自動で停止し、下部の説明表示が消えます。

 

なお、ダイアログを閉じると、高さや表示されているリストがリセットされます。

 

今回追加した「連続スクロール」機能は、本来の迷惑「いいね!」のブロック機能とは別目的の機能ですが、兼用が可能です。

 

 

 

「Bad Iine Mute BlogPage」ver. 1.7 

「Bad Iine Mute BlogPage」ver. 1.7 は、このページの内容の更新した版です。

ver 1.5 からの更新ですが、「Bad Iine Mute」と統一した ver. 1.7 とします。

このツールの基本的な操作については、以下のページを参照ください。

 

 

 

 

ツールを導入するには 

「Bad Iine Mute BlogPage」は Chrome / 新Edge / Firefox の拡張機能の「Tampermonkey」上で動作するスクリプトツールです。

 

❶「Tampermonkey」を導入します

◎ 使用しているブラウザに拡張機能「Tampermonkey」を導入する事が必要です。

既に「Tampermonkey」を導入している場合は、この手順 ❶ は不要です。

拡張機能の導入については、以下のページに簡単な説明があるので参照ください。

 

 

❷「Tampermonkey」にスクリプトを登録します

◎「Tampermonkey」の「」マークの「新規スクリプト」タブを開きます。

 

 

 

◎「新規スクリプト」には、最初からテンプレートが記入されています。 これは全て削除して、完全に空白の編集枠に 下のコードをコピー&ペーストします。

 

〔コピー方法〕 軽量シンプルなツール「PreBox Button   」を使うと

  コード枠内を「Ctrl+左Click」➔「Copy code 」を「左Click」

  の操作で、掲載コードのコピーが可能になります。

 

◎ 最後に「ファイル」メニューの「保存」を押すと、ツールが使用可能になります。

 

 

 

〔 Bad Iine Mute BlogPage 〕 ver. 1.7c

〔追記〕2020.10.14

ブログページのクラス名変更に対応しました。 以下のコードは修復更新済みです。

 

// ==UserScript==
// @name         Bad Iine Mute BlogPage
// @namespace    http://tampermonkey.net/
// @version      1.7c
// @description  「ブログページ」の不良な「いいね!」を非表示にする
// @author       Ameba Blog User
// @match        https://ameblo.jp/*
// @noframes
// @run-at       document-body
// @grant        none
// ==/UserScript==


let iine_block_data={}; // 総合ブロックデータ
let iine_block_id=[];
let iine_block_img=[];
let block_filter_id;
let block_regex_id;
let block_filter_img;
let block_regex_img;
let edit_mode=0;


let ua=0;
let agent=window.navigator.userAgent.toLowerCase();
if(agent.indexOf('firefox') > -1){ ua=1; } // Firefoxの場合のフラッグ


let read_json=localStorage.getItem('iine_id_back'); // ローカルストレージ 保存名
iine_block_data=JSON.parse(read_json);
if(iine_block_data==null){
    iine_block_data=[['tmp1', 'img1'], ['tmp2', 'img2']]; }

reg_set();

function reg_set(){
    iine_block_id=[];
    iine_block_img=[];
    for(let k=0; k<iine_block_data.length; k++){
        iine_block_id[k]=iine_block_data[k][0];
        iine_block_img[k]=iine_block_data[k][1]; }
    block_filter_id=iine_block_id.join('|');
    block_regex_id=RegExp(block_filter_id);
    block_filter_img=iine_block_img.join('|');
    block_regex_img=RegExp(block_filter_img); }



let target0=document.querySelector('body'); // 監視 target
let monitor0=new MutationObserver(mode_select);
monitor0.observe(target0, {childList: true, subtree: true}); // 監視開始

mode_select();

function mode_select(){
    if(document.querySelector('#announcer')){ // ブログページ
        let iine_title=document.querySelector('#iineEntryHeader');
        if(iine_title){
            title_disp();
            smart();
            open_more(); // 設定数のリストを自動で開く
            end_more();

            iine_title.onclick=function(event){
                event.preventDefault();
                if(event.altKey==true){ // 「Altキー + 左クリック」
                    if(edit_mode==0){
                        edit_mode=1;
                        monitor0.disconnect();
                        file_backup();
                        monitor0.observe(target0, {childList: true}); } // ファイル保存 ブログページ
                    else{
                        edit_mode=0;
                        file_backup_end(); }}
                else{
                    if(edit_mode==0){
                        edit_mode=1; }
                    else{
                        edit_mode=0;
                        file_backup_end(); }}

                title_disp();
                blocker_dia(); }}

        if(!iine_title){ // いいねダイアログが非表示になった時
            edit_mode=0; }
    }} // mode_select()


function title_disp(){
    let iine_title=document.querySelector('#iineEntryHeader');
    let iine_span=document.querySelectorAll('#iineEntryHeader span');
    let iine_p=document.querySelector('#iineEntryHeader p');
    if(edit_mode==0){
        iine_title.style.boxShadow='none';
        iine_span[0].style.color='#333';
        iine_span[1].style.color='#999';
        iine_span[2].style.color='#fe9019';
        iine_p.style.color='#333'; }
    else{
        iine_title.style.boxShadow='inset 0 0 0 30px red';
        iine_span[0].style.color='#fff';
        iine_span[1].style.color='#fff';
        iine_span[2].style.color='#fff';
        iine_p.style.color='#fff'; }}


function open_more(){
    setTimeout(()=>{
        let more=document.querySelector('#moreLinkBottom'); // Moreがある場合は全て呼込む
        let item=document.querySelectorAll('#iineEntryContents li');
        if(more && item.length<18){ // リストを最低18行まで自動で開く 🔴
            more.click(); }}, 500); }


function end_more(){
    let senser=0;
    let next=0;
    let interval;
    let list_body;

    let style_text=
        'position: absolute; bottom: -50px; width: 100%; font: 14px Meiryo; '+
        'padding: 10px 0; height: 20px; text-align: center; border-radius: 6px; '+
        'background: #efefef; color: #000;';
    let insert_disp;
    let frame=document.querySelector('#iineEntryFrame');
    insert_disp=document.createElement('div');
    insert_disp.setAttribute('id', 'imute_disp');
    insert_disp.setAttribute('style', style_text);
    insert_disp.textContent='Space : 連続スクロール / 停止';
    let imute_d=frame.querySelector('#imute_disp');
    if(!imute_d){
        frame.appendChild(insert_disp); }

    document.addEventListener('keydown', function(event){
        event.stopImmediatePropagation();
        if(event.keyCode==32){
            list_body=document.querySelector('#iineEntryContents'); // scrall要素
            if(list_body){
                list_body.style.maxHeight='80vh'; }
            if(next==0){
                next=1;
                interval=setInterval(
                    function(){
                        go();
                        stop();
                        senser+=1;
                    }, 500); }
            else{
                next=0;
                clearInterval(interval); }
            setTimeout(()=>{
                list_body.scrollBy(0, 1000); }, 600); } // リスト末尾を表示

        function go(){
            let more=document.querySelector('#moreLinkBottom'); // Moreボタン
            if(more && next==1){
                more.click();
                senser=0; }}

        function stop(){
            if(senser>4){
                next=0;
                senser=0;
                clearInterval(interval);
                hide_disp(); }}

        function hide_disp(){
            let imute_d=document.querySelector('#imute_disp');
            if(imute_d){
                imute_d.style.display='none'; }
            list_body.scrollBy(0, 1000); }});

} //end_more()



function smart(){
    let headerT=document.querySelector('.iineListHeaderText');
    if(headerT){
        let styleT=document.createElement('style');
        styleT.textContent='.s.s-nice::before { content: ""; }';
        monitor0.disconnect();
        headerT.appendChild(styleT);
        monitor0.observe(target0, {childList: true});

        headerT.style.fontSize='0';
        let nice=headerT.querySelector('.s.s-nice');
        if(nice){
            nice.textContent='💛';
            nice.style.fontSize='16px';
            nice.style.verticalAlign='-1px';
            nice.style.paddingRight='6px'; }
        let title=headerT.querySelector('.iineListHeaderText .tx_bold');
        if(title){
            title.style.fontSize='14px'; }
        let count=headerT.querySelector('.iineListHeaderText .tx_grayA');
        if(count){
            count.style.fontSize='14px'; }}}



let target1=document.querySelector('body'); // 監視 target
let monitor1=new MutationObserver(blocker_dia);
monitor1.observe(target1, {childList: true, subtree: true}); // 監視開始

function blocker_dia(){
    let k;
    let user_li=[];
    let user_href=[];

    if(document.querySelector('#announcer')){ // ブログページ
        user_li=document.querySelectorAll('#iineEntryContents li');
        if(user_li.length !=0){
            for(k=0; k<user_li.length; k++){ // ダイアログのリストのマスク
                if(user_li[k].querySelector('a')){
                    user_href[k]=user_li[k].querySelector('a').getAttribute('href');
                    if(block_regex_id.test(user_href[k])==true){
                        if(edit_mode==0){
                            user_li[k].style.display='none';
                            user_li[k].style.boxShadow='none'; }
                        else{
                            user_li[k].style.display='list-item';
                            user_li[k].style.boxShadow='#fff 0 0 0 1px inset, red 0 0 0 3px inset'; }}
                    else{
                        user_li[k].style.display='list-item';
                        user_li[k].style.boxShadow='none'; }}}}

        get_src(); }

} // blocker_dia()



let target2=document.querySelector('body'); // 監視 target
let monitor2=new MutationObserver(checker);
monitor2.observe(target2, {childList: true, subtree: true, attributes: true}); // 監視開始

function checker(){
    let k;
    let user_li=[];
    let user_href=[];
    let user_id=[];
    let user_src=[];

    if(document.querySelector('#announcer')){ // ブログページ
        user_li=document.querySelectorAll('#iineEntryContents li');
        if(user_li.length !=0){
            for(k=0; k<user_li.length; k++){
                let n=k;
                let user_link=user_li[n].querySelector('a');
                if(user_link){
                    if(edit_mode==0){
                        user_link.style.pointerEvents='auto'; }
                    if(edit_mode==1){
                        user_link.style.pointerEvents='none';
                        user_href[n]=user_link.getAttribute('href');
                        user_src[n]=user_li[n].querySelector('img').getAttribute('src');

                        user_li[n].onclick=function(event){ // リストのクリックで設定
                            local_backup(n); }}}}

            function local_backup(n){
                if(edit_mode==1){
                    if(block_regex_id.test(user_href[n])!=true){
                        user_id[n]=user_href[n].replace(/\//g, '');
                        user_src[n]=
                            user_src[n].replace('https://stat.profile.ameba.jp/profile_images/', '');
                        user_src[n]=user_src[n].replace(/\?cpc=100/g, '');
                        iine_block_data.push([user_id[n], user_src[n]]);
                        let write_json=JSON.stringify(iine_block_data);
                        localStorage.setItem('iine_id_back', write_json); }

                    else if(block_regex_id.test(user_href[n])==true){
                        user_id[n]=user_href[n].replace(/\//g, '');
                        iine_block_data.splice(iine_block_id.indexOf(user_id[n]), 1);
                        let write_json=JSON.stringify(iine_block_data);
                        localStorage.setItem('iine_id_back', write_json); }

                    reg_set();
                    blocker_dia(); }}}}
} // checker()



function file_backup(){
    let style_text='position: absolute; top: -60px; width: 100%; font: 13px Meiryo; '+
        'height: 40px; border-radius: 6px; background: #e2eef0; color: #000;';
    let insert_dialog;
    let frame=document.querySelector('#iineEntryFrame');

    insert_dialog=document.createElement('div');
    insert_dialog.setAttribute('id', 'imute_dia');
    insert_dialog.setAttribute('style', style_text);
    let imute=frame.querySelector('#imute_dia');
    if(!imute){
        frame.appendChild(insert_dialog); }

    let button1=document.createElement('input');
    button1.setAttribute('type', 'submit');
    button1.setAttribute('value', '排除リストを保存する');
    button1.setAttribute(
        'style', 'padding: 2px 8px 0; margin: 7px 15px 0 20px; font: 13px Meiryo;');
    if(ua==1){
        button1.setAttribute(
            'style', 'padding: 1px 8px 0; margin: 7px 15px 0 20px; font: 13px Meiryo;'); }
    insert_dialog.appendChild(button1);

    button1.onclick=function(){
        let write_json=JSON.stringify(iine_block_data);
        let blob=new Blob([write_json], {type: 'application/json'});
        let a_elem=document.createElement('a');
        a_elem.href=URL.createObjectURL(blob);
        document.body.appendChild(a_elem);
        a_elem.download='iine_mute_bp.json'; // 保存ファイル名
        a_elem.click();
        document.body.removeChild(a_elem);
        URL.revokeObjectURL(a_elem.href); }

    let button_add=document.createElement('input');
    button_add.setAttribute('type', 'checkbox');
    button_add.setAttribute('style', 'margin: 0 5px 0 20px; vertical-align: -3px;');
    insert_dialog.appendChild(button_add);

    let button_add_label=document.createElement('span');
    button_add_label.setAttribute('style', 'background: #e2eef0; vertical-align: -1px;');
    button_add_label.innerText='差分追加';
    insert_dialog.appendChild(button_add_label);

    let button2=document.createElement('input');
    button2.setAttribute('type', 'file');
    button2.setAttribute(
        'style', 'margin: 0 0 0 10px; width: 260px; vertical-align: 1px; font: 13px Meiryo;');
    insert_dialog.appendChild(button2);

    button_add.checked=true;
    button2.addEventListener("change" , function(){
        if(!(button2.value)) return; // ファイルが選択されない場合
        let file_list=button2.files;
        if(!file_list) return; // ファイルリストが選択されない場合
        let file=file_list[0];
        if(!file) return; // ファイルが無い場合

        let file_reader=new FileReader();
        file_reader.readAsText(file);
        file_reader.onload=function(){
            if(file_reader.result.slice(0, 15)=='[["tmp1","img1"'){ // iine_mute.jsonの確認
                let data_in=JSON.parse(file_reader.result);
                if(button_add.checked==true){ // 差分追加処理
                    for(let k=0; k<data_in.length; k++){
                        if(block_regex_id.test(data_in[k][0])!=true){
                            iine_block_data.push([data_in[k][0], data_in[k][1]]); }}}
                else{
                    iine_block_data=data_in; } // 読込み上書き処理
                let write_json=JSON.stringify(iine_block_data);
                localStorage.setItem('iine_id_back', write_json); // ローカルストレージ 保存名

                for(let k=0; k<iine_block_data.length; k++){
                    iine_block_id[k]=iine_block_data[k][0]; }
                block_filter_id=iine_block_id.join('|');
                block_regex_id=RegExp(block_filter_id);
                reg_set();
                blocker_dia(); }}; });

    let button3=document.createElement('input');
    button3.setAttribute('type', 'submit');
    button3.setAttribute('value', '\uEA34');
    let style_text_x=
        'position: absolute; top: -9px; right: -9px; width: 26px; height: 26px; '+
        'font: 14px ameba-symbols; text-indent: -2px; line-height: 21px; '+
        'border: 2px solid #fff; border-radius: 50%; background: #999; color: #fff;';
    if(ua==1){
        style_text_x=
            'position: absolute; top: -9px; right: -9px; width: 26px; height: 26px;'+
            'font: 13px ameba-symbols; text-indent: -3px; line-height: 24px; '+
            'border: 2px solid #fff; border-radius: 50%; background: #999; color: #fff;'; }
    button3.setAttribute('style', style_text_x);
    insert_dialog.appendChild(button3);
    button3.onclick=function(){
        insert_dialog.remove(); }
} // file_backup()


function file_backup_end(){
    let frame=document.querySelector('#iineEntryFrame');
    if(frame){
        let imute=frame.querySelector('#imute_dia');
        if(imute){
            monitor0.disconnect();
            imute.remove();
            monitor0.observe(target0, {childList: true}); }}}



function get_src(){
    let css=
        'position: fixed; z-index: 10000; font: normal 16px Meiryo; '+
        'text-shadow: #fff 1px 1px 0, #fff 1px -1px 0, #fff -1px 1px 0, #fff -1px -1px 0; '+
        'cursor: default; display: none;';
    let menu=document.createElement('div');
    menu.setAttribute('id', 'img_menu');
    menu.setAttribute('style', css);
    if(!document.getElementById('img_menu')){
        document.querySelector('body').appendChild(menu); }

    let icon_img=[];
    icon_img=document.querySelectorAll('#iineEntryFrame img');

    for(let k=0; k<icon_img.length; k++){
        icon_img[k].addEventListener('click', function(event){
            event.preventDefault();
            event.stopImmediatePropagation();

            let menu=document.querySelector('#img_menu');
            let icon_src=icon_img[k].getAttribute('src');

            if(icon_src.indexOf('profile_images')!=-1){
                if(navigator.clipboard){
                    navigator.clipboard.writeText(icon_src); }
                menu.textContent='⭕';
                menu.style.display="block";
                menu.style.left=(event.pageX-12) +"px";
                menu.style.top=(event.pageY-30) +"px";
                setTimeout(()=>{
                    menu.style.display="none";
                }, 2000); }
            else{
                menu.textContent='❌';
                menu.style.display="block";
                menu.style.left=(event.pageX-12) +"px";
                menu.style.top=(event.pageY-30) +"px";
                setTimeout(()=>{
                    menu.style.display="none";
                }, 2000); }
        }); }


    document.body.addEventListener('click', function(event){
        let menu=document.querySelector('#img_menu');
        if(menu){
            menu.style.display="none"; }}); // 画像以外の場所のクリックでマークを消す

} // get_src()


/*
function reset_zoom(){
    let body=document.querySelector('body');
    let zoom_f=window.getComputedStyle(body, null).getPropertyValue('zoom');
    if(zoom_f && zoom_f!=1){
        let reset_value=1/zoom_f;
        let modal=document.querySelector('._10hxR5fB');
        if(modal){
             modal.style.zoom=reset_value; }}}
*/




 

 

「Bad Iine Mute / Bad Iine Mute Blogpage」は別個に登録してください 

「Bad Iine Mute」は管理ページで、「Bad Iine Mute BlogPage」はブログページで動作し、ペアで迷惑「いいね!」をブロックします。

 

この2個のツールは、「Tampermonkey」に2個のスクリプトツールとして、別個に登録してください。( 上記 ❷ の操作を2回 繰り返す事になります)

 

「Bad Iine Mute」ver. 1.7 のコードは次のページにあります。

 

 

 

「Bad Iine Mute」最新版について 

旧いバージョンの「Bad Iine Mute」「Bad Iine Mute BlogPage」は、アメーバのページ構成の変更で動作しない場合があります。 また新しいバージョンほど、より改善を重ねているので、もし導入されるなら、最新のバージョンをお勧めします。 最も新しいバージョンへのリンクは、以下のページのリンクリストから探せます。