「Search Yahoo Img」の使用方法

「Search Yahoo Img」は、ブログ記事の中に埋め込まれた、現在問題になっている「Yahoo由来」の画像を自動検索するスクリプトツールです。 このツールによる検索結果のデータを利用する「Edit Yahoo Img」は後日公開します。 肝心のスキャン作業を行う「Search Yahoo Img」を、とり急ぎ公開する次第です。

 

 

 

❶ スキャン作業の準備 

「Search Yahoo Img」は、自動的にブログページを開き、旧いページから新しいページに向かって、1記事ずつ記事内の画像を調べます。 スキャン作業はPCの通信を占拠するので、他の作業は基本的にできなくなります。 また、スキャン作業を中断なく進めるため、以下の準備をしてください。

 

◎ ブラウザにインストールしているADブロック、その他の拡張機能は、スキャン作業の間は、できる限り停止します。 PCのセキュリティアプリは通常でOKです。

 

◎ ブラウザの負担を減らすため、ブラウザ画面はスキャン作業のみのウインドウに限り、ウインドウの高さはブログページの上部を表示する範囲に狭めるのが理想です。 下部を表示すると、作業の邪魔になるスクリプトが動作する可能性が増えます。

 

◎ ツールはページ内の「iframe」の表示を削除しスキャンを効率化します。 埋め込み動画・ツイッター・ADなどが表示されなくても正常です。

 

◎ 通信状態が悪く、ページを開くのがもたつく様な状態が程度を超えると、スキャンが中断して停止します。 スキャンデータはページ毎に記録されるので、停止したページでブラウザの「 」ボタンでリロードすれば、問題なくスキャンを再開できます。

 

◎ PCの性能によりますが、他のウインドウでの作業をしない方がベターです。 他のPCでの作業は可能ですが、スキャンが停止しないか時々様子を見てください。 

 

◎ 特に大量の記事のスキャンが必要な場合は、通信環境の良い深夜に動作させるとベストです。 1記事に4sec程度の時間を要します。 1000件記事が 70分 として必要時間が予想できます。 スキャンする範囲は、引っ越し以前の記事だけです。

 

◎ PCの「電源の設定」で「スリープ」を設定していると、そこでスキャン動作が停止します。 スキャン作業の前に「スリーブ無し」に設定します。 画面の表示は必要ないので、「ディスプレイの自動OFF」は通常で構いません。

 

◎ スキャンの中断・停止を知らせるアラーム音の機能がありますが、ブラウザは「自動の音響」を抑止する設定になっています。 音を鳴らしたい場合は、Chromeでは以下の設定をします。

 

「プライバシーとセキュリティ」→「サイトの設定」→「音声」→「音声の再生を許可するサイト」→「追加」→で「ameblo.jp」を追加します。

 

◎ もしスキャンをさせたまま放置した場合、通常に処理が進むとブログの最新記事でスキャンが停止します。

 

 

 

 ❷ スキャンの開始

「Search Yahoo Img」は「Tampermonkey」という拡張機能上で動作をします。 「Tampermonkey」のダッシュボード(管理画面)に「Search Yahoo Img」を「ON/OFF」するスイッチがあります。

 

 

「Search Yahoo Img」はブログページの表示を変更するので、「スキャン作業」の間だけツールを「ON」にします。「ON」の間は、通常のブログ閲覧ができません。

 

「スキャン作業」は中断ができます。 通常のブログ閲覧などが必要になった場合、スキャンを中断して、中断した記事の日付を控えて通常の作業に移り、後で(あるいは後日に)中断したページからスキャンを再開できます。 

 

▪ スキャンの中断・再開によって、スキャン範囲が重複するのは構いませんが、スキャンをしなかった範囲が出来ると、その範囲に見落しが生じる可能性があります。

 

 

〔 注意次項 〕 アメンバー記事のスキャンについて 

引っ越した記事を「アメンバー記事」に設定している場合、それらの記事をスキャン範囲に入れるには、「ログイン」してからスキャンを開始する必要があります。

 

