タイトル | : 「画像BBSのURL抽出&保存」 |
カテゴリ | : Sleipnir用スクリプト全般 |
記事No | : 339 [関連記事] |
投稿日 | : 2009/02/03(Tue) 21:49 |
投稿者 | : 由々識 |
URL | : http://yuyulab.hp.infoseek.co.jp/ |
/********************************************************** 「画像BBSのURL抽出&保存」Ver. 1.06 Produced by 由々識 画像掲示板の画像URLを抽出し、保存します。 **********************************************************/ /* 自分の環境に合わせ設定してください。*/ var defDir = ''; //ダウンロード先のフォルダのパス。 var ext = '.jpg .jpeg .gif .png .bmp'; //ダウンロードしたいファイルのURLの末尾。 var uwagaki = false; //これを true にすると同名のファイルが存在しても上書き確認せずに上書き保存します。 var wait503 = 7500; //ダウンロードの際、「503 Service Temporarily Unavailable」を返され場合の待機時間(ミリ秒)。 /*********************************************************/ var pnir, id, doc, SScript, ScriptName, PnirVer, PnirLang, AD, ActDoc, blnend, strDocList, strImgList, nid, ndoc, nwindow, ActDocURL, regext, DocReferrer, DocCookie, strdocTitle, arrImgList, imgListlen, i, num, charset, n, strHTMLlist, e; SScript = (typeof(sleipnir) == 'object'); /* 現在の document を取得 */ if (SScript){ WScript = sleipnir; } else { pnir = new ActiveXObject("Sleipnir.API"); id = pnir.GetDocumentID(pnir.ActiveIndex); doc = pnir.GetDocumentObject(id); PnirVer = pnir.Version; PnirLang = (PnirVer < 200) ? 'japanese' : pnir.GetProfileStringEx('General', 'Language', 'english', pnir.UserPath + 'setting\\user.ini'); blnend = false; } ScriptName = WScript.ScriptName.replace(/\.[^\.]*$/, ''); /* ダイアログウィンドウを表示 */ function PopupDialogbox(d_text, d_time, d_type){ var objWSHShell, n; objWSHShell = WScript.CreateObject("WScript.Shell"); n = objWSHShell.Popup(d_text, d_time, ScriptName, d_type); objWSHShell = null; return(n); } /* 2連続beep音を鳴らす */ function ErrorBeep(ffreq){ var fi; for (fi = 0; fi<ffreq; fi++){ pnir.Beep(); WScript.Sleep(100); } } /* 相対パスを絶対パス化 */ function UrlCorrect(base_url, lnkURL, fdocURL){ var fbase_url, flnkURL; fbase_url = base_url.replace(/\?[\s\S]*$/, '').replace(/[^\/]+$/, ''); flnkURL = lnkURL; if ((/^[a-zA-Z]+\:\/\//).test(flnkURL)){ return(flnkURL); //絶対パスならそのまま返す。 } else if ((/^\#/).test(flnkURL)){ return(fdocURL.replace(/\#[\s\S]*$/, '') + flnkURL); //ページ内移動の場合。 } else { if ((/^\/\/[^\/\\]+/).test(flnkURL)){ void (/^[a-zA-Z]+\:/).test(fbase_url); flnkURL = RegExp.lastMatch + flnkURL; } else if ((/^[\/]/).test(flnkURL)){ void (/^[a-zA-Z]+\:[\/]+[^\/]+\//).test(fbase_url); flnkURL = RegExp.lastMatch + flnkURL.replace(/^\//, ''); } else { flnkURL = fbase_url + flnkURL; } flnkURL = flnkURL.replace(/\/(?:\.\/)+/g, '\/'); while ((/[^\/]\/[^\/]+\/\.\.\//).test(flnkURL)){ flnkURL = flnkURL.replace(/([^\/]\/)[^\/]+\/\.\.\//, '$1'); } return(flnkURL); } } /* HTMLをダウンロード */ function DownloadHTML() { var oXmlHttp, fstr, farglen, fURL, fURL2, fReferer, farrCookie, fi, fhttpmethod, fhttpsend, fstrCookie; farglen = Math.min(arguments.length, 3); switch (farglen){ case 3: farrCookie = arguments[2]; case 2: fReferer = arguments[1]; case 1: fURL2 = fURL = arguments[0]; break; default: return(''); } if ((/^http[s]?\:\/\//).test(fURL)){ oXmlHttp = new ActiveXObject("MSXML2.ServerXMLHTTP"); if (fURL.search(/\tPOST$/) != -1){ fhttpmethod = 'POST'; fURL = fURL.replace(/\tPOST$/, ''); fhttpsend = fURL.replace(/^[^\?]+[\?]?/, ''); fURL = fURL.replace(/\?[\s\S]*$/, ''); } else { fhttpmethod = 'GET'; fhttpsend = ''; } fURL = fURL.replace(/#[\s\S]*$/, ''); try{ oXmlHttp.open(fhttpmethod, fURL, true, "", ""); } catch(e){ return(''); } if (farrCookie){ farrCookie = CookieJudgment(farrCookie, fURL, ActDocURL); } if (farrCookie){ fstrCookie = ''; for (fi = 0; fi<farrCookie.length; fi++){ fstrCookie += farrCookie[fi].replace(/\;[^\;]*/g,'') + '\; '; } oXmlHttp.setRequestHeader("Cookie", fstrCookie.replace(/\; $/, '')); } if (fReferer){ fReferer = fReferer.replace(/#[\s\S]*$/, ''); oXmlHttp.setRequestHeader("Referer", fReferer); } oXmlHttp.setRequestHeader("If-Modified-Since", ' '); oXmlHttp.setRequestHeader("Accept", 'image\/gif\, image\/x-xbitmap\, image\/jpeg\, image\/pjpeg\, application\/xaml+xml\, application\/vnd\.ms-xpsdocument\, application\/x-ms-xbap\, application\/x-ms-application\, application\/x-shockwave-flash\, \*\/\*'); oXmlHttp.setRequestHeader("Content-Type", 'application/x-www-form-urlencoded'); oXmlHttp.setRequestHeader("User-Agent", 'Mozilla\/4\.0 \(compatible\; MSIE 7\.0\; Windows NT 6\.0\; SLCC1\)'); if ((/Shift_JIS|sjis/i).test(charset)){ try { oXmlHttp.send(fhttpsend); } catch(error) { return(''); } while (oXmlHttp.readyState < 2){WScript.Sleep(100);} fstatus = oXmlHttp.status; //pnir.OutputAddString(String(num) + ' ' + fstatus + ' ' + fURL2); if (fstatus == 503){ oXmlHttp.abort(); WScript.Sleep(wait503); fstr = DownloadHTML(fURL2, fReferer, farrCookie); } else if (fstatus == 200){ while (oXmlHttp.readyState < 4){WScript.Sleep(100);} fstr = BinaryToText(oXmlHttp.responseBody, 'Shift_JIS'); } else { oXmlHttp.abort(); fstr = '' } } else { try { oXmlHttp.send(fhttpsend); } catch(error) { return(''); } while (oXmlHttp.readyState < 2){WScript.Sleep(100);} fstatus = oXmlHttp.status; //pnir.OutputAddString(String(num) + ' ' + fstatus + ' ' + fURL2); if (fstatus == 503){ oXmlHttp.abort(); WScript.Sleep(wait503); fstr = DownloadHTML(fURL2, fReferer, farrCookie); } else if (fstatus == 200){ while (oXmlHttp.readyState < 4){WScript.Sleep(100);} fstr = oXmlHttp.responseText; } else { oXmlHttp.abort(); fstr = '' } } oXmlHttp = null; return(fstr); } else { return(''); } } /* document.write から HTML を生成して置換 */ function DocumentWriteHTMLConvert(fstrHTML){ var fstrBody, farrScriptTag, farrDocWrite, fScriptTaglen, fDocWritelen, fregspt, fregdoc, fregwrt, fi, fj, fstrTemp, e; fregspt = /<script[\s\S]+?<\/script>/ig; fregdoc = /document\.write(?:ln|)\([\s\S]+?\)\;/g; fregwrt = /document\.write(?:ln|)\(([\s\S]+?)\)\;/; if ((/<body[\s\S]+<\/body>/i).test(fstrHTML)){ fstrBody = RegExp.lastMatch; farrScriptTag = new Array(); farrScriptTag = fstrBody.match(fregspt); if (farrScriptTag){ fScriptTaglen = farrScriptTag.length; for (fi=0; fi<fScriptTaglen; fi++){ fstrTemp = ''; farrDocWrite = new Array(); farrDocWrite = farrScriptTag[fi].match(fregdoc); if (farrDocWrite){ fDocWritelen = farrDocWrite.length; for (fj=0; fj<fDocWritelen; fj++){ if (fregwrt.test(farrDocWrite[fj])){ try { fstrTemp += eval(RegExp.$1); } catch(e) { //エラーが出たらなにもしない。 } } } if (fstrTemp){ fstrHTML = fstrHTML.replace(new RegExp(farrScriptTag[fi].replace(/[\\\r\n\t\f\b\v]/g, RegEscapeAdd).replace(/[\^\$\*\+\?\.\{\}\[\]\(\)\:\=\!\|\-]/g, '\\$&')), fstrTemp); } } farrDocWrite = null; } } farrScriptTag = null; } return(fstrHTML); } function RegEscapeAdd($0,$1,$2){ return(($0 == '\\') ? '\\\\' : (($0 == '\r') ? '\\r' : (($0 == '\n') ? '\\n' : (($0 == '\t') ? '\\t' : (($0 == '\f') ? '\\f' : (($0 == '\b') ? '\\b' : '\\v')))))); } /* Cookieがリンク先で有効か判定 */ function CookieJudgment(farrCookie, fURL, fdocURL){ var i, fCookielen, fCdomain, fCpath; fCookielen = farrCookie.length; if (farrCookie){ for (i = 0; i<fCookielen; i++){ fCdomain = ((/domain=([^\;\r\n ]*)/).test(farrCookie[i])) ? RegExp.$1 : fdocURL.replace(/^http[s]?\:\/\//i, '').replace(/\/[^\/]*/g, ''); if (fURL.replace(/^http[s]?\:\/\//i, '').replace(/\/[^\/]*/g, '').indexOf(fCdomain) == -1){ farrCookie.splice(i, 1); i--; fCookielen--; } else { if (farrCookie[i].search(/path=([^\;\r\n ]*)/) != -1){ fCpath = RegExp.$1; if (fURL.replace(/^http[s]?\:\/\/[^\/]*/i, '').indexOf(fCpath) == -1){ farrCookie.splice(i, 1); i--; fCookielen--; } } } } } else { return(null); } if (farrCookie && farrCookie.length == 0){farrCookie = null;} return(farrCookie); } /* URLから任意のHTMLヘッダを取得(戻り値は配列です) */ function GetRESPHeader(f_HeaderLabel, f_url, freferer){ var oXmlHttp, farrTemp, re; oXmlHttp = new ActiveXObject("MSXML2.XMLHTTP"); oXmlHttp.open("HEAD", f_url.replace(/#[\s\S]*$/, ''), false, "", ""); oXmlHttp.setRequestHeader("Referer", freferer.replace(/#[\s\S]*$/, '')); oXmlHttp.send(); farrTemp = new Array(); re = new RegExp('^' + f_HeaderLabel + ': [^\n]*$', 'gm'); farrTemp = oXmlHttp.getAllResponseHeaders().match(re); if (farrTemp){ farrTemp = farrTemp.join('\r\n').replace(new RegExp(f_HeaderLabel + ': ', 'g'), '').split('\r\n'); } oXmlHttp = null; return(farrTemp); } /* ローカルに保存されているCookieからURLに該当するものを取得 */ function GetLocalCookie(fstrURL){ var fso, objShell, objFolder, COOKIES, ForReading, TristateFalse, cookieFilelen, fi, fj, objTextStream, fName, fValue, fDP, arrCookie, num, strPath; COOKIES = 33; ForReading = 1; TristateFalse = 0; fso = new ActiveXObject("Scripting.FileSystemObject"); objShell = WScript.CreateObject("Shell.Application"); objFolder = objShell.Namespace(COOKIES); cookieFilelen = objFolder.Items().Count; arrCookie = new Array(); num = -1; for (fi=0; fi<cookieFilelen; fi++){ strPath = objFolder.Items().Item(fi).Path; if (strPath.search(/\.txt/) != -1){ objTextStream = fso.OpenTextFile(objFolder.Items().Item(fi).Path, ForReading, false, TristateFalse); do { fName = objTextStream.ReadLine(); fValue = objTextStream.ReadLine(); fDP = objTextStream.ReadLine(); if (fstrURL.indexOf(fDP) != -1){ num++; arrCookie[num] = fName + '=' + fValue + '\; domain=' + fDP.replace(/([^\/])(\/[\s\S]*)$/, '$1') + '\; path=' + RegExp.$2; } for (fj=0; fj<6; fj++){ objTextStream.SkipLine(); } } while (!objTextStream.AtEndOfStream); objTextStream.Close(); } } objTextStream = null; objFolder = null; objShell = null; fso = null; if (arrCookie.length == 0){arrCookie = null;} return(arrCookie); } /* HTML文字列からURLを抽出 */ function URLExtraction() { var farglen, fstr, fdocURL, freg6, freg8, fregrnc, farrAnchortag, fAnchortaglen, fbaseURL, fstrURL, fstrTemp, fi; farglen = Math.min(arguments.length, 2); switch (farglen){ case 2: fdocURL = arguments[1]; case 1: fstr = arguments[0]; break; default: return(''); } fstr = fstr.replace(/href[\s]=/ig, 'href='); freg6 = /<a\s(?:[^>]+[\s\"\'])?href=(?![\"\']?mailto\:|[\"\']?ftp\:|[\"\']?telnet\:|[\"\']?mms\:|[\"\']?rtsp\:|[\"\']?tel\:|[\"\']?javascript\:|[\"\']?news\:|[\"\']?file\:|[\"\']?\#[\"\' ])[^\\][^>]+>|<area\s(?:[^>]+[\s\"\'])?href=(?![\"\']?mailto\:|[\"\']?ftp\:|[\"\']?telnet\:|[\"\']?tel\:|[\"\']?javascript\:|[\"\']?news\:|[\"\']?file\:|[\"\']?\#[\"\' ])[^\\][^>]+>/ig; freg8 = /[\s\"\']href=(?:([\"\'])([^\"\'>]+)\1[^>]*|([^\"\' >]+)(?: [^>]*|))>/i; fregrnc = /\r|\n|<\!--[^\!]+?<\/a>[^\!]*?-->/ig; farrAnchortag = new Array(); farrAnchortag = fstr.replace(fregrnc, '').match(freg6); if (farrAnchortag){ fAnchortaglen = farrAnchortag.length; fstrTemp = ''; fbaseURL = BaseURL(fstr); if (fbaseURL){ if (!fdocURL){ fdocURL = fbaseURL; } } else { if (fdocURL){ fbaseURL = fdocURL.replace(/\?[\s\S]*$/, '').replace(/[^\/]+$/,''); } } for (fi = 0; fi<fAnchortaglen; fi++){ if (freg8.test(farrAnchortag[fi])){ fstrURL = (RegExp.$2 + RegExp.$3).replace(/\&\;/g, '\&'); if (fdocURL){ fstrURL = UrlCorrect(fbaseURL, fstrURL, fdocURL); } fstrTemp += fstrURL + '\r\n'; } } fstrTemp = fstrTemp.replace(/\r\n$/,''); farrAnchortag = null; return(fstrTemp); } else { return(''); } } /* HTML文字列から画像を抽出 */ function IMGTagExtraction(fstr, fdocURL){ var freg6, freg8, fregrn, farrImagetag, fImagetaglen, fstrTemp, fbaseURL, fstrURL, fi; freg6 = /<IMG\s(?:[^>]+[\s\"\'])?src=(?![\"\']?mailto\:|[\"\']?ftp\:|[\"\']?telnet\:|[\"\']?mms\:|[\"\']?rtsp\:|[\"\']?tel\:|[\"\']?javascript\:|[\"\']?news\:|[\"\']?file\:|[\"\']?\#[\"\' ])[^\\][\s\S]+?>/ig; freg8 = /[\s\"\']src=(?:([\"\'])([^\"\'>]+)\1[^>]*|([^\"\' >]+)( [^>]*|))>/i; fregrn = /\r|\n/ig; farrImagetag = new Array(); farrImagetag = fstr.replace(fregrn, '').match(freg6); if (farrImagetag){ fImagetaglen = farrImagetag.length; fstrTemp = ''; fbaseURL = BaseURL(fstr); if (fbaseURL){ if (!fdocURL){ fdocURL = fbaseURL; } } else { if (fdocURL){ fbaseURL = fdocURL.replace(/\?[\s\S]*$/, '').replace(/[^\/]+$/,''); } } for (fi = 0; fi<fImagetaglen; fi++){ if (freg8.test(farrImagetag[fi])){ fstrURL = (RegExp.$2 + RegExp.$3); if (fstrURL.indexOf('\?') == -1 && regext.test(fstrURL)){ if (fdocURL){ fstrURL = UrlCorrect(fbaseURL, fstrURL, fdocURL); } fstrTemp += fstrURL + '\r\n'; } } } fstrTemp = fstrTemp.replace(/\r\n$/,''); farrImagetag = null; return(fstrTemp); } else { return(''); } } /* HTML文字列内から<BASE>タグのhref属性を抽出 */ function BaseURL(fstr){ return((((/<BASE\s[^>]*href=(?:([\"\'])([^\"\'>]+)\1[^>]*|([^\"\' >]+)(?: [^>]*|))>/ig).test(fstr.replace(/<BODY[\s\S]+<\/BODY>/i, ''))) ? RegExp.$2 + RegExp.$3 : '').replace(/\?[\s\S]*$/, '').replace(/[^\/]+$/, '')); } /* URLリストから任意の拡張子へのリンクを抽出 */ function IMGLinkExtraction(fstrImgList){ var farrURLLIst, fURLListlen, fstr, fi; farrURLLIst = new Array(); farrURLLIst = fstrImgList.split('\r\n'); fURLListlen = farrURLLIst.length; if (fURLListlen == 1 && !farrURLLIst[0]){fURLListlen = 0;} fstr = ''; for (fi = 0; fi<fURLListlen; fi++){ if (regext.test(farrURLLIst[fi].replace(/\tPOST$/, '').replace(/\?[\s\S]*$/, ''))){ fstr += farrURLLIst[fi] + '\r\n'; } } fstr = fstr.replace(/\r\n$/,''); farrURLLIst = null; return(fstr); } /* HTMLからFORMのURLを抽出 */ function FORMExtraction(fstrHTML, fdocURL){ var fregfom, fregact, fregmtd, fregipt, fregnam, fregval, fregrnc, farrFORM, farript, fstrTemp, fFORMlen, fiptlen, fbaseURL, fi, fj, fstrURL, fstrmtd, fstrname, fstrvalue; fregfom = /<FORM\s[^>]+>[\s\S]+?<\/FORM(?:\s[^>]+)?>/ig; fregact = /[\s\"\']action=(?:([\"\'])([^\"\'>]+)\1[^>]*|([^\"\' >]+)(?: [^>]*|))>/i; fregmtd = /[\s\"\']method=(?:([\"\'])([^\"\'>]+)\1[^>]*|([^\"\' >]+)(?: [^>]*|))>/i; fregipt = /<input\s(?:[^>]+[\s\"\'])?(?:name=[^>]+?value|value=[^>]+?name)=[^>]+>/ig; fregnam = /[\s\"\']name=(?:([\"\'])([^\"\'>]+)\1[^>]*|([^\"\' >]+)(?: [^>]*|))>/i; fregval = /[\s\"\']value=(?:([\"\'])([^\"\'>]+)\1[^>]*|([^\"\' >]+)(?: [^>]*|))>/i; fregrnc = /\r|\n|<\!--[^\!]+?<\/a>[^\!]*?-->/ig; farrFORM = new Array(); fstrTemp = ''; farrFORM = fstrHTML.replace(fregrnc, '').match(fregfom); if (farrFORM){ fFORMlen = farrFORM.length; fbaseURL = BaseURL(fstrHTML); if (!fbaseURL){ fbaseURL = fdocURL.replace(/\?[\s\S]*$/, '').replace(/[^\/]+$/,''); } for (fi = 0; fi<fFORMlen; fi++){ if (fregact.test(farrFORM[fi])){ fstrURL = RegExp.$2 + RegExp.$3; void fregmtd.test(farrFORM[fi]); fstrmtd = (fregmtd.test(farrFORM[fi])) ? (RegExp.$2 + RegExp.$3).toUpperCase() : 'GET'; farript = new Array(); farript = farrFORM[fi].match(fregipt); if (farript){ fiptlen = farript.length; fstrURL += '\?'; for (fj = 0; fj<fiptlen; fj++){ if (fregnam.test(farript[fj])){ fstrname = RegExp.$2 + RegExp.$3; fstrvalue = (fregval.test(farript[fj])) ? RegExp.$2 + RegExp.$3 : ''; fstrURL += fstrname + '=' + fstrvalue + '\&'; } } fstrURL = fstrURL.replace(/\&$/g, '').replace(/\?$/g, ''); } fstrTemp += UrlCorrect(fbaseURL, fstrURL, fdocURL) + ((fstrmtd.indexOf('POST') != -1) ? '\tPOST' : '') + '\r\n'; farript = null; } } fstrTemp = fstrTemp.replace(/\r\n$/,''); farrFORM = null; return(fstrTemp); } else { return(''); } } /* HTMLからMETAタグの refresh のURLを抽出 */ function MetaExtraction(fstrHTML, fdocURL){ var fregmet, fregcnt, fregrnc, farrMETA, fstrTemp, fMETAlen, fbaseURL, fi, fstrURL; fregmet = /<META\sHTTP-EQUIV=[\"\']?refresh[^>]+>/ig; fregcnt = /[\s\"\']CONTENT=(?:([\"\'])[0-9]+\;url\=([^\"\'>]+)\1[^>]*|[0-9]+\;url\=([^\"\' >]+)(?: [^>]*|))>/i; fregrnc = /\r|\n|<\!--[^\!]+?<\/a>[^\!]*?-->/ig; farrMETA = new Array(); fstrTemp = ''; farrMETA = fstrHTML.replace(fregrnc, '').replace(/<BODY[\s\S]+<\/BODY>/i, '').match(fregmet); if (farrMETA){ fMETAlen = farrMETA.length; fbaseURL = BaseURL(fstrHTML); if (!fbaseURL){ fbaseURL = fdocURL.replace(/\?[\s\S]*$/, '').replace(/[^\/]+$/,''); } for (fi = 0; fi<fMETAlen; fi++){ if (fregcnt.test(farrMETA[fi])){ fstrURL = RegExp.$2 + RegExp.$3; fstrTemp += UrlCorrect(fbaseURL, fstrURL, fdocURL) + '\r\n'; } } fstrTemp = fstrTemp.replace(/\r\n$/,''); return(fstrTemp); } else { return(''); } } /* HTML内のFORMから次のページのURLを抽出 */ function NextDocFormExtraction(fstrHTML, fdocURL){ var fregfom, fregact, fregmtd, fregipt, fregnam, fregval, fregrnc, farrFORM, farript, fstrTemp, fFORMlen, fiptlen, fbaseURL, fi, fj, fstrURL, fstrmtd, fstrname, fstrvalue; fregfom = /<FORM\s[^>]+>[\s\S]+?<\/FORM(?:\s[^>]+)?>/ig; fregact = /[\s\"\']action=(?:([\"\'])([^\"\'>]+)\1[^>]*|([^\"\' >]+)(?: [^>]*|))>/i; fregmtd = /[\s\"\']method=(?:([\"\'])([^\"\'>]+)\1[^>]*|([^\"\' >]+)(?: [^>]*|))>/i; fregipt = /<input\s(?:[^>]+[\s\"\'])?(?:name=[^>]+?value|value=[^>]+?name)=[^>]+>/ig; fregnam = /[\s\"\']name=(?:([\"\'])([^\"\'>]+)\1[^>]*|([^\"\' >]+)(?: [^>]*|))>/i; fregval = /[\s\"\']value=(?:([\"\'])([^\"\'>]+)\1[^>]*|([^\"\' >]+)(?: [^>]*|))>/i; fregrnc = /\r|\n|<\!--[^\!]+?<\/a>[^\!]*?-->/ig; farrFORM = new Array(); fstrTemp = ''; farrFORM = fstrHTML.replace(fregrnc, '').match(fregfom); if (farrFORM){ fFORMlen = farrFORM.length; fbaseURL = BaseURL(fstrHTML); if (!fbaseURL){ fbaseURL = fdocURL.replace(/\?[\s\S]*$/, '').replace(/[^\/]+$/,''); } for (fi = 0; fi<fFORMlen; fi++){ if (farrFORM[fi].search(/次|next|>>|≫|\>\;\>\;|\»\;|\=\"[0-9]+\"/i) != -1){ if (fregact.test(farrFORM[fi])){ fstrURL = RegExp.$2 + RegExp.$3; void fregmtd.test(farrFORM[fi]); fstrmtd = (fregmtd.test(farrFORM[fi])) ? (RegExp.$2 + RegExp.$3).toUpperCase() : 'GET'; farript = new Array(); farript = farrFORM[fi].match(fregipt); if (farript){ fiptlen = farript.length; fstrURL += '\?'; for (fj = 0; fj<fiptlen; fj++){ if (fregnam.test(farript[fj])){ fstrname = RegExp.$2 + RegExp.$3; void fregval.test(farript[fj]); fstrvalue = (fregval.test(farript[fj])) ? RegExp.$2 + RegExp.$3 : ''; fstrURL += fstrname + '=' + fstrvalue + '\&'; } } fstrURL = fstrURL.replace(/\&$/g, '').replace(/\?$/g, ''); } fstrTemp += UrlCorrect(fbaseURL, fstrURL, fdocURL) + ((fstrmtd.indexOf('POST') != -1) ? '\tPOST' : '') + '\r\n'; farript = null; } } } fstrTemp = fstrTemp.replace(/\r\n$/,''); return(fstrTemp); } else { return(''); } } /* HTML内のAnchorから次のページのURLを抽出 */ function NextDocAnchorExtraction(fstrHTML, fdocURL){ var freg6, freg8, fregrnc, farrAnchortag, fAnchortaglen, fstrTemp, fbaseURL, fi, fstrURL, fstrAll, farrTemp, fTemplen; freg6 = /<a\s(?:[^>]+[\s\"\'])?href=(?![\"\']?mailto\:|[\"\']?ftp\:|[\"\']?telnet\:|[\"\']?mms\:|[\"\']?rtsp\:|[\"\']?tel\:|[\"\']?javascript\:|[\"\']?news\:|[\"\']?file\:|[\"\']?\#[\"\' ])[^\\][\s\S]+?>[\s\S]*?<\/a\s*>|<area\s(?:[^>]+[\s\"\'])?href=(?![\"\']?mailto\:|[\"\']?ftp\:|[\"\']?telnet\:|[\"\']?tel\:|[\"\']?javascript\:|[\"\']?news\:|[\"\']?file\:|[\"\']?\#[\"\' ])[^\\][^>]*>/ig; freg8 = /[\s\"\']href=(?:([\"\'])([^\"\'>]+)\1[^>]*|([^\"\' >]+)( [^>]*|))>/i; fregrnc = /\r|\n|<\!--[^\!]+?<\/a>[^\!]*?-->/ig; farrAnchortag = new Array(); farrAnchortag = fstrHTML.replace(fregrnc, '').match(freg6); if (farrAnchortag){ fAnchortaglen = farrAnchortag.length; fstrTemp = ''; fstrAll = ''; fbaseURL = BaseURL(fstrHTML); if (fbaseURL){ if (!fdocURL){ fdocURL = fbaseURL; } } else { if (fdocURL){ fbaseURL = fdocURL.replace(/\?[\s\S]*$/, '').replace(/[^\/]+$/,''); } } for (fi = 0; fi<fAnchortaglen; fi++){ if (farrAnchortag[fi].search(/次|next|>>|≫|\>\;\>\;|\»\;|>[\[]?[0-9]+[\]]?<\/a|>[\[]?all[\]]?<\/a/i) != -1 && freg8.test(farrAnchortag[fi])){ fstrURL = (RegExp.$2 + RegExp.$3).replace(/\&\;/g, '\&'); if (fdocURL){ fstrURL = UrlCorrect(fbaseURL, fstrURL, fdocURL); } if (farrAnchortag[fi].search(/>[\[]?all[\]]?<\/a/i) != -1){ if (fstrAll == ''){ fstrAll = fstrURL; } } else { fstrTemp += fstrURL + '\r\n'; } } } fstrTemp = fstrTemp.replace(/\r\n$/,''); farrAnchortag = null; if (fstrAll != ''){ farrTemp = new Array(); farrTemp = fstrTemp.split('\r\n'); fTemplen = farrTemp.length; if (fTemplen == 1 && !farrTemp[0]){fTemplen = 0;} for (fi = 0; fi<fTemplen; fi++){ if (strDocList.indexOf('\n' + farrTemp[fi] + '\n') == -1){ strDocList += farrTemp[fi] + '\n'; } } farrTemp = null; return(fstrAll); } else { return(fstrTemp); } } else { return(''); } } /* ディレクトリ下判定 */ // 第1引数が第2引数のディレクトリ下にあれば true, そうでなければ false。 function DirectoryJudgment(fstrURL1, fstrURL2){ var fstr2; fstr2 = fstrURL2.replace(/^[a-zA-Z]+\:[\/]+/, '').replace(/\?[\s\S]*$/, '').replace(/[^\/]+$/, ''); return(fstrURL1.indexOf(fstr2) != -1); } /* URL,Referer,Cookie からファイルをダウンロードし、任意のパスに保存 */ function URLSaveAs(flnkURL, fReferer, fCookie, fPath){ var oXmlHttp, stream, adTypeBinary, adSaveCreateOverwrite, adModeReadWrite, fURL, fhttpmethod, Fname, SFpath, SFtype, fstatus, farrLoCookie, farrCookie, fstrCookie, fi; fURL = flnkURL.replace(/\#[^\#]*$/, ''); oXmlHttp = new ActiveXObject("MSXML2.ServerXMLHTTP"); if (fURL.search(/\tPOST$/) != -1){ fhttpmethod = 'POST'; fURL = fURL.replace(/\tPOST$/, '').replace(/\?[\s\S]*$/, ''); } else { fhttpmethod = 'GET'; } oXmlHttp.open(fhttpmethod, fURL, true, "", ""); farrLoCookie = new Array(); farrLoCookie = GetLocalCookie(flnkURL); fstrCookie = ''; if (farrLoCookie){ for (fi = 0; fi<farrLoCookie.length; fi++){ fstrCookie += farrLoCookie[fi].replace(/\;[^\;]*/g,'') + '\; '; } } else if (fCookie){ farrCookie = new Array(); farrCookie = CookieJudgment(fCookie, flnkURL, fReferer); if (farrCookie){ for (fi = 0; fi<farrCookie.length; fi++){ fstrCookie += farrCookie[fi].replace(/\;[^\;]*/g,'') + '\; '; } } } if (fstrCookie != ''){ oXmlHttp.setRequestHeader("Cookie", fstrCookie.replace(/\; $/, '')); } oXmlHttp.setRequestHeader("Referer", fReferer); oXmlHttp.send(); while (oXmlHttp.readyState < 2){WScript.Sleep(100);} fstatus = oXmlHttp.status; //pnir.OutputAddString(String(i + 1) + ' ' + fstatus + ' ' + flnkURL); if (fstatus == 200){ adTypeBinary = 1; adSaveCreateOverwrite = 2; adModeReadWrite = 3; stream = new ActiveXObject("ADODB.stream"); Fname = fURL.replace(/[^\/]*\//g, '').replace(/\?[\s\S]*$/, '').replace(/\.cgi$/, '\.htm'); if (!Fname){ Fname = 'index\.htm'; } SFpath = fPath + Fname; if (!SFpath){ oXmlHttp.abort(); } else { while (oXmlHttp.readyState < 4){ if (pnir.ShiftDown && pnir.CtrlDown && !pnir.AltDown){ oXmlHttp.abort(); return(false); } WScript.Sleep(100); } stream.type = adTypeBinary; stream.mode = adModeReadWrite; stream.open(); stream.write(oXmlHttp.responseBody); stream.savetofile(SFpath, adSaveCreateOverwrite); stream.close(); } } else if (fstatus == 503){ stream = null; oXmlHttp = null; WScript.Sleep(wait503); return(URLSaveAs(flnkURL, fReferer, fCookie, fPath)); } farrCookie = null; farrLoCookie = null; stream = null; oXmlHttp = null; return(true); } /* Imageフィルター */ //URL等から不要な画像を削除。 function IMGFilter(fstrImgList, fstrHTML, fdocURL, fblnDLink){ var fregDURL, fregHTML, farrFilter, farrImgList, fImglen, fi, fj, fFilterlen; fregDURL = /^$/; fregHTML = /^$/; if (fregDURL.test(fdocURL) || fregHTML.test(fstrHTML)){return('');} farrFilter = new Array(); //(DocumentURL, DocumentHTML, DirectLink, ImageURL, Leave) farrFilter[0] = new Array(undefined, /Powered by <a href=\"http\:\/\/www\.imgbbs\.jp\/">画像掲示板imgbbs\.jp<\/a> Engine/i, undefined, /\/img\/[0-9]+\./, true); farrFilter[1] = new Array(/imgbbs[0-9]+.artemisweb.jp/, undefined, undefined, /\/img\/l[0-9]+_/, true); farrFilter[2] = new Array(/joyful2ch\.cgi/, /<br>Edit\:<a href\=\'http\:\/\/www\.supra\.cx\/joyful2chMe\/index\.html\' target\=\'_top\'>KAZ\([0-9]+\)<\/a>/i, true, /\/img\/[0-9]+\./, true); farrFilter[3] = new Array(undefined, /<\!-- GazouBBS v[0-9]+\.[0-9]+ -->/, undefined, /\/(?:src|img)\//, true); farrFilter[4] = new Array(undefined, /<DIV ALIGN=\"RIGHT\"><B>FREE <A HREF\=\"http\:\/\/www\.big\.or\.jp\/~talk\/welcome\/welcome7\.cgi\">imgboard/i, undefined, /\/img-box\/img[0-9]+\./, true); farrFilter[5] = new Array(undefined, /<a href\=\"http\:\/\/zurubon\.strange-x\.com\/uploader\/\" target\=\"_blank\">ずるぽんあぷろだ/i, undefined, /\/img\//, true); farrFilter[6] = new Array(/^http\:\/\/freeup\.jp\/bbs\/\?id\=/, undefined, undefined, /\/upfile\/[0-9]+\./, true); farrFilter[7] = new Array(/^http\:\/\/imgb\.rentalcgi\.com\//, undefined, false, /http\:\/\/[a-z]\.rentalcgi\.com\/view/, true); farrFilter[8] = new Array(/^http\:\/\/[^\.\/\:]+\.[0-9]+\.bbs\.fc2\.com\//, undefined, undefined, /^http\:\/\/bbs[0-9]+\.fc2\.com\/\/bbs\/img\/_/, true); farrFilter[9] = new Array(/^http\:\/\/www\.akai-cup\.jp\/[^\/]+\/bbs\.cgi/, undefined, undefined, /^http\:\/\/www\.akai-cup\.jp\/[^\/]+\/bbsdata\/img\/[0-9]+\./, true); farrFilter[10] = new Array(/^http\:\/\/i-bbs\.sijex\.net\/image(?:Board|Disp)\.jsp\?id\=/, undefined, undefined, /^http\:\/\/image\.i-bbs\.sijex\.net\/bbs\/[^\/]+\/[0-9]+o\./, true); farrFilter[11] = new Array(undefined, /<a href=\"http\:\/\/sugachan\.dip\.jp\/download\/\" target=\"_blank\"><small>Sn Uploader<\/small>/, undefined, /\/(?:src|img)\/[^\/]+\.(?:bmp|jp[e]?g|gif|png)$/, true); farrFilter[12] = new Array(/http\:\/\/www\.anonib\.com\/_/, undefined, undefined, /\/images\/[0-9]+\/(?!_t)/, true); fFilterlen = farrFilter.length; farrImgList = new Array(); farrImgList = fstrImgList.split('\r\n'); fImglen = farrImgList.length; if (fImglen == 1 && !farrImgList[0]){return('');} for (fj = 0; fj<fFilterlen; fj++){ if ((farrFilter[fj][0] == null || farrFilter[fj][0].test(fdocURL)) && (farrFilter[fj][1] == null || farrFilter[fj][1].test(fstrHTML)) && (farrFilter[fj][2] == null || !(fblnDLink ^ farrFilter[fj][2]))){ for (fi = fImglen - 1; fi>=0; fi--){ if (farrImgList[fi] != '' && (farrFilter[fj][3] == null || (farrFilter[fj][3].test(farrImgList[fi]) ^ farrFilter[fj][4]))){ farrImgList[fi] = ''; } } } } farrFilter = null; return(farrImgList.join('\r\n').replace(/^(?:\r\n)+|(?:\r\n)+$|\n\r/g, '')); } function LinkFilter(fstrNextDocList, fstrHTML, fdocURL){ var fregDURL, fregHTML, farrFilter, farrNextDocList, fNextDocListlen, fi, fj, fFilterlen; fregDURL = /^$/; fregHTML = /^$/; if (fregDURL.test(fdocURL) || fregHTML.test(fstrHTML)){return('');} farrFilter = new Array(); //(DocumentURL, DocumentHTML, LinkURL, Leave) farrFilter[0] = new Array(undefined, /Powered by <a href=\"http\:\/\/www\.imgbbs\.jp\/">画像掲示板imgbbs\.jp<\/a> Engine/i, /new\.html|bbs\.cgi/, false); farrFilter[1] = new Array(/imgbbs[0-9]+.artemisweb.jp/, undefined, /search\.html|\/m\/|edit\.cgi|mode=(?:res|del|add_confirm)/, false); farrFilter[2] = new Array(/joyful2ch\.cgi/, /<br>Edit\:<a href\=\'http\:\/\/www\.supra\.cx\/joyful2chMe\/index\.html\' target\=\'_top\'>KAZ\([0-9]+\)<\/a>/i, /joyful2ch-hi.cgi/, false); farrFilter[3] = new Array(undefined, /<\!-- GazouBBS v[0-9]+\.[0-9]+ -->/, /denview=(?:view|admin)|mode=(?:idelreq|dodelreq|usrdel|admin|regist)|c2s1\.html/, false); farrFilter[4] = new Array(undefined, /<DIV ALIGN="RIGHT"><B>FREE <A HREF=\"http\:\/\/www\.big\.or\.jp\/~talk\/welcome\/welcome7\.cgi\">imgboard/i, /mode\=(?:keitai|search|disp_admin)/, false); farrFilter[5] = new Array(undefined, /<a href\=\"http\:\/\/zurubon\.strange-x\.com\/uploader\/\" target\=\"_blank\">ずるぽんあぷろだ/i, /page\=[0-9]+/, false); farrFilter[6] = new Array(/^http\:\/\/freeup\.jp\/bbs\/\?id\=/, undefined, /mode\=new|(?:new|search|upfile|kaisetu)\.cgi/, false); farrFilter[7] = new Array(/^http\:\/\/imgb\.rentalcgi\.com\/bbs\//, undefined, /mode\=(res|find|admin|regist)/, false); farrFilter[8] = new Array(/^http\:\/\/[^\.\/\:]+\.[0-9]+\.bbs\.fc2\.com\//, undefined, /\?pos\=[0-9]+/, true); farrFilter[9] = new Array(/^http\:\/\/www\.akai-cup\.jp\/[^\/]+\/bbs\.cgi/, undefined, /mode\=edtin|pick\=on|wrt\=new/, false); farrFilter[10] = new Array(/^http\:\/\/i-bbs\.sijex\.net\/imageBoard\.jsp\?id\=/, undefined, /\&count\=[0-9]+$|imageDisp.jsp/, true); farrFilter[11] = new Array(undefined, /<a href=\"http\:\/\/sugachan\.dip\.jp\/download\/\" target=\"_blank\"><small>Sn Uploader<\/small>/, /upload\.cgi|\/src\/[^/\.]+\.(?!bmp|jpg|jpeg|gif|png)/, false); farrFilter[12] = new Array(/http\:\/\/www\.anonib\.com\/_/, undefined, /index.php\?(?:t\=[0-9]+|b\=1\&g\=[0-9]+)$/, true); fFilterlen = farrFilter.length; farrNextDocList = new Array(); farrNextDocList = fstrNextDocList.split('\r\n'); fNextDocListlen = farrNextDocList.length; if (fNextDocListlen == 1 && !farrNextDocList[0]){return('');} for (fj = 0; fj<fFilterlen; fj++){ if ((farrFilter[fj][0] == null || farrFilter[fj][0].test(fdocURL)) && (farrFilter[fj][1] == null || farrFilter[fj][1].test(fstrHTML))){ for (fi = fNextDocListlen - 1; fi>=0; fi--){ if (farrNextDocList[fi] != '' && (farrFilter[fj][2] == null || (farrFilter[fj][2].test(farrNextDocList[fi]) ^ farrFilter[fj][3]))){ farrNextDocList[fi] = ''; } } } } farrFilter = null; return(farrNextDocList.join('\r\n').replace(/^(?:\r\n)+|(?:\r\n)+$|\n\r/g, '')); } /* Main1 */ function Main1(fdocURL, fDocReferrer){ if (pnir.ShiftDown && pnir.CtrlDown && !pnir.AltDown){ blnend = true; } if (!blnend && strDocList.indexOf('\n' + fdocURL.replace(/\tPOST$/, '').replace(/#[\s\S]*$/, '') + '\n') == -1){ var farrImgList, fstrHTML, fstrLinkList, fstrImgList, fImglen, fi, farrNextDocList, fNextDocListlen, fregext, fregcgi, fstrTemp; pnir.AddressBarString = '解析中 ' + String(++num) + ' ' + fdocURL; /* ページ内のリンクから画像URLを抽出 */ farrImgList = new Array(); fstrHTML = DocumentWriteHTMLConvert(DownloadHTML(fdocURL, fDocReferrer, DocCookie)); fstrLinkList = (URLExtraction(fstrHTML, fdocURL) + '\r\n' + FORMExtraction(fstrHTML, fdocURL) + '\r\n' + MetaExtraction(fstrHTML, fdocURL)).replace(/^\r\n|\r\n$|\n\r/g, '').replace(/\#[\s\S]*?$/gm, ''); fstrImgList = IMGFilter(IMGLinkExtraction(fstrLinkList), fstrHTML, fdocURL, true); farrImgList = fstrImgList.split('\r\n'); fImglen = farrImgList.length; if (fImglen == 1 && !farrImgList[0] || fdocURL.search(/http\:\/\/www\.anonib\.com\/_[^\/]+\/(?:index\.php\?b\=1\&g\=[0-9]+|)$/) != -1){fImglen = 0;} for (fi = 0; fi<fImglen; fi++){ fstrTemp = farrImgList[fi].replace(/\tPOST$/, ''); if (strImgList.indexOf('\n' + fstrTemp + '\n') == -1 && strImgList.indexOf('\n' + fstrTemp + '\tPOST\n') == -1){ strImgList += farrImgList[fi] + '\n'; } } farrImgList = null; /* ページ内の画像を抽出 */ farrImgList = new Array(); fstrImgList = IMGFilter(IMGTagExtraction(fstrHTML, fdocURL), fstrHTML, fdocURL, false); farrImgList = fstrImgList.split('\r\n'); fImglen = farrImgList.length; if (fImglen == 1 && !farrImgList[0]){fImglen = 0;} for (fi = 0; fi<fImglen; fi++){ fstrTemp = farrImgList[fi].replace(/\tPOST$/, ''); if (strImgList.indexOf('\n' + fstrTemp + '\n') == -1 && strImgList.indexOf('\n' + fstrTemp + '\tPOST\n') == -1 && fstrTemp.search(/small|thum|nail|s[0-9]*\.(?:bmp|jp[e]?g|gif|png)$/i) == -1){ strImgList += farrImgList[fi] + '\n'; } } strDocList += fdocURL.replace(/\tPOST$/, '').replace(/#[\s\S]*$/, '') + '\n'; /* 次のページを抽出して処理 */ farrNextDocList = new Array(); farrNextDocList = LinkFilter((NextDocFormExtraction(fstrHTML, fdocURL) + '\r\n' + NextDocAnchorExtraction(fstrHTML, fdocURL)).replace(/^\r\n|\r\n$|\n\r/g, '').replace(/\#[\s\S]*?$/gm, ''), fstrHTML, fdocURL).split('\r\n'); fNextDocListlen = farrNextDocList.length; if (fNextDocListlen == 1 && !farrNextDocList[0]){fNextDocListlen = 0;} for (fi = 0; fi<fNextDocListlen; fi++){ if (DirectoryJudgment(farrNextDocList[fi], fdocURL)){ Main1(farrNextDocList[fi], fdocURL); } } farrNextDocList = null; /* ページ内のリンク先を処理 */ fregext = /.+\.msi$|.+\.exe$|.+\.com$|.+\.bat$|.+\.cmd$|.+\.scr$|.+\.js$|.+\.vbs$|.+\.wsf$|.+\.jar$|.+\.pif$|.+\.pl$|.+\.reg$|.+\.zip$|.+\.lzh$|.+\.cab$|.+\.rar$|.+\.tgz$|.+\.bz2$|.+\.7z$|.+\.dgc$|.+\.sit$|.+\.iso$|.+\.pdf$|.+\.torrent$|.+\.si$|.+\.xpi$|.+\.vob$|.+\.avi$|.+\.mp[e]?g$|.+\.mp[ae]$|.+\.m1v$|.+\.mpv2$|.+\.mp2v$|.+\.mov$|.+\.r[am]$|.+\.ra[m]?$|.+\.rpm$|.+\.mk[av]$|.+\.dvr-ms$|.+\.as[fx]$|.+\.wvx$|.+\.wm[advxz]?$|.+\.wa[vx]$|.+\.cda$|.+\.mp[234]$|.+\.m3u$|.+\.mid[i]?$|.+\.rmi$|.+\.aif[cf]$|.+\.au$|.+\.snd$|.+\.bmp$|.+\.jp[e]?g$|.+\.gif$|.+\.png$|.+\.txt$|.+\.doc$|.+\.xls$/i; farrNextDocList = new Array(); farrNextDocList = LinkFilter(fstrLinkList, fstrHTML, fdocURL).split('\r\n'); fNextDocListlen = farrNextDocList.length; if (fNextDocListlen == 1 && !farrNextDocList[0]){fNextDocListlen = 0;} fregcgi = /\?[\s\S]*$/; for (fi = 0; fi<fNextDocListlen; fi++){ if (!fregext.test(farrNextDocList[fi].replace(fregcgi, '')) && (DirectoryJudgment(farrNextDocList[fi], fdocURL) || farrNextDocList[fi].indexOf('http\:\/\/imgb\.rentalcgi\.com\/view\/') != -1 || farrNextDocList[fi].search(/http\:\/\/upld\.dip\.jp\/[^\/]+\/ref\//) != -1)){ Main2(farrNextDocList[fi], fdocURL, 2); } } farrImgList = null; farrNextDocList = null; } } /* Main2 */ function Main2(fdocURL, fDocReferrer, flimit){ if (pnir.ShiftDown && pnir.CtrlDown && !pnir.AltDown){ blnend = true; } if (!blnend && flimit > 0 && strDocList.indexOf('\n' + fdocURL.replace(/\tPOST$/, '').replace(/#[\s\S]*$/, '') + '\n') == -1){ var farrImgList, fstrHTML, fstrLinkList, fstrImgList, fImglen, fi, farrNextDocList, fNextDocListlen, fregext, fregcgi, fstrTemp; pnir.AddressBarString = '解析中 ' + String(++num) + ' ' + fdocURL; /* ページ内のリンクから画像URLを抽出 */ farrImgList = new Array(); fstrHTML = DocumentWriteHTMLConvert(DownloadHTML(fdocURL, fDocReferrer, DocCookie)); fstrLinkList = (URLExtraction(fstrHTML, fdocURL) + '\r\n' + FORMExtraction(fstrHTML, fdocURL) + '\r\n' + MetaExtraction(fstrHTML, fdocURL)).replace(/^\r\n|\r\n$|\n\r/g, '').replace(/\#[\s\S]*?$/gm, ''); fstrImgList = IMGFilter(IMGLinkExtraction(fstrLinkList), fstrHTML, fdocURL, true); farrImgList = fstrImgList.split('\r\n'); fImglen = farrImgList.length; if (fImglen == 1 && !farrImgList[0] || fdocURL.search(/http\:\/\/www\.anonib\.com\/_[^\/]+\/(?:index\.php\?b\=1\&g\=[0-9]+|)$/) != -1){fImglen = 0;} for (fi = 0; fi<fImglen; fi++){ fstrTemp = farrImgList[fi].replace(/\tPOST$/, ''); if (strImgList.indexOf('\n' + fstrTemp + '\n') == -1 && strImgList.indexOf('\n' + fstrTemp + '\tPOST\n') == -1){ strImgList += farrImgList[fi] + '\n'; } } farrImgList = null; /* ページ内の画像を抽出 */ farrImgList = new Array(); fstrImgList = IMGFilter(IMGTagExtraction(fstrHTML, fdocURL), fstrHTML, fdocURL, false); farrImgList = fstrImgList.split('\r\n'); fImglen = farrImgList.length; if (fImglen == 1 && !farrImgList[0]){fImglen = 0;} for (fi = 0; fi<fImglen; fi++){ fstrTemp = farrImgList[fi].replace(/\tPOST$/, ''); if (strImgList.indexOf('\n' + fstrTemp + '\n') == -1 && strImgList.indexOf('\n' + fstrTemp + '\tPOST\n') == -1 && fstrTemp.search(/small|thum|nail|s[0-9]*\.(?:bmp|jp[e]?g|gif|png)$/i) == -1){ strImgList += farrImgList[fi] + '\n'; } } strDocList += fdocURL.replace(/\tPOST$/, '').replace(/#[\s\S]*$/, '') + '\n'; /* 次のページを抽出して処理 */ farrNextDocList = new Array(); farrNextDocList = LinkFilter((NextDocFormExtraction(fstrHTML, fdocURL) + '\r\n' + NextDocAnchorExtraction(fstrHTML, fdocURL)).replace(/^\r\n|\r\n$|\n\r/g, '').replace(/\#[\s\S]*?$/gm, ''), fstrHTML, fdocURL).split('\r\n'); fNextDocListlen = farrNextDocList.length; if (fNextDocListlen == 1 && !farrNextDocList[0]){fNextDocListlen = 0;} for (fi = 0; fi<fNextDocListlen; fi++){ if (DirectoryJudgment(farrNextDocList[fi], fdocURL)){ Main2(farrNextDocList[fi], fdocURL, flimit); } } farrNextDocList = null; /* ページ内のリンク先を処理 */ fregext = /.+\.msi$|.+\.exe$|.+\.com$|.+\.bat$|.+\.cmd$|.+\.scr$|.+\.js$|.+\.vbs$|.+\.wsf$|.+\.jar$|.+\.pif$|.+\.pl$|.+\.reg$|.+\.zip$|.+\.lzh$|.+\.cab$|.+\.rar$|.+\.tgz$|.+\.bz2$|.+\.7z$|.+\.dgc$|.+\.sit$|.+\.iso$|.+\.pdf$|.+\.torrent$|.+\.si$|.+\.xpi$|.+\.vob$|.+\.avi$|.+\.mp[e]?g$|.+\.mp[ae]$|.+\.m1v$|.+\.mpv2$|.+\.mp2v$|.+\.mov$|.+\.r[am]$|.+\.ra[m]?$|.+\.rpm$|.+\.mk[av]$|.+\.dvr-ms$|.+\.as[fx]$|.+\.wvx$|.+\.wm[advxz]?$|.+\.wa[vx]$|.+\.cda$|.+\.mp[234]$|.+\.m3u$|.+\.mid[i]?$|.+\.rmi$|.+\.aif[cf]$|.+\.au$|.+\.snd$|.+\.bmp$|.+\.jp[e]?g$|.+\.gif$|.+\.png$|.+\.txt$|.+\.doc$|.+\.xls$/i; farrNextDocList = new Array(); farrNextDocList = LinkFilter(fstrLinkList, fstrHTML, fdocURL).split('\r\n'); fNextDocListlen = farrNextDocList.length; if (fNextDocListlen == 1 && !farrNextDocList[0]){fNextDocListlen = 0;} fregcgi = /\?[\s\S]*$/; for (fi = 0; fi<fNextDocListlen; fi++){ if (!fregext.test(farrNextDocList[fi].replace(fregcgi, '')) && (DirectoryJudgment(farrNextDocList[fi], fdocURL) || farrNextDocList[fi].indexOf('http\:\/\/imgb\.rentalcgi\.com\/view\/') != -1 || farrNextDocList[fi].search(/http\:\/\/upld\.dip\.jp\/[^\/]+\/ref\//) != -1)){ Main2(farrNextDocList[fi], fdocURL, flimit - 1); } } } } /* ActiveDocumentClass */ function ActiveDocument(objDoc){ this.getComplete = GetDocument(objDoc); } function GetDocument(objDoc){ try { while (objDoc.activeElement.tagName.search(/FRAME$/i) != -1){ objDoc = objDoc.activeElement.contentWindow.document; } return(true); } catch(error) { return(false); } finally { ActiveDocument.prototype.self = objDoc; } } function BinaryToText(fbuffer, fcharset){ var stm, adTypeBinary, adTypeText; adTypeBinary = 1; adTypeText = 2; stm = new ActiveXObject("ADODB.Stream"); stm.Type = adTypeBinary; stm.Open(); stm.Write(fbuffer); stm.Position = 0; stm.Type = adTypeText; stm.Charset = fcharset; return (stm.ReadText()); } if (SScript){ if (sleipnir.API != null){ sleipnir.CreateObject("WScript.Shell").Run('\"' + sleipnir.ScriptFullName + '\"'); } else { void PopupDialogbox('このスクリプトを使用するには 「Sleipnirオプション|クライアント|全般」 の\r\n「スクリプトによるクライアントの操作を許可する」 にチェックを入れてください。\r\n\r\nなお、NT系のWindowsで上記操作を行うにはAdministrator権限が必要です。', 0, 16); } } else { /* ウィンドウが開かれていない場合は機能説明を表示 */ if (pnir.GetCount() == 0){ void PopupDialogbox('〜機能説明〜\r\n\r\n アクティブなウィンドウのページを解析して\r\n 各ページから画像へのリンクのURLを抽出します。', 0, 64); } else if(doc != null){ AD = new ActiveDocument(doc); if (AD.getComplete){ ActDoc = AD.self; ActDocURL = ActDoc.URL; strDocList = '\n'; strImgList = '\n'; num = 0; charset = ActDoc.charset; ext = ext.replace(/[\\\^\$\*\+\?\.\{\}\[\]\(\)\:\=\!\|\-]/g, '\\$&').replace(/^[\s]+|[\s]+$/g, '').replace(/[\s]+/g, '\$\|') + '\$'; regext = new RegExp(); regext.compile(ext, "i"); /* アクティブなページから Referrer を取得 */ DocReferrer = ActDoc.referrer; if (!DocReferrer){ DocReferrer = ActDocURL; } /* Cookie を取得 */ DocCookie = GetLocalCookie(ActDocURL); if (!DocCookie){ /* アクティブなページから Cookie を取得 */ if (ActDocURL.search(/^http\:\/\/upld\.dip\.jp\//) != -1){ DocCookie = GetRESPHeader("Set-Cookie", 'http\:\/\/upld\.dip\.jp\/agreement\.php\?answer=yes_18', 'http\:\/\/upld\.dip\.jp\/agreement\.php'); } else if (ActDocURL.search(/^http\:\/\/moe\.homelinux\.net\//) != -1){ DocCookie = GetRESPHeader("Set-Cookie", 'http\:\/\/moe\.homelinux\.net\/accept2\.php\?over18\=1\&accept\=\%82\%CD\%82\%A2', 'http\:\/\/moe\.homelinux\.net\/rule\.php'); } else { DocCookie = (ActDocURL.search(/^http[s]?\:\/\//) != -1) ? GetRESPHeader("Set-Cookie", ActDocURL, DocReferrer) : null; } } /* Main1 */ Main1(ActDocURL, DocReferrer); pnir.AddressBarString = pnir.URL; if (!blnend){ if (strImgList == '\n'){ void PopupDialogbox('画像ファイルは抽出できませんでした。', 0, 64); } else { /* 画像URLの抽出結果を新しいウィンドウで一覧表示 */ strdocTitle = doc.title; if (!strdocTitle){ strdocTitle = ActDocURL; } strHTMLlist = ''; arrImgList = new Array(); arrImgList = strImgList.replace(/^\n|\n$/g, '').split('\n'); arrImgList.sort().reverse(); imgListlen = arrImgList.length; for (i = 0; i<imgListlen; i++){ strHTMLlist += '<A href=\"' + arrImgList[i].replace(/\tPOST$/, '') + '\"' + ((arrImgList[i].search(/\tPOST$/) != -1) ? ' httpmethod = \"POST\"' : '') + '>' + arrImgList[i].replace(/\tPOST$/, '') + '<\/A><BR\r\n>'; if ((i + 1) % 100 == 0){ strHTMLlist += String(i + 1) + ' 個<BR\r\n>'; } } nid = pnir.NewWindow('about:blank',true); ndoc = pnir.GetDocumentObject(nid); nwindow = pnir.GetWindowObject(nid); ndoc.open(); ndoc.writeln('<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01 Transitional\/\/EN\">\r\n' + '<!-- ' + ScriptName + ' -->\r\n' + '<HTML lang=\"ja\"><HEAD>\r\n' + '<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text\/html\; charset=UTF-16\">\r\n' + '<META HTTP-EQUIV=\"Content-Style-Type\" CONTENT=\"text\/css\">\r\n' + '<META NAME=\"Author\" CONTENT=\"yuyushiki\">'); if (DocCookie){ for (i = 0; i<DocCookie.length; i++){ ndoc.writeln('<META HTTP-EQUIV=\"Set-Cookie\" CONTENT=\"' + DocCookie[i].replace(/\r|\n/g, '') + '\">'); } } ndoc.writeln('<BASE target=\"_blank\">\r\n' + '<LINK rev=\"made\" title=\"' + ((PnirLang == 'japanese') ? '配布元' : 'Script download site') + '\" href=\"http:\/\/yuyulab\.hp\.infoseek\.co\.jp\/index\.html\">\r\n' + '<LINK rev=\"parent\" title=\"' + ((PnirLang == 'japanese') ? '抽出元' : 'Source page') + '\" href=\"' + ActDocURL + '\">\r\n' + '<TITLE>' + strdocTitle + '<\/TITLE>\r\n' + '<style type=\"text\/css\">\r\n' + '<!--\r\n' + 'BODY{font-family:\"MS PGothic\"\,sans-serif\; font-size:10pt\; background-color:\#CCCCFF\; color:black\; margin-left:10px\; margin-right:10px\;}\r\n' + '-->\r\n' + '<\/style>\r\n' + '<\/HEAD>\r\n' + '<BODY><DIV>' + strHTMLlist + '<\/DIV><\/BODY><\/HTML>'); ndoc.close(); if (PopupDialogbox(imgListlen + ' 個の画像URLが抽出されました。\r\n画像を今すぐダウンロードしますか?\r\n\r\n抽出結果リストに選択範囲があると、その画像だけダウンロードできます。', 0, 32 + 4) == 6){ var sel_obj, fso, objFolder, objShell, SFpath, imgsrc, filename; try { sel_obj = ndoc.selection.createRange(); //選択範囲 } catch(e) { sel_obj = null; } if (sel_obj && ndoc.selection.type != 'None' && sel_obj.htmlText){ arrImgList = null; arrImgList = new Array(); arrImgList = URLExtraction(sel_obj.htmlText).split('\r\n'); imgListlen = arrImgList.length; } fso = new ActiveXObject("Scripting.FileSystemObject"); if (defDir){ objFolder = null; } else { objShell = WScript.CreateObject("Shell.Application"); objFolder = objShell.BrowseForFolder(0, 'ファイルを保存するフォルダを指定して下さい。', 0x0040); } if (defDir || objFolder){ SFpath = ((objFolder) ? objFolder.Items().Item().Path : defDir.replace(/[\/\\]+$/, '')) + '\\'; /* ファイルをダウンロードし、任意のパスに保存 */ for (i = 0; i<imgListlen; i++){ if (pnir.ShiftDown && pnir.CtrlDown && !pnir.AltDown){ void PopupDialogbox('ダウンロードを中止しました。', 10, 64); break; } pnir.AddressBarString = 'ダウンロード中 ' + String(i + 1) + ' \/ ' + imgListlen; imgsrc = arrImgList[i].replace(/\#[^\#]*$/, ''); if (imgsrc.search(/^http/) != -1){ filename = SFpath + imgsrc.replace(/[^\/]*\//g, '').replace(/\?[\s\S]*$/, '').replace(/\.cgi$/, '\.htm').replace(/\//g, '\\'); if (!uwagaki && fso.FileExists(filename)){ n = PopupDialogbox(filename.replace(/[^\\]*\\/g, '') + '\r\n\r\n は既に存在します。上書きしますか?', 0, 32 + 3); if (n == 7){ continue; } else if (n != 6){ break; } } if (!URLSaveAs(imgsrc, ActDocURL, DocCookie, SFpath)){break;} } } pnir.AddressBarString = pnir.URL; } objShell = null; objFolder = null; } arrImgList = null; nwindow = null; ndoc = null; nid = null; } } DocCookie = null; ActDoc = null; } else { ErrorBeep(2); } AD = null; } /* 終了処理 */ doc = null; id = null; pnir = null; }
- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)
★ - 「画像BBSのURL抽出&保存」 【Sleipnir用スクリプト全般】 - 由々識 02/03-21:49 No.339
[説明]「画像BBSのURL抽出&保存.. 【Sleipnir用スクリプト全般】 - 由々識 02/03-21:51 No.340
Re: [説明]「画像BBSのURL抽出&.. 【Sleipnir用スクリプト全般】 - 夏姫 12/05-11:21 No.357
Re: [説明]「画像BBSのURL抽出&.. 【Sleipnir用スクリプト全般】 - 由々識 12/09-18:39 No.362
Re: [説明]「画像BBSのURL抽出&.. 【Sleipnir用スクリプト全般】 - 夏姫 12/27-13:40 No.376
Re: [説明]「画像BBSのURL抽出&.. 【Sleipnir用スクリプト全般】 - 由々識 12/28-01:13 No.377