Quixel Megascans 即将收费 , 可以用脚本批量爬取把资产免费入库,本人亲测可用

Megascans官网: https://quixel.com/megascans/home

项目地址:https://gist.github.com/jamiephan/0c04986c7f2e62d5c87c4e8c8ce115fc

 

使用教程如下:

  1. 复制js代码 (run.js)
  2. 登录 https://quixel.com
  3. 点击跳转此网页  https://quixel.com/megascans/collections
  4. 打开谷歌浏览器 ,按F12,切换到 “Console”
  5. 粘贴js代码(粘贴不进,可能需要根据提示要输入2个代码单词“allow pasteing”即可).
  6. 输入代码后按住“enter”, 等待一会页面让您确认,点击“ok”
  7. 可能一次只能执行1000条,会提示网管错误,作者大概花了1个小时才全下来了。

最新js代码如下:

 

((async (startPage = 0, autoClearConsole = true) => {

const getCookie = (name) => {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(‘;’).shift();
}

const callCacheApi = async (params = {}) => {
const defaultParams = {
page: 0,
maxValuesPerFacet: 1000,
hitsPerPage: 1000,
attributesToRetrieve: [“id”, “name”].join(“,”)
}
const response = await fetch(“https://proxy-algolia-prod.quixel.com/algolia/cache”, {
“headers”: {
“x-api-key”: “2Zg8!d2WAHIUW?pCO28cVjfOt9seOWPx@2j”
},
“body”: JSON.stringify({
url: “https://6UJ1I5A072-2.algolianet.com/1/indexes/assets/query?x-algolia-application-id=6UJ1I5A072&x-algolia-api-key=e93907f4f65fb1d9f813957bdc344892”,
params: new URLSearchParams({ …defaultParams, …params }).toString()
}),
“method”: “POST”,
})
return await response.json()
}

const callAcl = async ({ id, name }) => {
const response = await fetch(“https://quixel.com/v1/acl”, {
“headers”: {
“authorization”: “Bearer ” + authToken,
“content-type”: “application/json;charset=UTF-8”,
},
“body”: JSON.stringify({ assetID: id }),
“method”: “POST”,
});
const json = await response.json()
if (json?.isError) {
console.error(` –> **UNABLE TO ADD ITEM** Item ${id} | ${name} (${json?.msg})`)
} else {
console.log(` –> ADDED ITEM Item ${id} | ${name}`)
}
}

const callAcquired = async () => {
const response = await fetch(“https://quixel.com/v1/assets/acquired”, {
“headers”: {
“authorization”: “Bearer ” + authToken,
“content-type”: “application/json;charset=UTF-8”,
},
“method”: “GET”,
});
return await response.json()
}

// 1. Check token exist, quixel API needs it
console.log(“-> Checking Auth API Token…”)
let authToken = “”
try {
const authCookie = getCookie(“auth”) ?? “{}”
authToken = JSON.parse(decodeURIComponent(authCookie))?.token
if (!authToken) {
return console.error(“-> Error: cannot find authentication token. Please login again.”)
}
} catch (_) {
return console.error(“-> Error: cannot find authentication token. Please login again.”)
}

// 2. Get all currently acquired items
console.log(“-> Get Acquired Items…”)
const acquiredItems = (await callAcquired()).map(a => a.assetID)

// 3. Get total count of items
console.log(“-> Getting Total Number of Pages….”)
const { nbPages: totalPages, hitsPerPage: itemsPerPage, nbHits: totalItems } = await callCacheApi()

console.log(“-> ==============================================”)
console.log(`-> Total # of items: ${totalItems}`)
console.log(`-> ${totalPages} total pages with ${itemsPerPage} per page`)
console.log(`-> Total Items to add: ${(totalItems – acquiredItems.length)}.`)
console.log(“-> ==============================================”)

if (!confirm(`Click OK to start adding ${(totalItems – acquiredItems.length)} items in your account.`)) return

// Loop
for (let pageIdx = startPage || 0; pageIdx < totalPages; pageIdx++) {
console.log(`-> ======================= PAGE ${pageIdx + 1}/${totalPages} START =======================`)

console.log(“-> Getting Items from page ” + (pageIdx + 1) + ” …”)

const { hits: items } = await callCacheApi({ page: pageIdx })

console.log(“-> Adding non-acquired items…”)

// Filter out owned items
const unownedItems = items.filter(i => !acquiredItems.includes(i.id))
const aclPromises = unownedItems.map(callAcl)

await Promise.all(aclPromises)
console.log(`-> ======================= PAGE ${pageIdx + 1}/${totalPages} COMPLETED =======================`)
if (autoClearConsole) console.clear() // Fix the issue that too much log hangs the console. Set autoClearConsole = false to keep the logs
}

console.log(“-> Getting new acquired info…”)
// Get acquired items again
const newItemsAcquired = (await callAcquired()).length
const newTotalCount = (await callCacheApi()).nbHits

console.log(`-> Completed. Your account now have a total of ${newItemsAcquired} out of ${newTotalCount} items.`)

alert(`-> Your account now have a total of ${newItemsAcquired} out of ${newTotalCount} items.\n\nIf you find some items missing, try refresh the page and run the script again.`)
})())

1.本站所有资源收集于互联网,仅用于学习和研究,若用于违法,与本站无关,仅限学习交流请勿用于商业用途。 2.会员在本站下载的VIP素材后,只拥有使用权,著作权归原作者及49vps所有。 3.VIP素材,未经合法授权,会员不得以任何形式发布、传播、复制、转售该素材,否则一律封号处理。 4.如果素材损害你的权益,请联系客服删除。
49资源网 » Quixel Megascans资产批量入库脚本