◎「Search Yahoo Img」は、ログイン/ログアウトに関わらずスキャンを実行しますが、ログイン状態では「アメンバー記事」の記事内をスキャンします。

 

▪ ただし「アメンバー記事」はドメインが異なり、スキャンデータは別扱いで保存されます。 スキャンデータの結果の閲覧利用は、アメンバー記事を開いて行います。

▪ スキャンの「該当」「調査数」の値は、通常記事と別に集計されます。

 

◎ ログアウトの状態でスキャンすると「アメンバー記事」を調査せずに、スキャンが進行します。 アメンバー記事のスキャンが不要な場合は、ログアウトでスキャンしても構いません。

 

▪「アメンバー記事」だけを選んでスキャンする機能はないので、もし調査をするなら、ログインして通常記事と一緒にスキャンを行ってください。

 

 

 〔 注意次項 〕 複数ブログのスキャンについて

Yahooから引っ越したブログは通常 1個と推測しますが、もし引っ越したブログが複数あり、それらを「Search Yahoo Img」でスキャンする場合は、要注意です。

 

スキャンデータはドメインごとにローカルストレージに纏められます。 引っ越した複数のブログを続けてスキャンすると、ドメインが全て「ameba.jp」なので、複数のブログの調査データが混ってしまいます。

 

これを分ける方法がなく、後の修復援助ツール「Edit Yahoo Img」で、ページ移動時に「ありえない記事」への移動となり、作業が正常にできなくなります。

 

簡単に言うと、ひとつのブログのスキャン後は、「Edit Yahoo Img」を使って処理を終えるまで、他のブログをスキャンできないという事です。「Edit Yahoo Img」にはスキャンデータを削除する機能があり、処理後にデータをリセットすれば、別ブログをスキャンできます。

 

また、ローカルストレージのデータを削除前にテキスト保存したり、再びストレージに戻す事は DevToolを使えば可能です。 その必要がある場合はコメントください。

 

 

「Search Yahoo Img」の起動 

あらかじめ、スキャンを開始する場所(通常 Yahooブログでの最初の記事)を開いておきます。 別タブで「Tampermonkey」のダッシュボード(管理画面)を表示し、「Search Yahoo Img」を「ON」にします。

 

▪「ON」にした後はダッシュボード(管理画面)のタブは閉じても構いません。 後で「Search Yahoo Img」を「OFF」にするには、再びダッシュボードを開きます。 

▪「Tampermonkey」で他のツールを利用している方は、ブログページで動作するツールは全て「OFF」にして、「Search Yahoo Img」のみを「ON」にする様にしてください。 他のツールによってスキャンが中断するのを避けるためです。

 

◎ ブログの画面に戻り、ブラウザの「 」ボタンを押します。 スクリプトツールはリロードして初めて起動します。

 

◎「アメーバヘッダー」に「Search Yahoo Img」のパネルが表示されます。

 

 

◎ パネルはスキャン動作の進行を表示するもので、スイッチではありません。

▪「該当」は、Yahoo画像を検出した記事数です。

▪「調査数」はスキャンの総回数で、 同記事をスキャンしてもカウントされます。

▪「記事日付」は、現在スキャンのために開いている記事の投稿日付です。

 

   最初の起動時の表示

 

   スキャン動作中の表示

 

 

スキャンの 開始・停止・再開 

◎ 最初の図の パネルの「青枠」部分が「スキャン停止/再開」のスイッチです。

▪「アメーバヘッダー」の本来の機能はなくなり、「停止/再開」として働きます。

 

◎ スキャン動作中は「アメーバヘッダー」の色は基本は「白」ですが、「青枠」の範囲をクリックするとスキャンが停止し、下の様に「淡い緑」になります。

 

 

◎「アメーバヘッダー」の「淡い緑」部分のクリックで、スキャンが再開します。

 

▪ 上図の様にスキャンを一旦停止した状態では、ブログページ上の「ページャー」や「ブログトップ」「記事一覧」等のスイッチを操作ができます。 余り勧められませんがツールに逆らってページ移動が出来ます。 この種の移動によって、ツールが停止する場合も、停止しない場合もあります。

 

 

