May 4, 2022
[v0.0.5] Скрипт отслеживания новых NFT на letmespeak.org - LMS_tracker
- добавлена новая колонка "Freq" - частота отображения NFT;
- улучшен внешний вид карточек;
- теперь новые NFT корректно добавляются в начало страницы и не двигают страницу вниз;
- при нажатии на карточку, она откроется в новом окне;
- убраны лишние элементы со страницы;
- немного оптимизировал код, для уменьшения нагрузки на браузер.
LMS_traker - это скрипт упрощающий отслеживание новых NFT на letmespeak.org. Каждые 20-30сек скрипт получает с сервера обновленную страницу с NFT по критериям: "uncommon", "по возрастанию цены". Страница содержит первые 12 NFT. Если появились новые NFT, относительно прошлой страницы, то они будут выделены зеленым цветом.
Карточка NFT содержит основные параметры:
- Name - имя;
- Talent - талант;
- Visa - оставшаяся виза/общая виза;
- Invites - количество неизрасходованных инвайтов;
- Price - стоимость;
- Freq - частота появления данного NFT на странице. Этот параметр увеличивается на единицу после каждого добавления новой страницы. Он полезен тем, что, когда добавляется новый NFT, вы можете увидеть, действительно ли этот NFT новый. Freq хранится в вашей текущей вкладке, т.е. если вы закроете вкладку, то этот параметр всех NFT обнулится.
- Открой страницу https://market.letmespeak.org/
- Открой Developer Tools (Ctrl+Shift+J (Сhrome) or Ctrl+Option+J (Safari))
- Выбери вкладку Console, вставь туда код и нажми Enter
let lastItemsList=[];function sendFetch(){let e=[];fetch("https://api-crypto.letmespeak.org/api/escrow?sortBy=LowestPrice&page=1&rarity=2").then(t=>t.json()).then(t=>{e.push(t.items),e=e.reduce((t,e)=>t.concat(e)),function(t){let c=[];t.forEach(t=>{sessionStorage.getItem("FQ_ITEMS")||sessionStorage.setItem("FQ_ITEMS",JSON.stringify({null:null}));let e=JSON.parse(sessionStorage.getItem("FQ_ITEMS")),a=!1;for(var i in e)t.id==i&&(a=!0,e[i]+=1);a||(e[t.id]=1),sessionStorage.setItem("FQ_ITEMS",JSON.stringify(e));let s,r="",l=t.nft.details.attributes;s=!lastItemsList.includes(t.id),c.push(t.id),l.forEach(t=>{if(["name","visa_total","talent","invites_left"].includes(t.trait_type))switch(t.trait_type){case"name":r+=' <div class="item-attr" style="color:rgb(0, 0, 0);"> <span>Name:</span> <div class="Attribute_value__ENcJL Attribute_compact__eY5_v">'+t.value+"</div> </div> ";break;case"visa_total":r+=' <div class="item-attr" style="color:rgb(255, 122, 0);"> <span>Visa:</span> <div class="Attribute_value__ENcJL Attribute_compact__eY5_v">'+l[8].value+"/"+t.value+"</div> </div> ";break;case"talent":r+=' <div class="item-attr"> <span>Talent:</span> <div class="Attribute_value__ENcJL Attribute_compact__eY5_v">'+t.value+"</div> </div> ";break;case"invites_left":r+=' <div class="item-attr"> <span>Invites:</span> <div class="Attribute_value__ENcJL Attribute_compact__eY5_v">'+t.value+"</div> </div> "}}),itemHTML=' <a target="_blank" href="https://market.letmespeak.org/#/escrow/'+t.id+'" class="card-item ant-col-xs-12 ant-col-md-8" style="padding-left: 8px; padding-right: 8px; '+(s?"background: rgba(143, 255, 143, .6);":"")+'"> '+r+' <div class="item-attr"> <div class="ml025" style="color:rgb(39, 117, 202);"> <span>Price</span> <div class="Attribute_value__ENcJL Attribute_compact__eY5_v">'+t.price+'</div> </div> </div> <div class="item-attr"> <div class="ml025" style="color:rgb(39, 117, 202);"> <span>Freq</span> <div class="Attribute_value__ENcJL Attribute_compact__eY5_v">'+e[t.id]+"</div> </div> </div> </a> ",document.querySelector(".main-items .table").insertAdjacentHTML("afterbegin",itemHTML)}),document.querySelector(".main-items .table").insertAdjacentHTML("afterbegin",'<div class="card-time-download" style="width:100%">'+(new Date).toUTCString()+"</div>"),lastItemsList=c,c=[]}(e)})}document.querySelector(".ant-row-stretch ").innerHTML='<div class="cards-wrap"></div>',document.querySelector("main").innerHTML=' <style> .item-attr { text-align: center; width: 100px; } .card-item { padding:5px; display: flex; border: 1px solid #aff274; } .table { display: flex; flex-wrap: wrap; } .main-items { max-width: 1150px; margin: 0 auto; } </style> <div class="main-items cards-wrap"> <div class="table"> </div> </div> ';let counterForTimer=0,timerFetchItems=setTimeout(function t(){if(10<counterForTimer){document.querySelectorAll(".card-item").forEach((t,e)=>{110<e&&t.remove()});let t=document.querySelectorAll(".card-time-download");t[t.length-1].remove()}counterForTimer+=1,sendFetch(),timerFetchItems=setTimeout(t,1e4*Math.random()+2e4)},0);Обновления публикуются на канале @letcryptowalk
ETH/BSC: 0x0ef7DA106736CCD6C7Bffdaf45c147000E36a3bE SOL: 2JqRFi8fQfXwL8rpiVfUnQ3EscYcavfFvnwBz9MEADy9 TRC20: TA2FuWfKVkuhkkSxcik3MFjHPxLoBfT48T