I am trying to fetch nft-metadata for the nfts added on my platform. Some Nfts contains ipfs-urls as their tokenURIs and I need a mechanism to differentiate them from normal-urls (location-addressed urls).
I was using is-ipfs , but it gives false returns even for valid ipfs-urls!
if (mtokenUri) {
var res
var data
console.log("### ipfs url check ###")
console.log(isIPFS.urlOrPath("ipfs://bafybeihbsysdkemc3kyylegtfopkrcfiih4exnasoql2q36fb4zawlrwhy/volcano.json"))
// false for "ipfs://bafybeihbsysdkemc3kyylegtfopkrcfiih4exnasoql2q36fb4zawlrwhy/volcano.json"
//this is not very reliable
if (isIPFS.urlOrPath(mtokenUri)) {
//gives false even for a valid ipfs-url
console.log('inside erc721 ipfs: ')
isIpfsUrl = true
console.log("*** 721 isIpfs url ***")
console.log(isIPFS.urlOrPath(mtokenUri))
// example ccid = 'QmPzhc9ezphJ85qJWfVVpeHkPieDJznpYduGhMYD7Z4Ac9'
const cid_eg2 =
'bafybeihbsysdkemc3kyylegtfopkrcfiih4exnasoql2q36fb4zawlrwhy/volcano.json'
try {
res = await ipfs.cat(mtokenUri)
// data = await res.json()
console.log(res)
} catch (error) {
console.log(error)
}
//shows:cat {<suspended>}
} else {
//do normal fetch
try {
res = await fetch(mtokenUri)
data = await res.json()
console.log('erc721 normal fetch')
console.log("*** Normal fetch data *** ")
console.log(data)
_imageUrl = data.image
_name = data.name
_description = data.description
} catch (error) {
console.log(error)
}
}
}
is there any way to fetch both normal-urls and ipfs-urls ?
Here’s the stackoverflow link for the same –
https://stackoverflow.com/questions/71036840/how-do-i-differentiate-b-w-a-ipfs-url-path-content-addressed-from-normal-url