スキャンの 異常停止・終了 

何等かの外的な問題でスキャン動作が停止した場合は、パネルにエラー表示を出します。 また、エラー表示がないままスクリプトが停止する場合もあります。

 

▪ブログの最新ページまでスキャンが到達した場合も、同じ表示が出ます。

 

 

◎ 不本意な停止の場合、「青枠」のスイッチ範囲をクリックし、それでもスキャンが再開しないなら、ブラウザの「 」ボタンを押しページリロードで再開を試みます。

 

▪ ページリロードでもスキャンが再開できない時は、他の問題が考えられます。

「Search Yahoo Img」を一旦「OFF」にして、通常のブログページ表示が出来る状態かどうかを調べてください。

 

▪ ブラウザの音響抑止の設定を解除している場合は、アラーム音が再生されます。 アラーム音は「アメーバヘッダー」の「青枠」の部分をクリックすると停止します。

 

▪ Yahooの引っ越し範囲をスキャンするだけで良く、それ以降の期間の記事をスキャンしても、意味がありません。

 

 

 

 「Search Yahoo Img」の検索の仕様

 

●「アメーバ提示の旧画像サーバーURL」と、太字部分が「検索文字列」です。

 

 https://blogs.yahoo.co.jp/IMG/ybi/1/

 http://blogs.yahoo.co.jp/IMG/ybi/1/

 https://blogs.yahoo.co.jp/IMG/ybi/avatar

 http://blogs.yahoo.co.jp/IMG/ybi/avatar

 https://blogs.c.yimg.jp/res/blog

 http://blogs.c.yimg.jp/res/blog

 https://blog-001.west.edge.storage-yahoo.jp/res/blog

 http://blog-001.west.edge.storage-yahoo.jp/res/blog

 https://ident-001.west.edge.storage-yahoo.jp/res/ident

 http://ident-001.west.edge.storage-yahoo.jp/res/ident

 

アメーバの告示は「以下で始まる画像URL」とされ、画像を包む a要素の「URL」を指す様ですが、中のimg要素の「SRC」の場合も有ると考え、両方を検索します。

 

検索した結果は、ブラウザが管理するローカルストレージに保存されますが、その容量は軽量で 100kB以下 /1000件 です。 ストレージ容量は一般に5MBとされ、全く問題ない容量です。

 

 

 

 「Search Yahoo Img」を使用するには 

「Search Yahoo Img」は Chrome/Edge/Firefox の拡張機能「Tampermonkey」上で動作するスクリプトツールです。 上記のブラウザで動作を確認していますが、他のブラウザでの動作は未確認です。

 

❶「Tampermonkey」を導入します

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

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

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

 

 

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

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

 

 

 

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

 

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

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

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

 

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

 

 

〔 Search Yahoo Img 〕 ver. 0.2

 

// ==UserScript==
// @name         Search Yahoo Img
// @namespace    https://ameblo.jp/
// @version      0.2
// @description  Yahoo由来の画像検索
// @author       Ameblo User
// @match       https://ameblo.jp/*
// @match       https://secret.ameba.jp/*
// @grant        none
// ==/UserScript==

let datetime=' ';
let test_arr=[0, 0];
let pose=0; // 動作停止フラグ
let tp=0; // senser用 停止フラグ


let target=document.querySelector('head'); // 監視 target
let monitor=new MutationObserver(escape_if);
monitor.observe(target, { childList: true }); // 監視開始

do_task();

function escape_if(){
    do_task();

    let iframe_=document.querySelectorAll('iframe');
    for(let k=0; k<iframe_.length; k++){
        iframe_[k].remove(); }}



function do_task(){
    let page=location.pathname;
    test_arr.push(page);
    test_arr.shift();
    if(test_arr[0]!=test_arr[1]){
        check_img(); }}



