-
-
Save PieterSpruijt/265a474e5c4cde21e3204d7d76bea5dd to your computer and use it in GitHub Desktop.
| /** | |
| * @file Fetch data from Magic Eden Rpc without getting cloudflare captchas | |
| * @author Pieter Spruijt <[email protected]> | |
| */ | |
| /* | |
| First install the package | |
| npm install cloudscraper | |
| */ | |
| const cloudscraper = require('cloudscraper'); | |
| // Create the fetchUrl function | |
| const fetchUrl = async (url) => { | |
| const delay = m => new Promise((resolve, reject) => { setTimeout(_ => resolve(), m) }); | |
| try { | |
| const response = await cloudscraper.get(url).catch(async (err) => { | |
| if (err.statusCode) return; | |
| await delay(1000); | |
| return fetchUrl(url); | |
| }); | |
| if (!response) return; | |
| return JSON.parse(response); | |
| } catch (e) { | |
| await delay(1000); | |
| return fetchUrl(url); | |
| } | |
| }; | |
| // For non async modules | |
| fetchUrl(`https://api-mainnet.magiceden.io/rpc/getNFTByMintAddress/7Y5ZoSVRxzijRocc1w1ycwFws8EcaAKbQgaW1qewfxRy`).then((data) => { | |
| console.log(data); | |
| }); | |
| //For async modules | |
| const res = await fetchUrl(`https://api-mainnet.magiceden.io/rpc/getNFTByMintAddress/7Y5ZoSVRxzijRocc1w1ycwFws8EcaAKbQgaW1qewfxRy`); | |
| console.log(res); |
| /** | |
| * @file Fetch data from Magic Eden Rpc without getting cloudflare captchas | |
| * @author Pieter Spruijt <[email protected]> | |
| */ | |
| /* | |
| First install the package | |
| npm install cloudscraper | |
| */ | |
| const cloudscraper = require('cloudscraper'); | |
| // Create the fetchUrl function | |
| const fetchUrl = async (url: string): Promise<{ data: object; }> => { | |
| function delay(ms: number) { | |
| return new Promise(resolve => setTimeout(resolve, ms)); | |
| } | |
| try { | |
| const response = await cloudscraper.get(url).catch(async (err: { statusCode: number }) => { | |
| if (err.statusCode) return; | |
| await delay(1000); | |
| return fetchUrl(url); | |
| }); | |
| if (!response) return { | |
| data: { | |
| error: 'No response' | |
| } | |
| }; | |
| return { | |
| data: JSON.parse(response) | |
| }; | |
| } catch (e) { | |
| await delay(1000); | |
| return fetchUrl(url); | |
| } | |
| }; | |
| //For async modules | |
| async function test() { | |
| const res = await fetchUrl(`https://api-mainnet.magiceden.io/rpc/getCollectionEscrowStats/shukutai_dinos`); | |
| console.log(res); | |
| } | |
| test(); | |
| fetchUrl(`https://api-mainnet.magiceden.io/rpc/getNFTByMintAddress/7Y5ZoSVRxzijRocc1w1ycwFws8EcaAKbQgaW1qewfxRy`).then((data) => { | |
| console.log(data); | |
| }); |
does this script still work? just ran it and it gets stuck
**endustar ** commented 3 minuten geleden
Yes this does still work, I suggest just using axios and changing all endpoints with a .io link in it to .dev, that will fix the problem aswell
so
api-mainnet.magiceden.io/rpc/getNFTByMintAddress/7Y5ZoSVRxzijRocc1w1ycwFws8EcaAKbQgaW1qewfxRy
to
api-mainnet.magiceden.dev/rpc/getNFTByMintAddress/7Y5ZoSVRxzijRocc1w1ycwFws8EcaAKbQgaW1qewfxRy
when I change it to .dev is there even cloudflare protection? seems like I can hit .dev with just a fetch and nothing else
when I change it to .dev is there even cloudflare protection? seems like I can hit .dev with just a fetch and nothing else
.dev is unprotected to use fetch, axios or node-fetch, that will just work!!
Thank you very much! This works fine locally, but when running from a managed server, I'm hitting some blocks.
It works fine for:
https://api-mainnet.magiceden.dev/all_collections
But fails for:
https://api-mainnet.magiceden.io/rpc/getListedNftsByCollectionSymbol?collectionSymbol=bet3&direction=2&field=1&limit=3&offset=0
The one where it fails doesn't have a .dev equivalent.
Any idea?
Thanks a lot!
Donations via Solana: 6fJaA7WTLT1Zj5DdPvDMcRjkLoQc7uXAeVzMQtJzUbR4
or https://solmate.spruijtstudios.com/donate/