您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
ведет историю выставленных лотов, показывает ее на странице выставления лота. также можно добавить лоты из протокола передач
// ==UserScript== // @name LNK_lotHistory // @namespace LNK // @version 1.3 // @description ведет историю выставленных лотов, показывает ее на странице выставления лота. также можно добавить лоты из протокола передач // @include *heroeswm.ru/auction_new_lot.php* // @include *heroeswm.ru/auction_accept_new_lot.php* // @include *heroeswm.ru/pl_transfers.php?id=* // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // ==/UserScript== (function() { 'use strict'; function getValue(varName, defaultValue) { if (defaultValue == undefined) { defaultValue = ''; } return GM_getValue(varName, defaultValue); } // getValue function setValue(varName, theValue) { GM_setValue(varName, theValue); } // setValue function deleteValue(valueToDel) { GM_deleteValue(valueToDel); } // deleteValue function getPage(aURL) { var xhr = new XMLHttpRequest(); xhr.open('GET', aURL, false); xhr.overrideMimeType('text/html; charset=windows-1251'); xhr.send(); if (xhr.status != 200) { return ( 'Ошибка ' + xhr.status + ': ' + xhr.statusText ); } else { return ( xhr.responseText ); } } // getPage function getNewLot() { //https://www.heroeswm.ru/auction_accept_new_lot.php?msg_type=1&new_lot_id=118155890&pl_id=5558048&sign=96c52af4ebaa8c7e334dec6b9b7fb1ff var paramsS = location.search; var paramsV = new URLSearchParams(paramsS); var id = parseInt(paramsV.get("new_lot_id")); if (id) { return id;} else { alert('Не могу определить номер лота(. Обратиттесь к автору скрипта'); return false; } } // getNewLot function getLotName(lotNum) { var curLot = getPage('/auction_lot_protocol.php?' + lotNum); var n = curLot.indexOf('лот #'); if (n < 0) {return false;} curLot = curLot.substr(n+5); curLot = curLot.replace(/\s*\<.*?\>\s*/g, " "); curLot = curLot.replace(/\s*\[.*?\]\s*/g, " "); n = curLot.indexOf(' по '); if (n < 0) {return false;} curLot = curLot.substring(0,n); n = curLot.indexOf('Выставлено на продажу'); curLot = curLot.substr(n+22).trim(); n = curLot.indexOf(' шт.'); if (n>0) { curLot = curLot.substring(0,n-2).trim(); } return curLot; } // getLotName function addLot(lotName,lotNum) { var lots = []; var lotNums = []; var lotsVar = getValue('lotHistory_lots'); if (lotsVar == '') {lots = [];} else {lots = JSON.parse(getValue('lotHistory_lots'));} if (!(lots.length > 0)) {lots = [];} var found = false; var add = false; for (var i = 0; i < lots.length; i++) { if (lots[i][0] == lotName) { found = true; break; } } if (found) { if (!lots[i].includes(lotNum)) { lots[i].splice(1, 0, lotNum); if (lots[i].length > (maxLotNum+1)) { lots[i].pop(); } add = true; } } else { lotNums = [lotName,lotNum]; lots.push(lotNums); add = true; } setValue('lotHistory_lots',JSON.stringify(lots)); return add; } // addLot function getAnyHistory() {getLotHistory(this.innerHTML.trim());} function getAllHistory() { var lots = []; var lotNums = []; var i, i1; var lotTbl = document.createElement('table'); lotTbl.align="center"; lotTbl.width="970px"; lotTbl.style.borderCollapse = 'collapse'; lotTbl.setAttribute('border',2); lotTbl.setAttribute('cellpadding',4); var tabText = ''; var lotsText = getValue('lotHistory_lots',''); if (lotsText != '') { lots = JSON.parse(lotsText); lots.sort(); } for (i = 0; i < lots.length; i++) { tabText += '<tr>'; lotNums = lots[i]; for (i1 = 0; i1 < lotNums.length; i1++) { if (i1 == 0) { tabText +='<td id="lot'+i+'" style = "cursor: pointer;"> '+lotNums[i1]+' </td>'; } else { tabText +='<td> <a href="auction_lot_protocol.php?id='+lotNums[i1]+'">'+lotNums[i1]+'</a> </td>'; } } tabText += '</tr> '; } if (tabText == '') { tabText = '<tr><td> Список лотов пуст. Список заполняется автоматически при торговле или кнопкой внизу страницы протокола передач </td></tr>'; } lotTbl.innerHTML = '<tbody>' + tabText + '</tbody>'; document.body.insertBefore(lotTbl,document.getElementById('paramTbl')); for (i = 0; i < lots.length; i++) { document.getElementById('lot'+i).onclick = getAnyHistory; } return true; } // getAllHistory function lotInfo(lotNum,lotName) { var curLot = getPage('/auction_lot_protocol.php?id=' + lotNum); var n = curLot.indexOf('лот #'); var zaBoyRem = ''; if (n < 0) {return false;} curLot = curLot.substr(n+5); n = curLot.indexOf('art_info.php?id='); var lotVal = curLot.substring(n,curLot.indexOf('"',n)); lotVal = lotVal.substr(lotVal.indexOf('=')+1); n = lotVal.indexOf('&'); if (n>0) { lotVal = lotVal.substring(0,n); } //alert(lotVal);alert(n); if (lotNum != curLot.substring(0,curLot.indexOf('<'))) return '<td>Не совпадает номер лота</td>'; curLot = curLot.replace(/\s*\<.*?\>\s*/g, " "); var lotState = sale; if (curLot.indexOf('Товар распродан') > 0) {lotState = sold;} if (curLot.indexOf('Торги закончены') > 0) {lotState = ret;} n = curLot.indexOf('Выставлено на продажу'); var putOn = 'Выставлено ' + curLot.substr(n-22,17); var res = 'Еще в продаже'; n = curLot.indexOf('Товар распродан'); if (lotState == sold) {res = 'Продано ' + curLot.substr(n-22,17);} n = curLot.indexOf('Торги закончены'); if (lotState == ret) {res = 'Возврат ' + curLot.substr(n-22,17);} var prochka = 0, prochkaFull = 0, prochkaS = ''; n = curLot.indexOf('['); if (n>0) { if (isNaN(curLot[n+1])) { n = curLot.indexOf('[',n+1); } if (isNaN(curLot[n+1])) { n = curLot.indexOf('[',n+1); } prochka = parseInt(curLot.substring(n+1,curLot.indexOf('/'))); prochkaS = curLot.substring(n,curLot.indexOf(']',n)+1); prochkaFull = prochkaS.substring(prochkaS.indexOf('/')+1,prochkaS.indexOf(']')); } var Qty = 1; n = curLot.indexOf(' шт. по '); if (n>0) { Qty = parseInt(curLot.substr(n-2,2).trim()); } var price = 0; n = curLot.indexOf(' по '); if (n>0) { price = parseInt(curLot.substring(n+4,curLot.indexOf('золота',n)-1).trim()); } var zaBoy = ''; if (lotVal) { if (unsafeWindow.calcZaboyR) { zaBoyRem = unsafeWindow.calcZaboyR(lotVal, prochka, prochkaFull, price); if (zaBoyRem.zaBoy) { zaBoyRem = ' / ' + zaBoyRem.zaBoy + ' P'; } else { zaBoyRem = ''; } } } if (prochka > 0) { zaBoy = ' (' + Math.round(price/prochka) + ' за бой'+zaBoyRem+') '; } return ('<td><a href="auction_lot_protocol.php?id='+lotNum+'">'+lotNum+'</a> ' + putOn + ' ' + Qty + ' шт. ' + prochkaS + ' ' + price + ' за шт.' + zaBoy + ' -> ' + res + '</td>'); }//lotInfo function addHistory() { var marketPage = getPage(location.href); var lotName, lotNum; var i = 0; var found = false; var n = marketPage.indexOf('Продан '); if (n < 0) { alert('Не могу найти протокол'); return false;} marketPage = marketPage.substr(n-10); marketPage = marketPage.replace(/\s*\<.*?\>\s*/g, " "); marketPage = marketPage.replace(/\s*\[.*?\]\s*/g, " "); while ((n = marketPage.indexOf('Продан ')) >=0) { marketPage = marketPage.substr(n); found = false; if ((n = marketPage.indexOf('предмет')) == 7) { lotName = marketPage.substring(n+9,marketPage.indexOf('"',n+10)); found = true; } if ((n = marketPage.indexOf('сертификат')) == 7) { lotName = marketPage.substring(n,marketPage.indexOf(' за ',n)); lotName = lotName.replace('сертификат на постройку 1% дома в','Сертификат 1% для'); found = true; } if (found) { n = marketPage.indexOf('лот #'); n += 5; lotNum = marketPage.substring(n,marketPage.indexOf(' ',n)); marketPage = marketPage.substr(n); //alert('-'+lotName+'-'+lotNum+'-'); if (addLot(lotName,lotNum)) {i++;} } else { marketPage = marketPage.substr(1); } } alert('Добавлено лотов: '+i); return true; }//addHistory function getHistory() { var lotName = document.getElementById('sel').options[document.getElementById('sel').selectedIndex].text; var n = lotName.indexOf('/'); if (n > 0) { if (!isNaN(lotName[n-2])) {n--;} if (!isNaN(lotName[n-2])) {n--;} lotName = lotName.substring(0,n-1); } n = lotName.indexOf('('); if (n > 0) { lotName = lotName.substring(0,n-1); } n = lotName.indexOf('['); if (n > 0) { lotName = lotName.substring(0,n-1); } lotName = lotName.trim(); getLotHistory(lotName); } // getHistory function getLotHistory(lotName) { var waitMes = document.createElement('a'); waitMes.innerHTML = '<b> <br> Получаем данные. Подождите... </b>'; waitMes.style = 'background-color: #A6DFF0; box-shadow: 0 0 3px rgba(0,0,0,1);'+ 'position: fixed; top: 50%; right: 50%; width: 200px; height: 70px; z-index: 9555; text-align: center;'; document.body.append(waitMes); var lots = []; var lotNums = []; var i, i1; var lotTbl = document.createElement('table'); lotTbl.id = 'lotTbl'; lotTbl.align="center"; lotTbl.width="970px"; lotTbl.style.borderCollapse = 'collapse'; lotTbl.setAttribute('border',2); lotTbl.setAttribute('cellpadding',4); var tabText = '<tbody> '; var lotsText = getValue('lotHistory_lots',''); if (lotsText != '') { lots = JSON.parse(lotsText); lots.sort(); } var found = false; for (i = 0; i < lots.length; i++) { lotNums = lots[i]; if (lotNums[0]) { lotNums[0] = lotNums[0].replace('икат 1% для','икат для'); } if (lotNums[0] == lotName) { for (i1 = 0; i1 < lotNums.length; i1++) { tabText += '<tr>'; if (i1 == 0) { tabText += '<td> '+lotName+' </td>'; } else { tabText += lotInfo(lotNums[i1],lotName); } tabText += '</tr> '; } found = true; break; } } tabText += '</tbody>'; if (found) {lotTbl.innerHTML = tabText;} else {lotTbl.innerHTML = '<tbody><tr><td> Таких лотов нет в сохраненных данных. Список заполняется автоматически при торговле или кнопкой внизу страницы протокола передач </td></tr></tbody>';} var prevTbl = document.getElementById("lotTbl"); if (prevTbl) {prevTbl.remove();} document.getElementById('paramTbl').before(lotTbl); waitMes.remove(); return true; } // getLotHistory var sale = 0, sold = 1, ret = 2; var maxLotNum = 10; function main() { var paramTbl; if (location.href.indexOf('pl_transfers.php?id=') > 0) { paramTbl = document.createElement('table'); paramTbl.innerHTML = '<tbody> '+ '<tr> '+ '<td align="center"> <input type="button" id="butAddHistory" value="Добавить в историю продаж лоты с этой страницы" /></td>'+ '</tr> '+ '</tbody>'; paramTbl.id="paramTbl"; paramTbl.align="center"; paramTbl.width="970px"; paramTbl.style.borderCollapse = 'collapse'; paramTbl.setAttribute('border',2); paramTbl.setAttribute('cellpadding',4); document.body.append(paramTbl); document.getElementById('butAddHistory').onclick = addHistory; return 0; } if (location.href.indexOf('auction_new_lot.php') > 0) { paramTbl = document.createElement('table'); paramTbl.innerHTML = '<tbody> '+ '<tr> '+ '<td align="center"> <input type="button" id="butGetHistory" value="Посмотреть историю лота" /></td>'+ '<td align="center"> <input type="button" id="butGetAllHistory" value="Посмотреть все сохраненные лоты" /></td>'+ '</tr> '+ '</tbody>'; paramTbl.id="paramTbl"; paramTbl.align="center"; paramTbl.width="970px"; paramTbl.style.borderCollapse = 'collapse'; paramTbl.setAttribute('border',2); paramTbl.setAttribute('cellpadding',4); document.body.append(paramTbl); document.getElementById('butGetHistory').onclick = getHistory; document.getElementById('butGetAllHistory').onclick = getAllHistory; return 0; } if (location.href.indexOf('auction_accept_new_lot.php') > 0) { var lotNum = getNewLot(); if (!lotNum) {return 0;} var lotNumCRC = document.querySelector('a[href*="auction_lot_protocol.php?id="]'); lotNumCRC = lotNumCRC.href.slice(lotNumCRC.href.indexOf('id=')); var lotName = getLotName(lotNumCRC); addLot(lotName,lotNum); paramTbl = document.createElement('table'); paramTbl.innerHTML = '<tbody> '+ '<tr> <td align="center"> Добавлено в историю продаж: '+lotName+' (лот '+lotNum+')</td> </tr> '+ '</tbody>'; paramTbl.align="center"; paramTbl.width="970px"; paramTbl.style.borderCollapse = 'collapse'; paramTbl.setAttribute('border',2); paramTbl.setAttribute('cellpadding',4); document.body.append(paramTbl); return 0; } return 0; } // main main(); })();