# 🌍 ΠŸΡ€ΠΎΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ API для доступа ΠΈΠ· Π Π€ ## ΠžΠ±Π·ΠΎΡ€ NakamaSpace автоматичСски проксируСт всС запросы ΠΊ внСшним API (e621 ΠΈ gelbooru) Ρ‡Π΅Ρ€Π΅Π· ваш сСрвСр. Π­Ρ‚ΠΎ обСспСчиваСт Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΠ· Π Π€, Π³Π΄Π΅ эти рСсурсы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹. ## Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ### 1. API запросы ВсС запросы ΠΊ e621 ΠΈ gelbooru Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ **с вашСго сСрвСра**, Π° Π½Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°: ``` ΠšΠ»ΠΈΠ΅Π½Ρ‚ β†’ Π’Π°Ρˆ сСрвСр β†’ e621/gelbooru API β†’ Π’Π°Ρˆ сСрвСр β†’ ΠšΠ»ΠΈΠ΅Π½Ρ‚ ``` **Π­Π½Π΄ΠΏΠΎΠΈΠ½Ρ‚Ρ‹:** - `/api/search/furry` - поиск Π² e621 - `/api/search/anime` - поиск Π² gelbooru - `/api/search/furry/tags` - Π°Π²Ρ‚ΠΎΠΊΠΎΠΌΠΏΠ»ΠΈΡ‚ Ρ‚Π΅Π³ΠΎΠ² e621 - `/api/search/anime/tags` - Π°Π²Ρ‚ΠΎΠΊΠΎΠΌΠΏΠ»ΠΈΡ‚ Ρ‚Π΅Π³ΠΎΠ² gelbooru ### 2. ΠŸΡ€ΠΎΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ URL ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ автоматичСски ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² прокси-URL: **Π”ΠΎ:** ``` https://static1.e621.net/data/sample/12/34/1234567890abcdef.jpg ``` **ПослС:** ``` /api/search/proxy/aHR0cHM6Ly9zdGF0aWMxLmU2MjEubmV0L2RhdGEvc2FtcGxlLzEyLzM0LzEyMzQ1Njc4OTBhYmNkZWYuanBn ``` Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ стримятся Ρ‡Π΅Ρ€Π΅Π· ваш сСрвСр с ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π° 24 часа. ### 3. Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠŸΡ€ΠΎΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄ΠΎΠΌΠ΅Π½ΠΎΠ²: - `e621.net` - `static1.e621.net` - `gelbooru.com` - `img3.gelbooru.com` - `img2.gelbooru.com` - `img1.gelbooru.com` - `simg3.gelbooru.com` - `simg4.gelbooru.com` Запросы ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π΄ΠΎΠΌΠ΅Π½Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Ρ‹ с ошибкой 403. ## ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ### ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ 1. **Π‘Ρ‚Ρ€ΠΈΠΌΠΈΠ½Π³** - изобраТСния ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ 2. **ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅** - Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ `Cache-Control: public, max-age=86400` (24 часа) 3. **Π’Π°ΠΉΠΌΠ°ΡƒΡ‚** - 30 сСкунд для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния ### HTTP Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ```javascript { 'User-Agent': 'NakamaSpace/1.0', 'Referer': originalUrl.origin, 'Content-Type': // ΠΈΠ· ΠΎΡ‚Π²Π΅Ρ‚Π° источника 'Cache-Control': 'public, max-age=86400', 'Content-Length': // ΠΈΠ· ΠΎΡ‚Π²Π΅Ρ‚Π° источника } ``` ## ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ### Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ошибок ВсС ошибки проксирования Π»ΠΎΠ³ΠΈΡ€ΡƒΡŽΡ‚ΡΡ: ```javascript console.error('Ошибка проксирования изобраТСния:', error.message); ``` ### Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки 1. **403 Forbidden** - ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€ΠΎΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π½Ρ‹ΠΉ Π΄ΠΎΠΌΠ΅Π½ 2. **500 Internal Server Error** - ошибка Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ с источника 3. **Timeout** - источник Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ 30 сСкунд ## ВрСбования ΠΊ сСрвСру ### Π‘Π΅Ρ‚Π΅Π²ΠΎΠΉ доступ Π’Π°Ρˆ сСрвСр Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ **прямой доступ** ΠΊ: - `e621.net` (HTTPS) - `gelbooru.com` (HTTPS) **РСкомСндация:** ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ сСрвСр **Π²Π½Π΅ Π Π€** (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Railway EU/US, Heroku, DigitalOcean) ### ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ проксируСмых ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ: - Preview изобраТСния: ~100-500 KB - ΠŸΠΎΠ»Π½Ρ‹Π΅ изобраТСния: 1-10 MB - На 1000 запросов поиска: ~500 MB - 5 GB Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ## Код Основная рСализация находится Π²: ``` backend/routes/search.js ``` **ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:** - `createProxyUrl(originalUrl)` - конвСртация URL Π² прокси-URL - `GET /api/search/proxy/:encodedUrl` - эндпоинт проксирования ## ВСстированиС ### ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ прокси 1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Ρ€Π°Π·Π΄Π΅Π» "Поиск" 3. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ поиск ΠΏΠΎ Ρ‚Π΅Π³Ρƒ 4. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ DevTools β†’ Network 5. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ изобраТСния Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ с `/api/search/proxy/...` ### ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈΠ· Π Π€ 1. ΠŸΠΎΠΏΡ€ΠΎΡΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ· Π Π€ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 2. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Π±Π΅Π· VPN 3. Если Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ - ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ сСрвСр Π²Π½Π΅ Π Π€ ## FAQ ### Q: МоТно Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ источники? A: Π”Π°, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΄ΠΎΠΌΠ΅Π½ Π² `allowedDomains` ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… поиска. ### Q: ВлияСт Π»ΠΈ это Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ? A: Минимально. Π‘Ρ‚Ρ€ΠΈΠΌΠΈΠ½Π³ ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ. ΠŸΠ΅Ρ€Π²Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ - быстрСС благодаря ΠΊΡΡˆΡƒ. ### Q: НуТно Π»ΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ CDN? A: НСт, Π½ΠΎ рСкомСндуСтся для production с большим Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Cloudflare ΠΏΠ΅Ρ€Π΅Π΄ вашим сСрвСром. ### Q: Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ это Π² China? A: Частично. Зависит ΠΎΡ‚ Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ сСрвСра ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ. РСкомСндуСтся азиатский Ρ€Π΅Π³ΠΈΠΎΠ½ для китайских ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. ## ОбновлСниС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ проксировании Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²: - [x] `README.md` - Ρ€Π°Π·Π΄Π΅Π» "Поиск" - [x] `DEPLOYMENT.md` - Ρ€Π°Π·Π΄Π΅Π» "Π”ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΠ· Π Π€" - [x] `PROJECT_STRUCTURE.md` - список API эндпоинтов - [x] `SETUP.md` - список API эндпоинтов --- **Π“ΠΎΡ‚ΠΎΠ²ΠΎ!** πŸŽ‰ Π’Π°Ρˆ NakamaSpace Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ доступСн ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΈΠ· Π Π€ Π±Π΅Π· VPN!