get json data
let url = 'https://www.steempunks.xyz/graphql';
let getOp = (id)=> {return {
"operationName": null,
"query": `{\n getMyNFTDetail(SteempunksNFTInput: {id: ${id}}) {\n success\n steempunksNFT {\n id\n score\n ranking\n rarity\n owner_account\n }\n }\n}\n`,
"variables":{}
};}
let call = (id) => fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(getOp(id)),
}).then(res=>res.json()).then(res=>res.data.getMyNFTDetail?res.data.getMyNFTDetail.steempunksNFT:{});
let start = 0;
let end = 0;
let results = [];
let buffer = [];
results = [];
buffer = [];
(async ()=>{
for(let k=0;k<50;k++){
start = k*200;
end = Math.min(200+k*200, 9999);
for(let i=start;i<=end;i++){
buffer.push(call(i));
}
await Promise.all(buffer).then(res=>results.push(...res));
buffer = [];
await new Promise(r=>setTimeout(r, 1000));
console.log('k', k);
}
})();
console.log(results);
parsing data
const fs = require("fs");
let ori = require("./out.json");
let lpad = (s, len = 20, char = " ") => s.toString().padStart(len, char);
let rpad = (s, len = 20, char = " ") => s.toString().padEnd(len, char);
let print = (...s) => console.log(lpad(s[0]), ...s.slice(1));
let line = (len, char = "=") => console.log(rpad("", len, char));
line(40);
print("PACKS INFO");
line(40);
print("TOTAL PACKS : ", ori.length / 10);
let notyet = ori.filter((x) => x.owner_account == null);
print("SELL PACKS : ", (ori.length - notyet.length) / 10);
print("REMAIN PACKS : ", notyet.length / 10);
line(40);
print("NFTs MINTING INFO");
line(40);
print("NFTs : ", ori.length);
let common = ori.filter((x) => x.rarity.indexOf("C") == 0);
let rare = ori.filter((x) => x.rarity.indexOf("R") == 0);
let epic = ori.filter((x) => x.rarity.indexOf("E") == 0);
let legendary = ori.filter((x) => x.rarity.indexOf("L") == 0);
let c1 = ori.filter(
(x) => x.rarity.indexOf("C") == 0 && x.owner_account != null
);
print(
"COMMON NFTs : ",
common.length - c1.length,
"/",
c1.length,
"/",
common.length
);
let r1 = ori.filter(
(x) => x.rarity.indexOf("R") == 0 && x.owner_account != null
);
print(
"RARE NFTs : ",
rare.length - r1.length,
"/",
r1.length,
"/",
rare.length
);
let e1 = ori.filter(
(x) => x.rarity.indexOf("E") == 0 && x.owner_account != null
);
print(
"EPIC NFTs : ",
epic.length - e1.length,
"/",
e1.length,
"/",
epic.length
);
let l1 = ori.filter(
(x) => x.rarity.indexOf("L") == 0 && x.owner_account != null
);
print(
"LEGENDARY NFTs : ",
legendary.length - l1.length,
"/",
l1.length,
"/",
legendary.length
);
line(40);
print("BUY PACKS TOP 10");
line(40);
// let EXCEPT_IDS = ["null", "happyberrysboy", "donekim", "realmankwon"];
let EXCEPT_IDS = ["null"];
let buy_buffer = {};
for (let r of ori) {
buy_buffer[r.owner_account] = buy_buffer[r.owner_account]
? buy_buffer[r.owner_account] + 1
: 1;
}
let buy_buffer2 = [];
for (let kv of Object.entries(buy_buffer)) {
buy_buffer2.push({ id: kv[0], nfts: kv[1] });
}
buy_buffer2 = buy_buffer2.filter((x) => !EXCEPT_IDS.includes(x.id));
buy_buffer2.sort((a, b) => b.nfts - a.nfts);
for (let i = 0; i < 10; i++) {
console.log(
lpad(buy_buffer2[i].id),
" : ",
buy_buffer2[i].nfts / 10,
"packs"
);
}
line(40);
print("AVG PACKS BUY");
line(40);
let avg =
buy_buffer2.reduce((prev, curr) => {
return prev + curr.nfts;
}, 0) /
buy_buffer2.length /
10;
print("JOINED STEEMIANs", buy_buffer2.length);
print("AVG BUY PACKs", avg);
// console.log(buy_buffer2);
line(40);
print("Has Legendary Account");
line(40);
let legen_buffer = {};
for (let r of l1) {
legen_buffer[r.owner_account] = legen_buffer[r.owner_account]
? legen_buffer[r.owner_account] + 1
: 1;
}
let legen_buffer2 = [];
for (let kv of Object.entries(legen_buffer)) {
legen_buffer2.push({ id: kv[0], nfts: kv[1] });
}
legen_buffer2 = legen_buffer2.filter((x) => !EXCEPT_IDS.includes(x.id));
legen_buffer2.sort((a, b) => b.nfts - a.nfts);
for (let i = 0; i < legen_buffer2.length; i++) {
console.log(lpad(legen_buffer2[i].id), " : ", legen_buffer2[i].nfts, "nfts");
}