function check_img(){
    let pageDB; // 主データ配列 [entry-ID, 対象数, 処理フラグ, 投稿日付]
    let idDB=[]; // 記事idの配列

    let read_json=localStorage.getItem('CKIMG_DB'); // ローカルストレージ 保存名
    pageDB=JSON.parse(read_json);
    if(pageDB==null){
        pageDB=[['', 0, 0, 0, 1]]; }
    for(let k=0; k<pageDB.length; k++){
        idDB.push(pageDB[k][0]); } // 記事id検索用の配列を作る
    let write_json=JSON.stringify(pageDB);
    localStorage.setItem('CKIMG_DB', write_json); // ローカルストレージ 保存

    pose=pageDB[0][4];
    stop_disp();

    pageDB[0][1]+=1; // 検査数を更新
    tp=1; // senser用 フラグ
    senser();

    envi();


    setTimeout(()=>{
        let entry_id; // 現在のページID
        let entryWrapper=document.querySelector('.js-entryWrapper');
        if(entryWrapper){
            entry_id=entryWrapper.getAttribute('data-unique-entry-id'); }

        let d_time; // 8桁化した投稿日時
        let time=document.querySelector('time');
        if(time){
            d_time=time.getAttribute('datetime').replace(/-/g, ''); }


        let entryBody=document.querySelector('#entryBody');
        if(!entryBody){
            entryBody=document.querySelector('.skin-entryBody'); } // アメンバー記事の場合
        let imgs=entryBody.querySelectorAll('img');
        let links=entryBody.querySelectorAll('a');

        let count_i=0;
        for(let k=0; k<imgs.length; k++){
            if(search_img(imgs[k])==1){
                count_i+=1; }}

        let count_a=0;
        for(let k=0; k<links.length; k++){
            if(search_a(links[k])==1){
                count_a+=1; }}

        if(count_i + count_a>0){
            set_db(entry_id, count_i + count_a, d_time); } // ヒットデータを配列に追加

    }, 3000); // 🔴 本文ロードの待機時間


    setTimeout(()=>{
        write_json=JSON.stringify(pageDB);
        localStorage.setItem('CKIMG_DB', write_json); // ローカルストレージ 保存
        go_next(); }, 4000); // 🔴 1画面の作業終了時間

    stop();



    function search_img(target_img){
        let pattern=[
            'yahoo.co.jp/IMG/ybi',
            'c.yimg.jp/res/blog',
            'west.edge.storage-yahoo.jp'].join('|');
        let url_regex=RegExp(pattern);

        let img_src=target_img.getAttribute('src');
        if(url_regex.test(img_src)==true){
            return 1; }}


    function search_a(target_link){
        let pattern=[
            'yahoo.co.jp/IMG/ybi',
            'c.yimg.jp/res/blog',
            'west.edge.storage-yahoo.jp'].join('|');
        let url_regex=RegExp(pattern);

        let link_href=target_link.getAttribute('href');
        if(url_regex.test(link_href)==true){
            return 1; }}



    function set_db(id, n, date){
        let tmp_id=id;
        if(String(tmp_id).length==11){ // 11桁以外は登録しない
            if(!idDB.includes(id)){
                if(date.length==8){ // 8桁以外は登録しない
                    let entry_date=parseInt(date, 10);
                    pageDB.push([id, n, 0, entry_date]); }
                else{
                    pose=2;
                    alerm(1); }}} // time 取得できなければ停止
        else{
            pose=2;
            alerm(2); } // entry-id 取得できなければ停止
        envi_add(); } // 更新を表示



    function time_call(){ // 投稿日付の取得
        let time=document.querySelector('time');
        if(!time){
            datetime=' '; }
        else{
            datetime=time.getAttribute('datetime'); }}



    function envi(){

        let css='#ambHeader > div:nth-child(2) { display: none !important; } '+
            '#disp_yimg { position: fixed; top: 1px; left: 340px; z-index: 4000; '+
            'padding: 8px 0 6px 40px; font: 16px Meiryo; color: #000; width: 430px; '+
            'outline: 1px solid #000; background: #f0f8ff; ';

        let style=document.createElement('style');
        style.setAttribute('id', 'style_yimg');
        style.insertAdjacentHTML('afterbegin', css);
        if(!document.querySelector('#style_yimg')){
            document.body.appendChild(style); } // CSSのセット


        time_call();

        let insert_div;
        insert_div=document.createElement('div');
        insert_div.setAttribute('id', 'disp_yimg');
        insert_div.textContent='該当:'+ (pageDB.length-1) +
            '  調査数:'+ pageDB[0][1] +'  記事日付:'+ datetime;

        if(document.querySelector('#disp_yimg')){
            document.querySelector('#disp_yimg').remove(); }
        document.body.appendChild(insert_div); } // 表示パネルのセット



    function envi_add(){
        time_call();

        let panel=document.querySelector('#disp_yimg');
        if(panel){
            panel.textContent='該当:'+ (pageDB.length-1) +
                '  調査数:'+ pageDB[0][1] +'  記事日付:'+ datetime; }}



    function go_next(){
        let preview=document.querySelector('.pagingPrev');
        if(!preview){
            preview=document.querySelector('.skin-pagingPrev'); }
        if(preview && pose==0){
            tp=0; // senser用のフラグ
            preview.click(); }}



    function stop(){
        let ambHeader=document.querySelector('#ambHeader');
        ambHeader.onclick=function(event){
            event.preventDefault();
            if(event.ctrlKey==false){
                if(pose==0 || pose==2){
                    pose=1;
                    pageDB[0][4]=1;
                    write_json=JSON.stringify(pageDB);
                    localStorage.setItem('CKIMG_DB', write_json); // ローカルストレージ 保存
                    stop_disp(); }
                else{
                    pageDB[0][4]=0;
                    write_json=JSON.stringify(pageDB);
                    localStorage.setItem('CKIMG_DB', write_json); // ローカルストレージ 保存
                    location.reload(); }}}}

} // check_img()



