您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
nadirkitap isbn13 search
// ==UserScript== // @name test3 // @namespace http://tampermonkey.net/ // @version 0.7 // @description nadirkitap isbn13 search // @author aek // @match https://www.desibona.com/* // @license MIT // @noframes // @icon https://t3.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://desibona.com&size=64 // @grant GM.xmlHttpRequest // @grant GM_setValue // @grant GM_getValue // ==/UserScript== (function () { var sellerId = "25233"; var description = ` `; var description2 = `Türkiye'nin e-pazaryeri platformu.`; description = description2; //description = undefined; if (location.href.startsWith("https://www.desibona.com/baston-bebek-arabasi-puset")) { var serializeForm = function () { return Array.from(new FormData(document.getElementsByName("ekle")[0]), function (field) { return field.map(encodeURIComponent).join('='); }).join('&'); }; var oldState; setTimeout(function() { oldState = serializeForm(document.getElementsByName("ekle")[0]); }, 1000); var oldState = serializeForm(); console.log(oldState); window.addEventListener('beforeunload', function (e) { console.log(serializeForm(document.getElementsByName("ekle")[0])); if (oldState && oldState != serializeForm(document.getElementsByName("ekle")[0])) { e.returnValue = 'Emin misin?'; } }); var junks = document.querySelectorAll("p.a14"); for (var index = 0; index < junks.length; index++) { var junk = junks[index]; junk.parentElement.removeChild(junk); } junks = document.querySelectorAll("div[class='col-xs-12 col-md-6']"); function removeJunk(junkPanel) { for (var i = 0; i < 6; i++) { junkPanel.children[3].parentNode.removeChild(junkPanel.children[3]); } } removeJunk(junks[0]); removeJunk(junks[1]); var list = document.querySelector(".member-list"); list.innerHTML = ""; var li = document.createElement("li"); li.appendChild(document.getElementsByName("guzelciltli")[0].parentNode); list.appendChild(li); li = document.createElement("li"); li.appendChild(document.getElementsByName("birincibaski")[0].parentNode); list.appendChild(li); li = document.createElement("li"); li.appendChild(document.getElementsByName("imzali")[0].parentNode); list.appendChild(li); var junk = document.querySelector("span[style='font-size:10px;']"); junk.parentElement.removeChild(junk); var nomargins = document.querySelectorAll("p.col-md-12.no-padding, .form-control.all-input"); for (var index = 0; index < nomargins.length; index++) { nomargins[index].style.margin = 0; nomargins[index].style.padding = 0; } var q = document.querySelectorAll("div.margin-top10.col-md-12.col-xs-12.no-padding"); q[2].parentNode.insertBefore(q[2], q[1]); //document.querySelector("div.padding15.col-sm-12.hidden-xs.mbl-display-n").scrollIntoView(); if (description) { var input = document.getElementById("wmd-input"); if (!input.value.endsWith(description)) input.value += description; } document.getElementsByName("rafkodu")[0].scrollIntoView(); } var pageState = restoreSavedObject("PageState", "pageState"); var links = document.querySelectorAll("a.seller-link[href$='" + sellerId + ".html']"); function findParent(el, tagName) { while ((el = el.parentElement) && el.tagName.toLowerCase() !== tagName); return el; } if (links.length == 1 && pageState.self) { var url = findParent(findParent(links[0], "div"), "div").querySelector("a").href; var id = url.substring(url.lastIndexOf("-kitap") + 6, url.length - 5); location.href = "https://www.desibona.com/zimba-makinesi" + id; return; } for (var index = 0; index < links.length; index++) { var url = findParent(findParent(links[index], "div"), "div").querySelector("a").href; var id = url.substring(url.lastIndexOf("-kitap") + 6, url.length - 5); var li = findParent(findParent(links[index], "li"), "li"); var parent = li.parentElement; parent.removeChild(li); parent.prepend(li); var div = document.createElement("div"); div.className = "col-md-12 no-padding text-right"; div.innerHTML = '<br><br><a href="https://www.desibona.com/cift-kisilik-nevresim-takimi' + id + '" style="color:red;">Düzenle</a>'; li.querySelector("div.col-md-4.col-xs-12.col-sm-12").appendChild(div); } var pendingRequestCount = 0; var successfulRequestCount = 0; window.addEventListener('beforeunload', function (e) { if (pendingRequestCount) { e.returnValue = 'Emin misin?'; } }); function restoreSavedObject(objectType, storageKey) { var obj = eval("new " + objectType + "();"); var s = GM_getValue(storageKey); Object.assign(obj, s); return obj; } function IsbnInfo(isbnstr) { if (isbnstr && isbnstr.length == 13) { var t = 0, c; var digits = isbnstr.substr(3, 9); for (var i = 0; i < 9; i++) { t += (10 - i) * parseInt(digits[i]); } c = 11 - t % 11; this.isbn = digits + ((c = (11 - t % 11) % 11) == 10 ? 'X' : c); this.isbn13 = isbnstr; } else if (isbnstr && isbnstr.length == 10) { var sum = 38; for (var i = 0; i < 9; i++) { sum += parseInt(isbnstr[i]) * ((i % 2) ? 1 : 3); } var checkDigit = 10 - (sum % 10); if (checkDigit == 10) { checkDigit = 0; } this.isbn = isbnstr; this.isbn13 = "978" + isbnstr.substring(0, 9) + checkDigit; } else { this.isbn = this.isbn13 = this.title = "Unknown"; } } IsbnInfo.prototype.save = function (title) { this.title = title; GM_setValue("isbnInfo", this); }; var isbnInfo = restoreSavedObject("IsbnInfo", "isbnInfo"); function AmazonBookInfo(/*isbn, title, author, publisher, pageSize, width, heigth*/) { // this.isbn = isbn; // this.title = title; // this.author = author; // this.publisher = publisher; // this.pageSize = pageSize; // this.width = width; // this.heigth = heigth; } AmazonBookInfo.prototype.save = function (storage) { GM_setValue(storage, this); }; AmazonBookInfo.parseFromResponse = function (response, type) { var dom = new DOMParser().parseFromString(response.responseText, "text/html"); var info = new AmazonBookInfo(); info.title = dom.getElementById("productTitle").innerText.replace("(Turkish Edition)", "").trim(); var q = dom.querySelector(".author.notFaded a.a-link-normal.contributorNameID") || dom.querySelector(".author.notFaded a.a-link-normal"); info.author = q ? q.innerText.trim() : ""; q = dom.getElementsByClassName("rpi-icon book_details-publisher"); info.publisher = q.length ? q[0].parentNode.parentNode.lastElementChild.innerText.trim() : ""; q = dom.getElementsByClassName("rpi-icon book_details-fiona_pages"); info.pageCount = q.length ? q[0].parentNode.parentNode.lastElementChild.innerText.trim().split(" ")[0] : ""; q = dom.getElementsByClassName("rpi-icon book_details-dimensions"); if (q.length) { var dimensions = q[0].parentNode.parentNode.lastElementChild.innerText.trim().split(" x "); if (type == 1) { info.width = dimensions[0]; info.heigth = dimensions[2]; } else { info.width = (Math.floor((parseFloat(dimensions[0]) * 2.54) * 100) / 100).toString(); info.heigth = (Math.floor((parseFloat(dimensions[2]) * 2.54) * 100) / 100).toString(); } } else { info.width = ""; info.heigth = ""; } return info; }; function PageState() { } PageState.prototype.save = function () { GM_setValue("pageState", this); }; PageState.prototype.restore = function () { var _this = this; var inputs = document.querySelectorAll("input[data-stateful]"); for (var index = 0; index < inputs.length; index++) { let input = inputs[index]; let storage = input.getAttribute("data-stateful") || input.id.substring(3); input.addEventListener("change", function () { _this[storage] = this.type == "checkbox" ? this.checked : this.value; _this.save(); }); var value = this[storage]; if (value) { if (typeof value == "boolean") { input.checked = value; } else { input.value = value; } } } }; var div = document.createElement("div"); div.innerHTML = ` <div> <form action="kitapara.php" method="GET" name="searchbook" id="frmSearch" > <input type="hidden" name="ara" value="aramayap" /> <input type="hidden" name="tip" value="kitap" /> <input type="hidden" name="satici" value="` + sellerId + `" id="hdnSeller"> <input type="hidden" name="siralama" value="fiyatartan" id="hdnSort"> <span> <input id="chktitleChecked" type="checkbox" data-stateful /> <input style="min-width: 400px;" id="txttitle" name="kitap_Adi" type="text" data-stateful /> <input type="button" onclick='document.getElementById("kelime").value = document.getElementById("txttitle").value;document.getElementById("search-form").submit(); event.preventDefault(); return false;' value="Search" /> </span> <span> <input id="chkauthorChecked" type="checkbox" data-stateful /> <input id="txtauthor" name="yazar" type='text' data-stateful /> </span> <span> <input id="chkpublisherChecked" type="checkbox" data-stateful /> <input id="txtpublisher" name="yayin_Evi" type="text" data-stateful /> </span> <span> <input id="chkself" type="checkbox" data-stateful /> <label for="chkself">Kendimde</label> <input type="submit" value="ARA" /> </span> </div> <div> <a href="https://www.desibona.com/baston-bebek-arabasi-puset>Baston Bebek Arabası</a> <a href="https://www.desibona.com/oyun-parki-besik-yatak">park yatak</a> <a href="https://www.desibona.com/mama-sandalyesi">Mama sandalyesi</a> <a href="https://www.desibona.com/cift-kisilik-nevresim-takimi">Çift kişilik nevresim takımı</a> <a href="https://www.desibona.com/cift-kisilik-yatak-ortusu">çift kişilik yatak örtüsü</a> <a href=" https://www.desibona.com/kopek-mamasi">Köpek maması</a> <input type="button" value="` + isbnInfo.title + `" onclick='window.open("https://www.google.com.tr/search?q=kitap+` + isbnInfo.title + `", "google");' /> <input id="chkpreferComtr" type="checkbox" data-stateful /> <label for="chkpreferComtr">Prefer desibona.com</label> <input id="chkpasteIsbn" type="checkbox" data-stateful /> <label for="chkpasteIsbn">PasteIsbn</label> </form> </div>`; document.title = isbnInfo.title; document.body.firstElementChild.appendChild(div); var isbnInput = document.querySelector('.form-control.all-input[name="isbn"]'); if (isbnInput && pageState.pasteIsbn) { isbnInput.value = isbnInfo.isbn13; } var rafKodu = document.getElementsByName("rafkodu"); if (rafKodu.length) { rafKodu[0].setAttribute("data-stateful", "shelfCode"); } pageState.restore(); document.getElementById("chkpreferComtr").addEventListener("change", function () { fillSearchForm(); }); function submitForm() { document.getElementById("txttitle").disabled = !document.getElementById("chktitleChecked").checked; document.getElementById("txtauthor").disabled = !document.getElementById("chkauthorChecked").checked; document.getElementById("txtpublisher").disabled = !document.getElementById("chkpublisherChecked").checked; document.getElementById("hdnSeller").disabled = !document.getElementById("chkself").checked; document.getElementById("frmSearch").submit(); } var regexIsbn = /\d{13}/; var regexIsbn10 = /\d{10}/; document.getElementById("frmSearch").onsubmit = function (e) { e.preventDefault(); var inputs = this.querySelectorAll("input[type=text]"); for (var index = 0; index < inputs.length; index++) { var input = inputs[index]; var str = input.value; var match; if (str && (match = str.match(regexIsbn))) { input.value = input.value.replace(match[0], ""); input.dispatchEvent(new Event("change")); searchIsbn(match[0]); return false; } else if (str && (match = str.match(regexIsbn10))) { input.value = input.value.replace(match[0], ""); input.dispatchEvent(new Event("change")); searchIsbn(match[0]); return false; } } submitForm(); return false; }; function fillSearchForm() { var main, other; var info0 = restoreSavedObject("AmazonBookInfo", "amazonInfo0"); var info1 = restoreSavedObject("AmazonBookInfo", "amazonInfo1"); if (document.getElementById("chkpreferComtr").checked) { main = info1; other = info0; } else { main = info0; other = info1; } var input = document.getElementById("txttitle"); pageState.title = input.value = main.title || other.title || ""; input = document.getElementById("txtauthor"); pageState.author = input.value = main.author || other.author || ""; input = document.getElementById("txtpublisher"); pageState.publisher = input.value = main.publisher || other.publisher || ""; pageState.save(); } function searchIsbn(isbnstr) { var lisbnInfo = new IsbnInfo(isbnstr); GM_setValue("amazonInfo0", undefined); GM_setValue("amazonInfo1", undefined); pendingRequestCount = 2; successfulRequestCount = 0; document.title = "Loading"; var onProgress = function (state, type, result) { switch (state) { case "info": document.title = result; break; case "error": alert("info: amazon" + (type == 0 ? ".com" : "com.tr") + " failed"); if (!--pendingRequestCount) { if (!successfulRequestCount) { alert("Search yielded no results!"); lisbnInfo.save(); location.reload(); } else { lisbnInfo.save(restoreSavedObject("AmazonBookInfo", "amazonInfo" + (type == 0 ? "1" : "0")).title || "No Title?"); fillSearchForm(); submitForm(); } return; } break; case "complete": successfulRequestCount++; var info = AmazonBookInfo.parseFromResponse(result); info.save("amazonInfo" + type); if (!--pendingRequestCount) { lisbnInfo.save(info.title || restoreSavedObject("AmazonBookInfo", "amazonInfo" + (type == 0 ? "1" : "0")).title || "No Title?"); fillSearchForm(); submitForm(); return; } break; } }; fetchAmazon(lisbnInfo, 0, onProgress); fetchAmazon(lisbnInfo, 1, onProgress); } function fetchAmazon(isbInfo, type, onProgress) { var url; if (!type) { url = "https://amazon.com/dp/" + isbInfo.isbn; } else { url = "https://amazon.com.tr/dp/" + isbInfo.isbn; } GM.xmlHttpRequest({ method: "GET", url: url, onload: function (response) { if (response.status !== 404) { onProgress("complete", type, response); return; } else { onProgress("info", type, "Searching..."); if (type === 0) { url = "https://desibona.com/" + isbInfo.isbn; url = "https://desibona.com=" + isbInfo.isbn13; } else { url = "https://desibona.com" + isbInfo.isbn13; } GM.xmlHttpRequest({ method: "GET", url: url, onload: function (response) { if (response.status === 404) { onProgress("error", type); return; } var dom = new DOMParser().parseFromString(response.responseText, "text/html"); var q = dom.querySelectorAll("div.s-result-item a.a-link-normal"); if (q.length < 3) { onProgress("error", type); return; } onProgress("info", type, "Loading2.."); url = q[0].href; if (!type) { url = url.replace(location.origin, "https://www.amazon.com"); } else { url = url.replace(location.origin, "https://www.amazon.com.tr"); } GM.xmlHttpRequest({ method: "GET", url: url, onload: function (response) { onProgress("complete", type, response); return; } }); } }); return; } } }); } var timerId; var input = ""; function restartTimeout() { if (timerId) { clearTimeout(timerId); } timerId = setTimeout(function () { input = ""; }, 100); } document.addEventListener('keydown', function (e) { restartTimeout(); if (e.key == "Enter" && input.length == 13) { searchIsbn(input); e.preventDefault(); return false; } else if (e.key - '0' >= 0 && e.key - '0' <= 9) { input += e.key; } else { input = ""; } return true; }); })();