| ╔══════════════════════════════════════════════════════════════════════════════════════╗ | |
| ║ CRYPTOCURRENCY API CONFIGURATION - COMPLETE GUIDE ║ | |
| ║ تنظیمات کامل API های ارز دیجیتال ║ | |
| ║ Updated: October 2025 ║ | |
| ╚══════════════════════════════════════════════════════════════════════════════════════╝ | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| 🔑 API KEYS - کلیدهای API | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| EXISTING KEYS (کلیدهای موجود): | |
| ───────────────────────────────── | |
| TronScan: 7ae72726-bffe-4e74-9c33-97b761eeea21 | |
| BscScan: K62RKHGXTDCG53RU4MCG6XABIMJKTN19IT | |
| Etherscan: SZHYFZK2RR8H9TIMJBVW54V4H81K2Z2KR2 | |
| Etherscan_2: T6IR8VJHX2NE6ZJW2S3FDVN1TYG4PYYI45 | |
| CoinMarketCap: 04cf4b5b-9868-465c-8ba0-9f2e78c92eb1 | |
| CoinMarketCap_2: b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c | |
| NewsAPI: pub_346789abc123def456789ghi012345jkl | |
| CryptoCompare: e79c8e6d4c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| 🌐 CORS PROXY SOLUTIONS - راهحلهای پروکسی CORS | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| FREE CORS PROXIES (پروکسیهای رایگان): | |
| ────────────────────────────────────────── | |
| 1. AllOrigins (بدون محدودیت) | |
| URL: https://api.allorigins.win/get?url={TARGET_URL} | |
| Example: https://api.allorigins.win/get?url=https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd | |
| Features: JSON/JSONP, گزینه raw content | |
| 2. CORS.SH (بدون rate limit) | |
| URL: https://proxy.cors.sh/{TARGET_URL} | |
| Example: https://proxy.cors.sh/https://api.coinmarketcap.com/v1/cryptocurrency/quotes/latest | |
| Features: سریع، قابل اعتماد، نیاز به header Origin یا x-requested-with | |
| 3. Corsfix (60 req/min رایگان) | |
| URL: https://proxy.corsfix.com/?url={TARGET_URL} | |
| Example: https://proxy.corsfix.com/?url=https://api.etherscan.io/api | |
| Features: header override، cached responses | |
| 4. CodeTabs (محبوب) | |
| URL: https://api.codetabs.com/v1/proxy?quest={TARGET_URL} | |
| Example: https://api.codetabs.com/v1/proxy?quest=https://api.binance.com/api/v3/ticker/price | |
| 5. ThingProxy (10 req/sec) | |
| URL: https://thingproxy.freeboard.io/fetch/{TARGET_URL} | |
| Example: https://thingproxy.freeboard.io/fetch/https://api.nomics.com/v1/currencies/ticker | |
| Limit: 100,000 characters per request | |
| 6. Crossorigin.me | |
| URL: https://crossorigin.me/{TARGET_URL} | |
| Note: فقط GET، محدودیت 2MB | |
| 7. Self-Hosted CORS-Anywhere | |
| GitHub: https://github.com/Rob--W/cors-anywhere | |
| Deploy: Cloudflare Workers، Vercel، Heroku | |
| USAGE PATTERN (الگوی استفاده): | |
| ──────────────────────────────── | |
| // Without CORS Proxy | |
| fetch('https://api.example.com/data') | |
| // With CORS Proxy | |
| const corsProxy = 'https://api.allorigins.win/get?url='; | |
| fetch(corsProxy + encodeURIComponent('https://api.example.com/data')) | |
| .then(res => res.json()) | |
| .then(data => console.log(data.contents)); | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| 🔗 RPC NODE PROVIDERS - ارائهدهندگان نود RPC | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| ETHEREUM RPC ENDPOINTS: | |
| ─────────────────────────────────── | |
| 1. Infura (رایگان: 100K req/day) | |
| Mainnet: https://mainnet.infura.io/v3/{PROJECT_ID} | |
| Sepolia: https://sepolia.infura.io/v3/{PROJECT_ID} | |
| Docs: https://docs.infura.io | |
| 2. Alchemy (رایگان: 300M compute units/month) | |
| Mainnet: https://eth-mainnet.g.alchemy.com/v2/{API_KEY} | |
| Sepolia: https://eth-sepolia.g.alchemy.com/v2/{API_KEY} | |
| WebSocket: wss://eth-mainnet.g.alchemy.com/v2/{API_KEY} | |
| Docs: https://docs.alchemy.com | |
| 3. Ankr (رایگان: بدون محدودیت عمومی) | |
| Mainnet: https://rpc.ankr.com/eth | |
| Docs: https://www.ankr.com/docs | |
| 4. PublicNode (کاملا رایگان) | |
| Mainnet: https://ethereum.publicnode.com | |
| All-in-one: https://ethereum-rpc.publicnode.com | |
| 5. Cloudflare (رایگان) | |
| Mainnet: https://cloudflare-eth.com | |
| 6. LlamaNodes (رایگان) | |
| Mainnet: https://eth.llamarpc.com | |
| 7. 1RPC (رایگان با privacy) | |
| Mainnet: https://1rpc.io/eth | |
| 8. Chainnodes (ارزان) | |
| Mainnet: https://mainnet.chainnodes.org/{API_KEY} | |
| 9. dRPC (decentralized) | |
| Mainnet: https://eth.drpc.org | |
| Docs: https://drpc.org | |
| BSC (BINANCE SMART CHAIN) RPC: | |
| ────────────────────────────────── | |
| 1. Official BSC RPC (رایگان) | |
| Mainnet: https://bsc-dataseed.binance.org | |
| Alt1: https://bsc-dataseed1.defibit.io | |
| Alt2: https://bsc-dataseed1.ninicoin.io | |
| 2. Ankr BSC | |
| Mainnet: https://rpc.ankr.com/bsc | |
| 3. PublicNode BSC | |
| Mainnet: https://bsc-rpc.publicnode.com | |
| 4. Nodereal BSC (رایگان: 3M req/day) | |
| Mainnet: https://bsc-mainnet.nodereal.io/v1/{API_KEY} | |
| TRON RPC ENDPOINTS: | |
| ─────────────────────────── | |
| 1. TronGrid (رایگان) | |
| Mainnet: https://api.trongrid.io | |
| Full Node: https://api.trongrid.io/wallet/getnowblock | |
| 2. TronStack (رایگان) | |
| Mainnet: https://api.tronstack.io | |
| 3. Nile Testnet | |
| Testnet: https://api.nileex.io | |
| POLYGON RPC: | |
| ────────────────── | |
| 1. Polygon Official (رایگان) | |
| Mainnet: https://polygon-rpc.com | |
| Mumbai: https://rpc-mumbai.maticvigil.com | |
| 2. Ankr Polygon | |
| Mainnet: https://rpc.ankr.com/polygon | |
| 3. Alchemy Polygon | |
| Mainnet: https://polygon-mainnet.g.alchemy.com/v2/{API_KEY} | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| 📊 BLOCK EXPLORER APIs - APIهای کاوشگر بلاکچین | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| CATEGORY 1: ETHEREUM EXPLORERS (11 endpoints) | |
| ────────────────────────────────────────────── | |
| PRIMARY: Etherscan | |
| ───────────────────── | |
| URL: https://api.etherscan.io/api | |
| Key: SZHYFZK2RR8H9TIMJBVW54V4H81K2Z2KR2 | |
| Rate Limit: 5 calls/sec (free tier) | |
| Docs: https://docs.etherscan.io | |
| Endpoints: | |
| • Balance: ?module=account&action=balance&address={address}&tag=latest&apikey={KEY} | |
| • Transactions: ?module=account&action=txlist&address={address}&startblock=0&endblock=99999999&sort=asc&apikey={KEY} | |
| • Token Balance: ?module=account&action=tokenbalance&contractaddress={contract}&address={address}&tag=latest&apikey={KEY} | |
| • Gas Price: ?module=gastracker&action=gasoracle&apikey={KEY} | |
| Example (No Proxy): | |
| fetch('https://api.etherscan.io/api?module=account&action=balance&address=0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb&tag=latest&apikey=SZHYFZK2RR8H9TIMJBVW54V4H81K2Z2KR2') | |
| Example (With CORS Proxy): | |
| const proxy = 'https://api.allorigins.win/get?url='; | |
| const url = 'https://api.etherscan.io/api?module=account&action=balance&address=0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb&apikey=SZHYFZK2RR8H9TIMJBVW54V4H81K2Z2KR2'; | |
| fetch(proxy + encodeURIComponent(url)) | |
| .then(r => r.json()) | |
| .then(data => { | |
| const result = JSON.parse(data.contents); | |
| console.log('Balance:', result.result / 1e18, 'ETH'); | |
| }); | |
| FALLBACK 1: Etherscan (Second Key) | |
| ──────────────────────────────────── | |
| URL: https://api.etherscan.io/api | |
| Key: T6IR8VJHX2NE6ZJW2S3FDVN1TYG4PYYI45 | |
| FALLBACK 2: Blockchair | |
| ────────────────────── | |
| URL: https://api.blockchair.com/ethereum/dashboards/address/{address} | |
| Free: 1,440 requests/day | |
| Docs: https://blockchair.com/api/docs | |
| FALLBACK 3: BlockScout (Open Source) | |
| ───────────────────────────────────── | |
| URL: https://eth.blockscout.com/api | |
| Free: بدون محدودیت | |
| Docs: https://docs.blockscout.com | |
| FALLBACK 4: Ethplorer | |
| ────────────────────── | |
| URL: https://api.ethplorer.io | |
| Endpoint: /getAddressInfo/{address}?apiKey=freekey | |
| Free: محدود | |
| Docs: https://github.com/EverexIO/Ethplorer/wiki/Ethplorer-API | |
| FALLBACK 5: Etherchain | |
| ────────────────────── | |
| URL: https://www.etherchain.org/api | |
| Free: بله | |
| Docs: https://www.etherchain.org/documentation/api | |
| FALLBACK 6: Chainlens | |
| ───────────────────── | |
| URL: https://api.chainlens.com | |
| Free tier available | |
| Docs: https://docs.chainlens.com | |
| CATEGORY 2: BSC EXPLORERS (6 endpoints) | |
| ──────────────────────────────────────── | |
| PRIMARY: BscScan | |
| ──────────────── | |
| URL: https://api.bscscan.com/api | |
| Key: K62RKHGXTDCG53RU4MCG6XABIMJKTN19IT | |
| Rate Limit: 5 calls/sec | |
| Docs: https://docs.bscscan.com | |
| Endpoints: | |
| • BNB Balance: ?module=account&action=balance&address={address}&apikey={KEY} | |
| • BEP-20 Balance: ?module=account&action=tokenbalance&contractaddress={token}&address={address}&apikey={KEY} | |
| • Transactions: ?module=account&action=txlist&address={address}&apikey={KEY} | |
| Example: | |
| fetch('https://api.bscscan.com/api?module=account&action=balance&address=0x1234...&apikey=K62RKHGXTDCG53RU4MCG6XABIMJKTN19IT') | |
| .then(r => r.json()) | |
| .then(data => console.log('BNB:', data.result / 1e18)); | |
| FALLBACK 1: BitQuery (BSC) | |
| ────────────────────────── | |
| URL: https://graphql.bitquery.io | |
| Method: GraphQL POST | |
| Free: 10K queries/month | |
| Docs: https://docs.bitquery.io | |
| GraphQL Example: | |
| query { | |
| ethereum(network: bsc) { | |
| address(address: {is: "0x..."}) { | |
| balances { | |
| currency { symbol } | |
| value | |
| } | |
| } | |
| } | |
| } | |
| FALLBACK 2: Ankr MultiChain | |
| ──────────────────────────── | |
| URL: https://rpc.ankr.com/multichain | |
| Method: JSON-RPC POST | |
| Free: Public endpoints | |
| Docs: https://www.ankr.com/docs/ | |
| FALLBACK 3: Nodereal BSC | |
| ──────────────────────── | |
| URL: https://bsc-mainnet.nodereal.io/v1/{API_KEY} | |
| Free tier: 3M requests/day | |
| Docs: https://docs.nodereal.io | |
| FALLBACK 4: BscTrace | |
| ──────────────────── | |
| URL: https://api.bsctrace.com | |
| Free: Limited | |
| Alternative explorer | |
| FALLBACK 5: 1inch BSC API | |
| ───────────────────────── | |
| URL: https://api.1inch.io/v5.0/56 | |
| Free: For trading data | |
| Docs: https://docs.1inch.io | |
| CATEGORY 3: TRON EXPLORERS (5 endpoints) | |
| ───────────────────────────────────────── | |
| PRIMARY: TronScan | |
| ───────────────── | |
| URL: https://apilist.tronscanapi.com/api | |
| Key: 7ae72726-bffe-4e74-9c33-97b761eeea21 | |
| Rate Limit: Varies | |
| Docs: https://github.com/tronscan/tronscan-frontend/blob/dev2019/document/api.md | |
| Endpoints: | |
| • Account: /account?address={address} | |
| • Transactions: /transaction?address={address}&limit=20 | |
| • TRC20 Transfers: /token_trc20/transfers?address={address} | |
| • Account Resources: /account/detail?address={address} | |
| Example: | |
| fetch('https://apilist.tronscanapi.com/api/account?address=TxxxXXXxxx') | |
| .then(r => r.json()) | |
| .then(data => console.log('TRX Balance:', data.balance / 1e6)); | |
| FALLBACK 1: TronGrid (Official) | |
| ──────────────────────────────── | |
| URL: https://api.trongrid.io | |
| Free: Public | |
| Docs: https://developers.tron.network/docs | |
| JSON-RPC Example: | |
| fetch('https://api.trongrid.io/wallet/getaccount', { | |
| method: 'POST', | |
| headers: {'Content-Type': 'application/json'}, | |
| body: JSON.stringify({ | |
| address: 'TxxxXXXxxx', | |
| visible: true | |
| }) | |
| }) | |
| FALLBACK 2: Tron Official API | |
| ────────────────────────────── | |
| URL: https://api.tronstack.io | |
| Free: Public | |
| Docs: Similar to TronGrid | |
| FALLBACK 3: Blockchair (TRON) | |
| ────────────────────────────── | |
| URL: https://api.blockchair.com/tron/dashboards/address/{address} | |
| Free: 1,440 req/day | |
| Docs: https://blockchair.com/api/docs | |
| FALLBACK 4: Tronscan API v2 | |
| ─────────────────────────── | |
| URL: https://api.tronscan.org/api | |
| Alternative endpoint | |
| Similar structure | |
| FALLBACK 5: GetBlock TRON | |
| ───────────────────────── | |
| URL: https://go.getblock.io/tron | |
| Free tier available | |
| Docs: https://getblock.io/docs/ | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| 💰 MARKET DATA APIs - APIهای دادههای بازار | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| CATEGORY 1: PRICE & MARKET CAP (15+ endpoints) | |
| ─────────────────────────────────────────────── | |
| PRIMARY: CoinGecko (FREE - بدون کلید) | |
| ────────────────────────────────────── | |
| URL: https://api.coingecko.com/api/v3 | |
| Rate Limit: 10-50 calls/min (free) | |
| Docs: https://www.coingecko.com/en/api/documentation | |
| Best Endpoints: | |
| • Simple Price: /simple/price?ids=bitcoin,ethereum&vs_currencies=usd | |
| • Coin Data: /coins/{id}?localization=false | |
| • Market Chart: /coins/{id}/market_chart?vs_currency=usd&days=7 | |
| • Global Data: /global | |
| • Trending: /search/trending | |
| • Categories: /coins/categories | |
| Example (Works Everywhere): | |
| fetch('https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum,tron&vs_currencies=usd,eur') | |
| .then(r => r.json()) | |
| .then(data => console.log(data)); | |
| // Output: {bitcoin: {usd: 45000, eur: 42000}, ...} | |
| FALLBACK 1: CoinMarketCap (با کلید) | |
| ───────────────────────────────────── | |
| URL: https://pro-api.coinmarketcap.com/v1 | |
| Key 1: b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c | |
| Key 2: 04cf4b5b-9868-465c-8ba0-9f2e78c92eb1 | |
| Rate Limit: 333 calls/day (free) | |
| Docs: https://coinmarketcap.com/api/documentation/v1/ | |
| Endpoints: | |
| • Latest Quotes: /cryptocurrency/quotes/latest?symbol=BTC,ETH | |
| • Listings: /cryptocurrency/listings/latest?limit=100 | |
| • Market Pairs: /cryptocurrency/market-pairs/latest?id=1 | |
| Example (Requires API Key in Header): | |
| fetch('https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=BTC', { | |
| headers: { | |
| 'X-CMC_PRO_API_KEY': 'b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c' | |
| } | |
| }) | |
| .then(r => r.json()) | |
| .then(data => console.log(data.data.BTC)); | |
| With CORS Proxy: | |
| const proxy = 'https://proxy.cors.sh/'; | |
| fetch(proxy + 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=BTC', { | |
| headers: { | |
| 'X-CMC_PRO_API_KEY': 'b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c', | |
| 'Origin': 'https://myapp.com' | |
| } | |
| }) | |
| FALLBACK 2: CryptoCompare | |
| ───────────────────────── | |
| URL: https://min-api.cryptocompare.com/data | |
| Key: e79c8e6d4c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f | |
| Free: 100K calls/month | |
| Docs: https://min-api.cryptocompare.com/documentation | |
| Endpoints: | |
| • Price Multi: /pricemulti?fsyms=BTC,ETH&tsyms=USD,EUR&api_key={KEY} | |
| • Historical: /v2/histoday?fsym=BTC&tsym=USD&limit=30&api_key={KEY} | |
| • Top Volume: /top/totalvolfull?limit=10&tsym=USD&api_key={KEY} | |
| FALLBACK 3: Coinpaprika (FREE) | |
| ─────────────────────────────── | |
| URL: https://api.coinpaprika.com/v1 | |
| Rate Limit: 20K calls/month | |
| Docs: https://api.coinpaprika.com/ | |
| Endpoints: | |
| • Tickers: /tickers | |
| • Coin: /coins/btc-bitcoin | |
| • Historical: /coins/btc-bitcoin/ohlcv/historical | |
| FALLBACK 4: CoinCap (FREE) | |
| ────────────────────────── | |
| URL: https://api.coincap.io/v2 | |
| Rate Limit: 200 req/min | |
| Docs: https://docs.coincap.io/ | |
| Endpoints: | |
| • Assets: /assets | |
| • Specific: /assets/bitcoin | |
| • History: /assets/bitcoin/history?interval=d1 | |
| FALLBACK 5: Nomics (FREE) | |
| ───────────────────────── | |
| URL: https://api.nomics.com/v1 | |
| No Rate Limit on free tier | |
| Docs: https://p.nomics.com/cryptocurrency-bitcoin-api | |
| FALLBACK 6: Messari (FREE) | |
| ────────────────────────── | |
| URL: https://data.messari.io/api/v1 | |
| Rate Limit: Generous | |
| Docs: https://messari.io/api/docs | |
| FALLBACK 7: CoinLore (FREE) | |
| ─────────────────────────── | |
| URL: https://api.coinlore.net/api | |
| Rate Limit: None | |
| Docs: https://www.coinlore.com/cryptocurrency-data-api | |
| FALLBACK 8: Binance Public API | |
| ─────────────────────────────── | |
| URL: https://api.binance.com/api/v3 | |
| Free: بله | |
| Docs: https://binance-docs.github.io/apidocs/spot/en/ | |
| Endpoints: | |
| • Price: /ticker/price?symbol=BTCUSDT | |
| • 24hr Stats: /ticker/24hr?symbol=ETHUSDT | |
| FALLBACK 9: CoinDesk API | |
| ──────────────────────── | |
| URL: https://api.coindesk.com/v1 | |
| Free: Bitcoin price index | |
| Docs: https://www.coindesk.com/coindesk-api | |
| FALLBACK 10: Mobula API | |
| ─────────────────────── | |
| URL: https://api.mobula.io/api/1 | |
| Free: 50% cheaper than CMC | |
| Coverage: 2.3M+ cryptocurrencies | |
| Docs: https://developer.mobula.fi/ | |
| FALLBACK 11: Token Metrics API | |
| ─────────────────────────────── | |
| URL: https://api.tokenmetrics.com/v2 | |
| Free API key available | |
| AI-driven insights | |
| Docs: https://api.tokenmetrics.com/docs | |
| FALLBACK 12: FreeCryptoAPI | |
| ────────────────────────── | |
| URL: https://api.freecryptoapi.com | |
| Free: Beginner-friendly | |
| Coverage: 3,000+ coins | |
| FALLBACK 13: DIA Data | |
| ───────────────────── | |
| URL: https://api.diadata.org/v1 | |
| Free: Decentralized oracle | |
| Transparent pricing | |
| Docs: https://docs.diadata.org | |
| FALLBACK 14: Alternative.me | |
| ─────────────────────────── | |
| URL: https://api.alternative.me/v2 | |
| Free: Price + Fear & Greed | |
| Docs: In API responses | |
| FALLBACK 15: CoinStats API | |
| ────────────────────────── | |
| URL: https://api.coinstats.app/public/v1 | |
| Free tier available | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| 📰 NEWS & SOCIAL APIs - APIهای اخبار و شبکههای اجتماعی | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| CATEGORY 1: CRYPTO NEWS (10+ endpoints) | |
| ──────────────────────────────────────── | |
| PRIMARY: CryptoPanic (FREE) | |
| ─────────────────────────── | |
| URL: https://cryptopanic.com/api/v1 | |
| Free: بله | |
| Docs: https://cryptopanic.com/developers/api/ | |
| Endpoints: | |
| • Posts: /posts/?auth_token={TOKEN}&public=true | |
| • Currencies: /posts/?currencies=BTC,ETH | |
| • Filter: /posts/?filter=rising | |
| Example: | |
| fetch('https://cryptopanic.com/api/v1/posts/?public=true') | |
| .then(r => r.json()) | |
| .then(data => console.log(data.results)); | |
| FALLBACK 1: NewsAPI.org | |
| ─────────────────────── | |
| URL: https://newsapi.org/v2 | |
| Key: pub_346789abc123def456789ghi012345jkl | |
| Free: 100 req/day | |
| Docs: https://newsapi.org/docs | |
| FALLBACK 2: CryptoControl | |
| ───────────────────────── | |
| URL: https://cryptocontrol.io/api/v1/public | |
| Free tier available | |
| Docs: https://cryptocontrol.io/api | |
| FALLBACK 3: CoinDesk News | |
| ───────────────────────── | |
| URL: https://www.coindesk.com/arc/outboundfeeds/rss/ | |
| Free RSS feed | |
| FALLBACK 4: CoinTelegraph API | |
| ───────────────────────────── | |
| URL: https://cointelegraph.com/api/v1 | |
| Free: RSS and JSON feeds | |
| FALLBACK 5: CryptoSlate | |
| ─────────────────────── | |
| URL: https://cryptoslate.com/api | |
| Free: Limited | |
| FALLBACK 6: The Block API | |
| ───────────────────────── | |
| URL: https://api.theblock.co/v1 | |
| Premium service | |
| FALLBACK 7: Bitcoin Magazine RSS | |
| ──────────────────────────────── | |
| URL: https://bitcoinmagazine.com/.rss/full/ | |
| Free RSS | |
| FALLBACK 8: Decrypt RSS | |
| ─────────────────────── | |
| URL: https://decrypt.co/feed | |
| Free RSS | |
| FALLBACK 9: Reddit Crypto | |
| ───────────────────────── | |
| URL: https://www.reddit.com/r/CryptoCurrency/new.json | |
| Free: Public JSON | |
| Limit: 60 req/min | |
| Example: | |
| fetch('https://www.reddit.com/r/CryptoCurrency/hot.json?limit=25') | |
| .then(r => r.json()) | |
| .then(data => console.log(data.data.children)); | |
| FALLBACK 10: Twitter/X API (v2) | |
| ─────────────────────────────── | |
| URL: https://api.twitter.com/2 | |
| Requires: OAuth 2.0 | |
| Free tier: 1,500 tweets/month | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| 😱 SENTIMENT & MOOD APIs - APIهای احساسات بازار | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| CATEGORY 1: FEAR & GREED INDEX (5+ endpoints) | |
| ────────────────────────────────────────────── | |
| PRIMARY: Alternative.me (FREE) | |
| ────────────────────────────── | |
| URL: https://api.alternative.me/fng/ | |
| Free: بدون محدودیت | |
| Docs: https://alternative.me/crypto/fear-and-greed-index/ | |
| Endpoints: | |
| • Current: /?limit=1 | |
| • Historical: /?limit=30 | |
| • Date Range: /?limit=10&date_format=world | |
| Example: | |
| fetch('https://api.alternative.me/fng/?limit=1') | |
| .then(r => r.json()) | |
| .then(data => { | |
| const fng = data.data[0]; | |
| console.log(`Fear & Greed: ${fng.value} - ${fng.value_classification}`); | |
| }); | |
| // Output: "Fear & Greed: 45 - Fear" | |
| FALLBACK 1: LunarCrush | |
| ────────────────────── | |
| URL: https://api.lunarcrush.com/v2 | |
| Free tier: Limited | |
| Docs: https://lunarcrush.com/developers/api | |
| Endpoints: | |
| • Assets: ?data=assets&key={KEY} | |
| • Market: ?data=market&key={KEY} | |
| • Influencers: ?data=influencers&key={KEY} | |
| FALLBACK 2: Santiment (GraphQL) | |
| ──────────────────────────────── | |
| URL: https://api.santiment.net/graphql | |
| Free tier available | |
| Docs: https://api.santiment.net/graphiql | |
| GraphQL Example: | |
| query { | |
| getMetric(metric: "sentiment_balance_total") { | |
| timeseriesData( | |
| slug: "bitcoin" | |
| from: "2025-10-01T00:00:00Z" | |
| to: "2025-10-31T00:00:00Z" | |
| interval: "1d" | |
| ) { | |
| datetime | |
| value | |
| } | |
| } | |
| } | |
| FALLBACK 3: TheTie.io | |
| ───────────────────── | |
| URL: https://api.thetie.io | |
| Premium mainly | |
| Docs: https://docs.thetie.io | |
| FALLBACK 4: CryptoQuant | |
| ─────────────────────── | |
| URL: https://api.cryptoquant.com/v1 | |
| Free tier: Limited | |
| Docs: https://docs.cryptoquant.com | |
| FALLBACK 5: Glassnode Social | |
| ──────────────────────────── | |
| URL: https://api.glassnode.com/v1/metrics/social | |
| Free tier: Limited | |
| Docs: https://docs.glassnode.com | |
| FALLBACK 6: Augmento (Social) | |
| ────────────────────────────── | |
| URL: https://api.augmento.ai/v1 | |
| AI-powered sentiment | |
| Free trial available | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| 🐋 WHALE TRACKING APIs - APIهای ردیابی نهنگها | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| CATEGORY 1: WHALE TRANSACTIONS (8+ endpoints) | |
| ────────────────────────────────────────────── | |
| PRIMARY: Whale Alert | |
| ──────────────────── | |
| URL: https://api.whale-alert.io/v1 | |
| Free: Limited (7-day trial) | |
| Paid: From $20/month | |
| Docs: https://docs.whale-alert.io | |
| Endpoints: | |
| • Transactions: /transactions?api_key={KEY}&min_value=1000000&start={timestamp}&end={timestamp} | |
| • Status: /status?api_key={KEY} | |
| Example: | |
| const start = Math.floor(Date.now()/1000) - 3600; // 1 hour ago | |
| const end = Math.floor(Date.now()/1000); | |
| fetch(`https://api.whale-alert.io/v1/transactions?api_key=YOUR_KEY&min_value=1000000&start=${start}&end=${end}`) | |
| .then(r => r.json()) | |
| .then(data => { | |
| data.transactions.forEach(tx => { | |
| console.log(`${tx.amount} ${tx.symbol} from ${tx.from.owner} to ${tx.to.owner}`); | |
| }); | |
| }); | |
| FALLBACK 1: ClankApp (FREE) | |
| ─────────────────────────── | |
| URL: https://clankapp.com/api | |
| Free: بله | |
| Telegram: @clankapp | |
| Twitter: @ClankApp | |
| Docs: https://clankapp.com/api/ | |
| Features: | |
| • 24 blockchains | |
| • Real-time whale alerts | |
| • Email & push notifications | |
| • No API key needed | |
| Example: | |
| fetch('https://clankapp.com/api/whales/recent') | |
| .then(r => r.json()) | |
| .then(data => console.log(data)); | |
| FALLBACK 2: BitQuery Whale Tracking | |
| ──────────────────────────────────── | |
| URL: https://graphql.bitquery.io | |
| Free: 10K queries/month | |
| Docs: https://docs.bitquery.io | |
| GraphQL Example (Large ETH Transfers): | |
| { | |
| ethereum(network: ethereum) { | |
| transfers( | |
| amount: {gt: 1000} | |
| currency: {is: "ETH"} | |
| date: {since: "2025-10-25"} | |
| ) { | |
| block { timestamp { time } } | |
| sender { address } | |
| receiver { address } | |
| amount | |
| transaction { hash } | |
| } | |
| } | |
| } | |
| FALLBACK 3: Arkham Intelligence | |
| ──────────────────────────────── | |
| URL: https://api.arkham.com | |
| Paid service mainly | |
| Docs: https://docs.arkham.com | |
| FALLBACK 4: Nansen | |
| ────────────────── | |
| URL: https://api.nansen.ai/v1 | |
| Premium: Expensive but powerful | |
| Docs: https://docs.nansen.ai | |
| Features: | |
| • Smart Money tracking | |
| • Wallet labeling | |
| • Multi-chain support | |
| FALLBACK 5: DexCheck Whale Tracker | |
| ─────────────────────────────────── | |
| Free wallet tracking feature | |
| 22 chains supported | |
| Telegram bot integration | |
| FALLBACK 6: DeBank | |
| ────────────────── | |
| URL: https://api.debank.com | |
| Free: Portfolio tracking | |
| Web3 social features | |
| FALLBACK 7: Zerion API | |
| ────────────────────── | |
| URL: https://api.zerion.io | |
| Similar to DeBank | |
| DeFi portfolio tracker | |
| FALLBACK 8: Whalemap | |
| ──────────────────── | |
| URL: https://whalemap.io | |
| Bitcoin & ERC-20 focus | |
| Charts and analytics | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| 🔍 ON-CHAIN ANALYTICS APIs - APIهای تحلیل زنجیره | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| CATEGORY 1: BLOCKCHAIN DATA (10+ endpoints) | |
| ──────────────────────────────────────────── | |
| PRIMARY: The Graph (Subgraphs) | |
| ────────────────────────────── | |
| URL: https://api.thegraph.com/subgraphs/name/{org}/{subgraph} | |
| Free: Public subgraphs | |
| Docs: https://thegraph.com/docs/ | |
| Popular Subgraphs: | |
| • Uniswap V3: /uniswap/uniswap-v3 | |
| • Aave V2: /aave/protocol-v2 | |
| • Compound: /graphprotocol/compound-v2 | |
| Example (Uniswap V3): | |
| fetch('https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3', { | |
| method: 'POST', | |
| headers: {'Content-Type': 'application/json'}, | |
| body: JSON.stringify({ | |
| query: `{ | |
| pools(first: 5, orderBy: volumeUSD, orderDirection: desc) { | |
| id | |
| token0 { symbol } | |
| token1 { symbol } | |
| volumeUSD | |
| } | |
| }` | |
| }) | |
| }) | |
| FALLBACK 1: Glassnode | |
| ───────────────────── | |
| URL: https://api.glassnode.com/v1 | |
| Free tier: Limited metrics | |
| Docs: https://docs.glassnode.com | |
| Endpoints: | |
| • SOPR: /metrics/indicators/sopr?a=BTC&api_key={KEY} | |
| • HODL Waves: /metrics/supply/hodl_waves?a=BTC&api_key={KEY} | |
| FALLBACK 2: IntoTheBlock | |
| ──────────────────────── | |
| URL: https://api.intotheblock.com/v1 | |
| Free tier available | |
| Docs: https://developers.intotheblock.com | |
| FALLBACK 3: Dune Analytics | |
| ────────────────────────── | |
| URL: https://api.dune.com/api/v1 | |
| Free: Query results | |
| Docs: https://docs.dune.com/api-reference/ | |
| FALLBACK 4: Covalent | |
| ──────────────────── | |
| URL: https://api.covalenthq.com/v1 | |
| Free tier: 100K credits | |
| Multi-chain support | |
| Docs: https://www.covalenthq.com/docs/api/ | |
| Example (Ethereum balances): | |
| fetch('https://api.covalenthq.com/v1/1/address/0x.../balances_v2/?key=YOUR_KEY') | |
| FALLBACK 5: Moralis | |
| ─────────────────── | |
| URL: https://deep-index.moralis.io/api/v2 | |
| Free: 100K compute units/month | |
| Docs: https://docs.moralis.io | |
| FALLBACK 6: Alchemy NFT API | |
| ─────────────────────────── | |
| Included with Alchemy account | |
| NFT metadata & transfers | |
| FALLBACK 7: QuickNode Functions | |
| ──────────────────────────────── | |
| Custom on-chain queries | |
| Token balances, NFTs | |
| FALLBACK 8: Transpose | |
| ───────────────────── | |
| URL: https://api.transpose.io | |
| Free tier available | |
| SQL-like queries | |
| FALLBACK 9: Footprint Analytics | |
| ──────────────────────────────── | |
| URL: https://api.footprint.network | |
| Free: Community tier | |
| No-code analytics | |
| FALLBACK 10: Nansen Query | |
| ───────────────────────── | |
| Premium institutional tool | |
| Advanced on-chain intelligence | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| 🔧 COMPLETE JAVASCRIPT IMPLEMENTATION | |
| پیادهسازی کامل جاوااسکریپت | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| // ═══════════════════════════════════════════════════════════════════════════════ | |
| // CONFIG.JS - تنظیمات مرکزی API | |
| // ═══════════════════════════════════════════════════════════════════════════════ | |
| const API_CONFIG = { | |
| // CORS Proxies (پروکسیهای CORS) | |
| corsProxies: [ | |
| 'https://api.allorigins.win/get?url=', | |
| 'https://proxy.cors.sh/', | |
| 'https://proxy.corsfix.com/?url=', | |
| 'https://api.codetabs.com/v1/proxy?quest=', | |
| 'https://thingproxy.freeboard.io/fetch/' | |
| ], | |
| // Block Explorers (کاوشگرهای بلاکچین) | |
| explorers: { | |
| ethereum: { | |
| primary: { | |
| name: 'etherscan', | |
| baseUrl: 'https://api.etherscan.io/api', | |
| key: 'SZHYFZK2RR8H9TIMJBVW54V4H81K2Z2KR2', | |
| rateLimit: 5 // calls per second | |
| }, | |
| fallbacks: [ | |
| { name: 'etherscan2', baseUrl: 'https://api.etherscan.io/api', key: 'T6IR8VJHX2NE6ZJW2S3FDVN1TYG4PYYI45' }, | |
| { name: 'blockchair', baseUrl: 'https://api.blockchair.com/ethereum', key: '' }, | |
| { name: 'blockscout', baseUrl: 'https://eth.blockscout.com/api', key: '' }, | |
| { name: 'ethplorer', baseUrl: 'https://api.ethplorer.io', key: 'freekey' } | |
| ] | |
| }, | |
| bsc: { | |
| primary: { | |
| name: 'bscscan', | |
| baseUrl: 'https://api.bscscan.com/api', | |
| key: 'K62RKHGXTDCG53RU4MCG6XABIMJKTN19IT', | |
| rateLimit: 5 | |
| }, | |
| fallbacks: [ | |
| { name: 'blockchair', baseUrl: 'https://api.blockchair.com/binance-smart-chain', key: '' }, | |
| { name: 'bitquery', baseUrl: 'https://graphql.bitquery.io', key: '', method: 'graphql' } | |
| ] | |
| }, | |
| tron: { | |
| primary: { | |
| name: 'tronscan', | |
| baseUrl: 'https://apilist.tronscanapi.com/api', | |
| key: '7ae72726-bffe-4e74-9c33-97b761eeea21', | |
| rateLimit: 10 | |
| }, | |
| fallbacks: [ | |
| { name: 'trongrid', baseUrl: 'https://api.trongrid.io', key: '' }, | |
| { name: 'tronstack', baseUrl: 'https://api.tronstack.io', key: '' }, | |
| { name: 'blockchair', baseUrl: 'https://api.blockchair.com/tron', key: '' } | |
| ] | |
| } | |
| }, | |
| // Market Data (دادههای بازار) | |
| marketData: { | |
| primary: { | |
| name: 'coingecko', | |
| baseUrl: 'https://api.coingecko.com/api/v3', | |
| key: '', // بدون کلید | |
| needsProxy: false, | |
| rateLimit: 50 // calls per minute | |
| }, | |
| fallbacks: [ | |
| { | |
| name: 'coinmarketcap', | |
| baseUrl: 'https://pro-api.coinmarketcap.com/v1', | |
| key: 'b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c', | |
| headerKey: 'X-CMC_PRO_API_KEY', | |
| needsProxy: true | |
| }, | |
| { | |
| name: 'coinmarketcap2', | |
| baseUrl: 'https://pro-api.coinmarketcap.com/v1', | |
| key: '04cf4b5b-9868-465c-8ba0-9f2e78c92eb1', | |
| headerKey: 'X-CMC_PRO_API_KEY', | |
| needsProxy: true | |
| }, | |
| { name: 'coincap', baseUrl: 'https://api.coincap.io/v2', key: '' }, | |
| { name: 'coinpaprika', baseUrl: 'https://api.coinpaprika.com/v1', key: '' }, | |
| { name: 'binance', baseUrl: 'https://api.binance.com/api/v3', key: '' }, | |
| { name: 'coinlore', baseUrl: 'https://api.coinlore.net/api', key: '' } | |
| ] | |
| }, | |
| // RPC Nodes (نودهای RPC) | |
| rpcNodes: { | |
| ethereum: [ | |
| 'https://eth.llamarpc.com', | |
| 'https://ethereum.publicnode.com', | |
| 'https://cloudflare-eth.com', | |
| 'https://rpc.ankr.com/eth', | |
| 'https://eth.drpc.org' | |
| ], | |
| bsc: [ | |
| 'https://bsc-dataseed.binance.org', | |
| 'https://bsc-dataseed1.defibit.io', | |
| 'https://rpc.ankr.com/bsc', | |
| 'https://bsc-rpc.publicnode.com' | |
| ], | |
| polygon: [ | |
| 'https://polygon-rpc.com', | |
| 'https://rpc.ankr.com/polygon', | |
| 'https://polygon-bor-rpc.publicnode.com' | |
| ] | |
| }, | |
| // News Sources (منابع خبری) | |
| news: { | |
| primary: { | |
| name: 'cryptopanic', | |
| baseUrl: 'https://cryptopanic.com/api/v1', | |
| key: '', | |
| needsProxy: false | |
| }, | |
| fallbacks: [ | |
| { name: 'reddit', baseUrl: 'https://www.reddit.com/r/CryptoCurrency', key: '' } | |
| ] | |
| }, | |
| // Sentiment (احساسات) | |
| sentiment: { | |
| primary: { | |
| name: 'alternative.me', | |
| baseUrl: 'https://api.alternative.me/fng', | |
| key: '', | |
| needsProxy: false | |
| } | |
| }, | |
| // Whale Tracking (ردیابی نهنگ) | |
| whaleTracking: { | |
| primary: { | |
| name: 'clankapp', | |
| baseUrl: 'https://clankapp.com/api', | |
| key: '', | |
| needsProxy: false | |
| } | |
| } | |
| }; | |
| // ═══════════════════════════════════════════════════════════════════════════════ | |
| // API-CLIENT.JS - کلاینت API با مدیریت خطا و fallback | |
| // ═══════════════════════════════════════════════════════════════════════════════ | |
| class CryptoAPIClient { | |
| constructor(config) { | |
| this.config = config; | |
| this.currentProxyIndex = 0; | |
| this.requestCache = new Map(); | |
| this.cacheTimeout = 60000; // 1 minute | |
| } | |
| // استفاده از CORS Proxy | |
| async fetchWithProxy(url, options = {}) { | |
| const proxies = this.config.corsProxies; | |
| for (let i = 0; i < proxies.length; i++) { | |
| const proxyUrl = proxies[this.currentProxyIndex] + encodeURIComponent(url); | |
| try { | |
| console.log(`🔄 Trying proxy ${this.currentProxyIndex + 1}/${proxies.length}`); | |
| const response = await fetch(proxyUrl, { | |
| ...options, | |
| headers: { | |
| ...options.headers, | |
| 'Origin': window.location.origin, | |
| 'x-requested-with': 'XMLHttpRequest' | |
| } | |
| }); | |
| if (response.ok) { | |
| const data = await response.json(); | |
| // Handle allOrigins response format | |
| return data.contents ? JSON.parse(data.contents) : data; | |
| } | |
| } catch (error) { | |
| console.warn(`❌ Proxy ${this.currentProxyIndex + 1} failed:`, error.message); | |
| } | |
| // Switch to next proxy | |
| this.currentProxyIndex = (this.currentProxyIndex + 1) % proxies.length; | |
| } | |
| throw new Error('All CORS proxies failed'); | |
| } | |
| // بدون پروکسی | |
| async fetchDirect(url, options = {}) { | |
| try { | |
| const response = await fetch(url, options); | |
| if (!response.ok) throw new Error(`HTTP ${response.status}`); | |
| return await response.json(); | |
| } catch (error) { | |
| throw new Error(`Direct fetch failed: ${error.message}`); | |
| } | |
| } | |
| // با cache و fallback | |
| async fetchWithFallback(primaryConfig, fallbacks, endpoint, params = {}) { | |
| const cacheKey = `${primaryConfig.name}-${endpoint}-${JSON.stringify(params)}`; | |
| // Check cache | |
| if (this.requestCache.has(cacheKey)) { | |
| const cached = this.requestCache.get(cacheKey); | |
| if (Date.now() - cached.timestamp < this.cacheTimeout) { | |
| console.log('📦 Using cached data'); | |
| return cached.data; | |
| } | |
| } | |
| // Try primary | |
| try { | |
| const data = await this.makeRequest(primaryConfig, endpoint, params); | |
| this.requestCache.set(cacheKey, { data, timestamp: Date.now() }); | |
| return data; | |
| } catch (error) { | |
| console.warn('⚠️ Primary failed, trying fallbacks...', error.message); | |
| } | |
| // Try fallbacks | |
| for (const fallback of fallbacks) { | |
| try { | |
| console.log(`🔄 Trying fallback: ${fallback.name}`); | |
| const data = await this.makeRequest(fallback, endpoint, params); | |
| this.requestCache.set(cacheKey, { data, timestamp: Date.now() }); | |
| return data; | |
| } catch (error) { | |
| console.warn(`❌ Fallback ${fallback.name} failed:`, error.message); | |
| } | |
| } | |
| throw new Error('All endpoints failed'); | |
| } | |
| // ساخت درخواست | |
| async makeRequest(apiConfig, endpoint, params = {}) { | |
| let url = `${apiConfig.baseUrl}${endpoint}`; | |
| // Add query params | |
| const queryParams = new URLSearchParams(); | |
| if (apiConfig.key) { | |
| queryParams.append('apikey', apiConfig.key); | |
| } | |
| Object.entries(params).forEach(([key, value]) => { | |
| queryParams.append(key, value); | |
| }); | |
| if (queryParams.toString()) { | |
| url += '?' + queryParams.toString(); | |
| } | |
| const options = {}; | |
| // Add headers if needed | |
| if (apiConfig.headerKey && apiConfig.key) { | |
| options.headers = { | |
| [apiConfig.headerKey]: apiConfig.key | |
| }; | |
| } | |
| // Use proxy if needed | |
| if (apiConfig.needsProxy) { | |
| return await this.fetchWithProxy(url, options); | |
| } else { | |
| return await this.fetchDirect(url, options); | |
| } | |
| } | |
| // ═══════════════ SPECIFIC API METHODS ═══════════════ | |
| // Get ETH Balance (با fallback) | |
| async getEthBalance(address) { | |
| const { ethereum } = this.config.explorers; | |
| return await this.fetchWithFallback( | |
| ethereum.primary, | |
| ethereum.fallbacks, | |
| '', | |
| { | |
| module: 'account', | |
| action: 'balance', | |
| address: address, | |
| tag: 'latest' | |
| } | |
| ); | |
| } | |
| // Get BTC Price (multi-source) | |
| async getBitcoinPrice() { | |
| const { marketData } = this.config; | |
| try { | |
| // Try CoinGecko first (no key needed, no CORS) | |
| const data = await this.fetchDirect( | |
| `${marketData.primary.baseUrl}/simple/price?ids=bitcoin&vs_currencies=usd,eur` | |
| ); | |
| return { | |
| source: 'CoinGecko', | |
| usd: data.bitcoin.usd, | |
| eur: data.bitcoin.eur | |
| }; | |
| } catch (error) { | |
| // Fallback to Binance | |
| try { | |
| const data = await this.fetchDirect( | |
| 'https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT' | |
| ); | |
| return { | |
| source: 'Binance', | |
| usd: parseFloat(data.price), | |
| eur: null | |
| }; | |
| } catch (err) { | |
| throw new Error('All price sources failed'); | |
| } | |
| } | |
| } | |
| // Get Fear & Greed Index | |
| async getFearGreed() { | |
| const url = `${this.config.sentiment.primary.baseUrl}/?limit=1`; | |
| const data = await this.fetchDirect(url); | |
| return { | |
| value: parseInt(data.data[0].value), | |
| classification: data.data[0].value_classification, | |
| timestamp: new Date(parseInt(data.data[0].timestamp) * 1000) | |
| }; | |
| } | |
| // Get Trending Coins | |
| async getTrendingCoins() { | |
| const url = `${this.config.marketData.primary.baseUrl}/search/trending`; | |
| const data = await this.fetchDirect(url); | |
| return data.coins.map(item => ({ | |
| id: item.item.id, | |
| name: item.item.name, | |
| symbol: item.item.symbol, | |
| rank: item.item.market_cap_rank, | |
| thumb: item.item.thumb | |
| })); | |
| } | |
| // Get Crypto News | |
| async getCryptoNews(limit = 10) { | |
| const url = `${this.config.news.primary.baseUrl}/posts/?public=true`; | |
| const data = await this.fetchDirect(url); | |
| return data.results.slice(0, limit).map(post => ({ | |
| title: post.title, | |
| url: post.url, | |
| source: post.source.title, | |
| published: new Date(post.published_at) | |
| })); | |
| } | |
| // Get Recent Whale Transactions | |
| async getWhaleTransactions() { | |
| try { | |
| const url = `${this.config.whaleTracking.primary.baseUrl}/whales/recent`; | |
| return await this.fetchDirect(url); | |
| } catch (error) { | |
| console.warn('Whale API not available'); | |
| return []; | |
| } | |
| } | |
| // Multi-source price aggregator | |
| async getAggregatedPrice(symbol) { | |
| const sources = [ | |
| { | |
| name: 'CoinGecko', | |
| fetch: async () => { | |
| const data = await this.fetchDirect( | |
| `${this.config.marketData.primary.baseUrl}/simple/price?ids=${symbol}&vs_currencies=usd` | |
| ); | |
| return data[symbol]?.usd; | |
| } | |
| }, | |
| { | |
| name: 'Binance', | |
| fetch: async () => { | |
| const data = await this.fetchDirect( | |
| `https://api.binance.com/api/v3/ticker/price?symbol=${symbol.toUpperCase()}USDT` | |
| ); | |
| return parseFloat(data.price); | |
| } | |
| }, | |
| { | |
| name: 'CoinCap', | |
| fetch: async () => { | |
| const data = await this.fetchDirect( | |
| `https://api.coincap.io/v2/assets/${symbol}` | |
| ); | |
| return parseFloat(data.data.priceUsd); | |
| } | |
| } | |
| ]; | |
| const prices = await Promise.allSettled( | |
| sources.map(async source => ({ | |
| source: source.name, | |
| price: await source.fetch() | |
| })) | |
| ); | |
| const successful = prices | |
| .filter(p => p.status === 'fulfilled') | |
| .map(p => p.value); | |
| if (successful.length === 0) { | |
| throw new Error('All price sources failed'); | |
| } | |
| const avgPrice = successful.reduce((sum, p) => sum + p.price, 0) / successful.length; | |
| return { | |
| symbol, | |
| sources: successful, | |
| average: avgPrice, | |
| spread: Math.max(...successful.map(p => p.price)) - Math.min(...successful.map(p => p.price)) | |
| }; | |
| } | |
| } | |
| // ═══════════════════════════════════════════════════════════════════════════════ | |
| // USAGE EXAMPLES - مثالهای استفاده | |
| // ═══════════════════════════════════════════════════════════════════════════════ | |
| // Initialize | |
| const api = new CryptoAPIClient(API_CONFIG); | |
| // Example 1: Get Ethereum Balance | |
| async function example1() { | |
| try { | |
| const address = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb'; | |
| const balance = await api.getEthBalance(address); | |
| console.log('ETH Balance:', parseInt(balance.result) / 1e18); | |
| } catch (error) { | |
| console.error('Error:', error.message); | |
| } | |
| } | |
| // Example 2: Get Bitcoin Price from Multiple Sources | |
| async function example2() { | |
| try { | |
| const price = await api.getBitcoinPrice(); | |
| console.log(`BTC Price (${price.source}): $${price.usd}`); | |
| } catch (error) { | |
| console.error('Error:', error.message); | |
| } | |
| } | |
| // Example 3: Get Fear & Greed Index | |
| async function example3() { | |
| try { | |
| const fng = await api.getFearGreed(); | |
| console.log(`Fear & Greed: ${fng.value} (${fng.classification})`); | |
| } catch (error) { | |
| console.error('Error:', error.message); | |
| } | |
| } | |
| // Example 4: Get Trending Coins | |
| async function example4() { | |
| try { | |
| const trending = await api.getTrendingCoins(); | |
| console.log('Trending Coins:'); | |
| trending.forEach((coin, i) => { | |
| console.log(`${i + 1}. ${coin.name} (${coin.symbol})`); | |
| }); | |
| } catch (error) { | |
| console.error('Error:', error.message); | |
| } | |
| } | |
| // Example 5: Get Latest News | |
| async function example5() { | |
| try { | |
| const news = await api.getCryptoNews(5); | |
| console.log('Latest News:'); | |
| news.forEach((article, i) => { | |
| console.log(`${i + 1}. ${article.title} - ${article.source}`); | |
| }); | |
| } catch (error) { | |
| console.error('Error:', error.message); | |
| } | |
| } | |
| // Example 6: Aggregate Price from Multiple Sources | |
| async function example6() { | |
| try { | |
| const priceData = await api.getAggregatedPrice('bitcoin'); | |
| console.log('Price Sources:'); | |
| priceData.sources.forEach(s => { | |
| console.log(`- ${s.source}: $${s.price.toFixed(2)}`); | |
| }); | |
| console.log(`Average: $${priceData.average.toFixed(2)}`); | |
| console.log(`Spread: $${priceData.spread.toFixed(2)}`); | |
| } catch (error) { | |
| console.error('Error:', error.message); | |
| } | |
| } | |
| // Example 7: Dashboard - All Data | |
| async function dashboardExample() { | |
| console.log('🚀 Loading Crypto Dashboard...\n'); | |
| try { | |
| // Price | |
| const btcPrice = await api.getBitcoinPrice(); | |
| console.log(`💰 BTC: $${btcPrice.usd.toLocaleString()}`); | |
| // Fear & Greed | |
| const fng = await api.getFearGreed(); | |
| console.log(`😱 Fear & Greed: ${fng.value} (${fng.classification})`); | |
| // Trending | |
| const trending = await api.getTrendingCoins(); | |
| console.log(`\n🔥 Trending:`); | |
| trending.slice(0, 3).forEach((coin, i) => { | |
| console.log(` ${i + 1}. ${coin.name}`); | |
| }); | |
| // News | |
| const news = await api.getCryptoNews(3); | |
| console.log(`\n📰 Latest News:`); | |
| news.forEach((article, i) => { | |
| console.log(` ${i + 1}. ${article.title.substring(0, 50)}...`); | |
| }); | |
| } catch (error) { | |
| console.error('Dashboard Error:', error.message); | |
| } | |
| } | |
| // Run examples | |
| console.log('═══════════════════════════════════════'); | |
| console.log(' CRYPTO API CLIENT - TEST SUITE'); | |
| console.log('═══════════════════════════════════════\n'); | |
| // Uncomment to run specific examples: | |
| // example1(); | |
| // example2(); | |
| // example3(); | |
| // example4(); | |
| // example5(); | |
| // example6(); | |
| dashboardExample(); | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| 📝 QUICK REFERENCE - مرجع سریع | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| BEST FREE APIs (بهترین APIهای رایگان): | |
| ───────────────────────────────────────── | |
| ✅ PRICES & MARKET DATA: | |
| 1. CoinGecko (بدون کلید، بدون CORS) | |
| 2. Binance Public API (بدون کلید) | |
| 3. CoinCap (بدون کلید) | |
| 4. CoinPaprika (بدون کلید) | |
| ✅ BLOCK EXPLORERS: | |
| 1. Blockchair (1,440 req/day) | |
| 2. BlockScout (بدون محدودیت) | |
| 3. Public RPC nodes (various) | |
| ✅ NEWS: | |
| 1. CryptoPanic (بدون کلید) | |
| 2. Reddit JSON API (60 req/min) | |
| ✅ SENTIMENT: | |
| 1. Alternative.me F&G (بدون محدودیت) | |
| ✅ WHALE TRACKING: | |
| 1. ClankApp (بدون کلید) | |
| 2. BitQuery GraphQL (10K/month) | |
| ✅ RPC NODES: | |
| 1. PublicNode (همه شبکهها) | |
| 2. Ankr (عمومی) | |
| 3. LlamaNodes (بدون ثبتنام) | |
| RATE LIMIT STRATEGIES (استراتژیهای محدودیت): | |
| ─────────────────────────────────────────────── | |
| 1. کش کردن (Caching): | |
| - ذخیره نتایج برای 1-5 دقیقه | |
| - استفاده از localStorage برای کش مرورگر | |
| 2. چرخش کلید (Key Rotation): | |
| - استفاده از چندین کلید API | |
| - تعویض خودکار در صورت محدودیت | |
| 3. Fallback Chain: | |
| - Primary → Fallback1 → Fallback2 | |
| - تا 5-10 جایگزین برای هر سرویس | |
| 4. Request Queuing: | |
| - صف بندی درخواستها | |
| - تاخیر بین درخواستها | |
| 5. Multi-Source Aggregation: | |
| - دریافت از چند منبع همزمان | |
| - میانگین گیری نتایج | |
| ERROR HANDLING (مدیریت خطا): | |
| ────────────────────────────── | |
| try { | |
| const data = await api.fetchWithFallback(primary, fallbacks, endpoint, params); | |
| } catch (error) { | |
| if (error.message.includes('rate limit')) { | |
| // Switch to fallback | |
| } else if (error.message.includes('CORS')) { | |
| // Use CORS proxy | |
| } else { | |
| // Show error to user | |
| } | |
| } | |
| DEPLOYMENT TIPS (نکات استقرار): | |
| ───────────────────────────────── | |
| 1. Backend Proxy (توصیه میشود): | |
| - Node.js/Express proxy server | |
| - Cloudflare Worker | |
| - Vercel Serverless Function | |
| 2. Environment Variables: | |
| - ذخیره کلیدها در .env | |
| - عدم نمایش در کد فرانتاند | |
| 3. Rate Limiting: | |
| - محدودسازی درخواست کاربر | |
| - استفاده از Redis برای کنترل | |
| 4. Monitoring: | |
| - لاگ گرفتن از خطاها | |
| - ردیابی استفاده از API | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| 🔗 USEFUL LINKS - لینکهای مفید | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| DOCUMENTATION: | |
| • CoinGecko API: https://www.coingecko.com/api/documentation | |
| • Etherscan API: https://docs.etherscan.io | |
| • BscScan API: https://docs.bscscan.com | |
| • TronGrid: https://developers.tron.network | |
| • Alchemy: https://docs.alchemy.com | |
| • Infura: https://docs.infura.io | |
| • The Graph: https://thegraph.com/docs | |
| • BitQuery: https://docs.bitquery.io | |
| CORS PROXY ALTERNATIVES: | |
| • CORS Anywhere: https://github.com/Rob--W/cors-anywhere | |
| • AllOrigins: https://github.com/gnuns/allOrigins | |
| • CORS.SH: https://cors.sh | |
| • Corsfix: https://corsfix.com | |
| RPC LISTS: | |
| • ChainList: https://chainlist.org | |
| • Awesome RPC: https://github.com/arddluma/awesome-list-rpc-nodes-providers | |
| TOOLS: | |
| • Postman: https://www.postman.com | |
| • Insomnia: https://insomnia.rest | |
| • GraphiQL: https://graphiql-online.com | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| ⚠️ IMPORTANT NOTES - نکات مهم | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| 1. ⚠️ NEVER expose API keys in frontend code | |
| - همیشه از backend proxy استفاده کنید | |
| - کلیدها را در environment variables ذخیره کنید | |
| 2. 🔄 Always implement fallbacks | |
| - حداقل 2-3 جایگزین برای هر سرویس | |
| - تست منظم fallbackها | |
| 3. 💾 Cache responses when possible | |
| - صرفهجویی در استفاده از API | |
| - سرعت بیشتر برای کاربر | |
| 4. 📊 Monitor API usage | |
| - ردیابی تعداد درخواستها | |
| - هشدار قبل از رسیدن به محدودیت | |
| 5. 🔐 Secure your endpoints | |
| - محدودسازی domain | |
| - استفاده از CORS headers | |
| - Rate limiting برای کاربران | |
| 6. 🌐 Test with and without CORS proxies | |
| - برخی APIها CORS را پشتیبانی میکنند | |
| - استفاده از پروکسی فقط در صورت نیاز | |
| 7. 📱 Mobile-friendly implementations | |
| - بهینهسازی برای شبکههای ضعیف | |
| - کاهش اندازه درخواستها | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| END OF CONFIGURATION FILE | |
| پایان فایل تنظیمات | |
| ═══════════════════════════════════════════════════════════════════════════════════════ | |
| Last Updated: October 31, 2025 | |
| Version: 2.0 | |
| Author: AI Assistant | |
| License: Free to use | |
| For updates and more resources, check: | |
| - GitHub: Search for "awesome-crypto-apis" | |
| - Reddit: r/CryptoCurrency, r/ethdev | |
| - Discord: Web3 developer communities |