function stop_disp(){
    let ambHeader=document.querySelector('#ambHeader');
    if(pose>0){
        ambHeader.style.background='#cce4ec'; }
    else{
        ambHeader.style.background='#fff'; }}


function senser(){
    setTimeout(()=>{
        if(tp==0){
            pose=2;
            alerm(0); }
    }, 6000); } // 🔴 6sec後 停止していたら tp==0


function alerm(n){
    setInterval( beep, 1000);
    stop_disp();
    let disp_yimg=document.querySelector('#disp_yimg');
    if(disp_yimg){
        let alert_text
        if(n==0){
            alert_text='<br><br>🔴 連続スキャンが停止しました   処理遅延または終了'; }
        if(n==1){
            alert_text='<br><br>🔴 連続スキャンが中断しました   ✖ 投稿日時'; }
        if(n==2){
            alert_text='<br><br>🔴 連続スキャンが中断しました   ✖ 記事ID'; }
        disp_yimg.insertAdjacentHTML('beforeend', alert_text); }

    function beep(){
        let base64='UklGRvEGAABXQVZFZm10IBAAAAABAAEAESsAABErAAABAAgAZGF0Yc0GAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgH96eH2ImpqMemVodYCSmI+Gb1xlcIegn5OBZVtoc5CjnZF7X19tfJqlnI1zW2JtgqCjl4VpWmZxjaWhlH5gW2l3l6adj3VbX2yAoKWaiWxYY2+JpaOXgWNaaHSTp6CSel1canqcppyMcFlhbIKjpJmGaFhlcI2moZV+YFtpdpennpB1Wl9rfp+lm4ptWGNuh6Sil4JkWWdzkqefknpdXWp6nKacjXBZYW2Do6OYhWdZZnGOpqGUfl9baXeYpp2PdFpgbH+gpZqIa1hkb4mlopaAYlpodJSnn5F4XF5rfJ2mm4tuWWNuhaSjl4NlWWdykKegk3tdXGp5m6acjXFZYW2Co6SZhWdYZnGOp6GUfV5baniZp5yOcllgbYGipJmGaFhlcIymoZR+YFtpdpennY91W19sf6ClmohrWWRviKWiloFjWmh0k6afkXlcXWt7nKabi3BZYm6Do6SYhGdYZnGOpqCUfV9baneYp52PdVpgbH+gpZqIbFhkb4ilopaBY1loc5Knn5J6XV1repymnIxxWWJtgqOkmIVoWWZxjaahlH5gW2p2l6adj3VbX2x+oKWaiWxYZG+IpaKWgWNZaHOTp5+ReVxda3ucppuLb1liboOjpJiEZ1lmcY6moJN9X1tqd5innY50WmBtgKGlmYhqWGVwiaailYBiWmh0lKeekHhcXmt8naWbim5ZY26EpKOXg2ZZZ3KQp6CTfF5caniappyNc1phbYCipJmHaVhlcIqloZWAYlppdZWmnpB3XF5sfJ6lm4puWWNuhaSjl4NlWWdykKafknteXGp5mqacjXJZYW2CoqSYhWdYZnGNp6CUfV9baniZp52Oc1pgbYChpJmHaVllcYuloJR/YVtqdpamnY92XGBtf5+kmYhsWmVwiaSglIBjXGp1k6Wcj3ddYG19naOZiW5cZnSTqJJ7anN9gnt1gImQhHt0foWFhYCDhIJ8e3yAhIKBgIB/f36AgIGAf35+gICAgICCgYB/gICBgICAgIGAgICAgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAf4CAgYGAgICAgICAgYCAgICAgICAgICAgH9/gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgH97d3qBkpmPgm5oc3uIlJCIfWVmcH2VnpWJdGFocYKbnZSFbWBsdYygnJF/ZGBseJSimo12X2Nuf5yimIhtW2Vwh6KglIFkW2l1k6aekXldXmt8nKabi3BaY26EoqOYhWdZZnGOpqCUfV9baXeYpp2PdVtgbICgpJqIa1hkb4mlopaAYlpodJOmn5F5XF5qe52mnIxwWWJtg6OjmIRnWWZxjqahlH1fW2l3maedjnRaYGx/oKWaiGtYZG6IpaKWgWNaaHSTpp+SeV1danqcppyMcFlibYOjpJiFZ1lmcY6moZR+X1tpdpinno91Wl9sf6ClmolrWGRviKWiloFjWWh0lKefkXlcXWt7naacjHBZYm2Do6OYhWdZZnGOpqCTfV9baneYpp2OdFpgbH+gpZqIa1hkb4mlopaBY1podJOnn5F5XF1re52mnItwWWJug6OjmIVmWWZxj6ahlH1fW2yDpp+BbXB7goBye4aRi392eYOEhoCChIR/enx/g4OCgIB/f31+gIGBgH9+gICAgICCgoCAgICAgICAgIGAgH+AgIGAgICAgH9/gICAgICAgH9/gICBgYCAf3+AgICAgICAgICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCAgICAgICBgYCAf4CAgICAgICAf3+AgIGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAA==';
        let sound=new Audio("data:audio/wav; base64," + base64);
        if(pose==2){
            sound.play(); }}}



// 通信環境でどうしてもスキャンが進行しない場合、以下の❶❷を変更します
// ❶ 96行    🔴 本文ロードの待機時間 を「4000」に変更
// ❷ 102行  🔴 1画面の作業終了時間 を「5000」に変更


/* 紛失画像のURL/SRC
https://blogs.yahoo.co.jp/IMG/ybi/1/
http://blogs.yahoo.co.jp/IMG/ybi/1/
https://blogs.yahoo.co.jp/IMG/ybi/avatar
http://blogs.yahoo.co.jp/IMG/ybi/avatar
https://blogs.c.yimg.jp/res/blog
http://blogs.c.yimg.jp/res/blog
https://blog-001.west.edge.storage-yahoo.jp/res/blog
http://blog-001.west.edge.storage-yahoo.jp/res/blog
https://ident-001.west.edge.storage-yahoo.jp/res/ident
http://ident-001.west.edge.storage-yahoo.jp/res/ident
*/

 

 

〔追記〕 2021.10.22

ツール起動時・スキャン実行中・スキャン停止時・エラー及び終了の停止時のヘッダー部の配色を ver. 0.1から改めて統一しました。 これは、操作を判り易くするための変更で、基本機能は ver. 0.1と変わりません。 上記コードは、変更済です。