Skip to content

Instantly share code, notes, and snippets.

@drewhaines
Created January 1, 2022 00:17
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save drewhaines/804a46aa332cdaca2eab07a86411d4d2 to your computer and use it in GitHub Desktop.
Save drewhaines/804a46aa332cdaca2eab07a86411d4d2 to your computer and use it in GitHub Desktop.
Download all CNFT images from an NFT Collection via Node.js
import { BlockFrostAPI } from "@blockfrost/blockfrost-js"
import download from "download"
const API = new BlockFrostAPI({
projectId: "YOUR_BLOCKFROST_API_KEY", // see: https://blockfrost.io
})
try {
const assets = await API.assetsPolicyByIdAll(
"POLICY_ID"
)
const start = 0
const batchSize = 10
const total = 10001
for (let i = start; i < total; i += batchSize) {
console.log(i + 1, i + batchSize)
const assets10 = assets.slice(i + 1, i + batchSize)
const ipfsLinks = await Promise.all(
assets10.map(async (asset) => {
const assetData = await API.assetsById(asset.asset)
const ipfsId = assetData?.onchain_metadata?.image?.split("ipfs://")?.[1]
return {
id: assetData?.onchain_metadata?.name?.split("GOAT Tribe ")?.[1],
image: `https://infura-ipfs.io/ipfs/${ipfsId}`,
}
})
)
const filterLinks = ipfsLinks.filter((item) => !!item.id)
console.log(filterLinks)
;(async () => {
await Promise.all(
filterLinks.map((link) =>
download(link?.image, "./images", { filename: `${link.id}.png` })
)
)
})()
// wait a few seconds to not overload max requests
await new Promise((resolve) => setTimeout(resolve, 4000))
}
console.log("done")
} catch (err) {
console.log("error", err)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment