代码实现速卖通最低价 Aliexpress min price

  1. // ==UserScript==
  2. // @name Aliexpress min price
  3. // @namespace https://www.chinaobd2.com
  4. // @version 0.3
  5. // @author Mateusz Kula
  6. // @description Update minimum available price
  7. // @icon https://kulam.pl/script/aliexpress-min%20price/icon.jpg
  8. // @icon64 https://kulam.pl/script/aliexpress-min%20price/icon.jpg
  9. // @supportURL https://kulam.pl/kontakt
  10. // @match https://*.aliexpress.com/*
  11. // @match http://*.aliexpress.com/*
  12. // @match http://aliexpress.com/*
  13. // @match https://chinaobd2.com/*
  14. // @grant GM_registerMenuCommand
  15. // @grant unsafeWindow
  16. // @homepageURL https://ukobd2.com
  17.  
  18.  
  19. // ==/UserScript==
  20.  
  21. var displaySwitch = true; //show min price [true/false]
  22. var replaceSwitch = false; //deprecated! replace aliexpress min price [true/false]
  23. var alertSwitch = true; //show min price and quantity, [true/false]
  24. var showCheapestVariantName = true;//show names of cheaper item
  25.  
  26. var cheapestVariantName = [];
  27. var skuProducts = unsafeWindow.runParams.data.skuModule.skuPriceList;
  28. if (alertSwitch || displaySwitch || showCheapestVariantName) {
  29. var first = true;
  30. for (var counter = 0; counter < skuProducts.length; counter++) {
  31. if (+skuProducts[counter].skuVal.availQuantity > 0) {
  32.  
  33. var price = null;
  34. if (skuProducts[counter].skuVal.skuActivityAmount && skuProducts[counter].skuVal.skuActivityAmount.value) { price = 'skuActivityAmount'; }
  35. else {
  36. price = 'skuAmount';
  37. }
  38.  
  39. if (first)//set first available item price as min
  40. {
  41. var mini = +skuProducts[counter].skuVal[price].value;
  42. var quantity = +skuProducts[counter].skuVal.availQuantity;
  43. first = false;
  44. cheapestVariantName.push(skuProducts[counter].skuAttr);
  45. }
  46. else {
  47. if (+skuProducts[counter].skuVal[price].value <= mini)//found lower/the same price price
  48. {
  49. if (+skuProducts[counter].skuVal[price].value < mini)//lower price
  50. {
  51. mini = +skuProducts[counter].skuVal[price].value; quantity = +skuProducts[counter].skuVal.availQuantity;
  52. cheapestVariantName = [];
  53. cheapestVariantName.push(skuProducts[counter].skuAttr);
  54. }
  55. else//same price
  56. {
  57. quantity += +skuProducts[counter].skuVal.availQuantity;
  58. cheapestVariantName.push(skuProducts[counter].skuAttr);
  59. }
  60. }
  61. }
  62. }
  63. }
  64. }
  65. var cheapestProductsNames = parseItemsAttr(cheapestVariantName);
  66. if (displaySwitch && +mini > 0) {
  67. var productPriceCurrent = document.querySelector('.product-info div.product-price-current,.product-info .uniform-banner-box-price');
  68. var miniNode = document.createElement("span");
  69. miniNode.innerHTML = ('<span id="aliminprice" style="cursor: help;">[' + mini + '] </span>');
  70. miniNode.title = cheapestProductsNames;
  71. productPriceCurrent.insertBefore(miniNode, productPriceCurrent.childNodes[0]);
  72. }
  73.  
  74. function parseItemsAttr(cheapestVariantName) {
  75. //arrayOfItems example: ["14:200002984#Shape28;5:361386;154:1433"]
  76. var items = cheapestVariantName.map(parseItemAttr);
  77. /*
  78. items example:
  79. [
  80. [
  81. {"Id":"14","ValueId":"200002984"},{"Id":"5","ValueId":"361386"},{"Id":"154","ValueId":"1433"}
  82. ]
  83. ]
  84. */
  85. var productsNamesArray = items.map(findProductNames);
  86. //productNames example: ["Shape28:M:3PCS","Shape30:L:3PCS"]
  87. var productNamesS = productsNamesArray.join(", \n");
  88. return productNamesS;
  89.  
  90. }
  91. function parseItemAttr(e, i) {
  92. //e example: 14:200002984#Shape28;5:361386;154:1433
  93. const properties = e.split(";").map(formatProp);
  94. return properties;
  95. }
  96. function formatProp(e, i) {
  97. var temp = e.split(":");
  98. var prop = { Id: temp[0], ValueId: temp[1].split("#")[0] }
  99. return prop;
  100. }
  101. function findProductNames(e, i) {
  102. //e example: {"Id":"14","ValueId":"200002984"},{"Id":"5","ValueId":"361386"},{"Id":"154","ValueId":"1433"}
  103. var productNames = e.map(productName)
  104. return productNames.join(" + ");
  105. }
  106. function productName(e, i) {
  107. //e example: {"Id":"14","ValueId":"200002984"}
  108. //search
  109. var productSKUPropertyList = unsafeWindow.runParams.data.skuModule.productSKUPropertyList;
  110. var productSKUPropertyListElement = productSKUPropertyList.find(({ skuPropertyId }) => skuPropertyId == e.Id);
  111. var skuPropertyValues = productSKUPropertyListElement.skuPropertyValues.find(({ propertyValueId }) => propertyValueId == e.ValueId);
  112. return skuPropertyValues.propertyValueDisplayName;
  113. }
  114.  
  115. function formatSkuAttr(skuAttr) {
  116. let name = "";
  117. const specs = skuAttr.split(';');
  118. specs.forEach(function (spec) {
  119. const specName = spec.split('#');
  120. if (specName.length == 2) { name += specName[1] + " | "; }
  121. else { name += "name not found "; }
  122. });
  123. return name
  124. }
  125.  
  126. GM_registerMenuCommand('Ali min price', function find() {
  127. if (alertSwitch) {
  128. var minPriceAlertMessage = "";
  129. if (first == true) { minPriceAlertMessage = "not found\n"; }
  130. else {
  131. minPriceAlertMessage = "minimum price: " + mini + "\nquantity: " + quantity + "\n Variants:\n" + cheapestProductsNames;
  132. }
  133. alert(minPriceAlertMessage);
  134. }
  135.  
  136. }, 'q');
posted @ 2022-11-15 21:58  hilong911  阅读(90)  评论(0编辑  收藏  举报