generated from fahricansecer/boilerplate-fe
main
All checks were successful
UI Deploy - indir.bilgich.com 🎨 / build-and-deploy (push) Successful in 4m8s
All checks were successful
UI Deploy - indir.bilgich.com 🎨 / build-and-deploy (push) Successful in 4m8s
This commit is contained in:
169
mds/2026-03-05-social-media-downloader.md
Normal file
169
mds/2026-03-05-social-media-downloader.md
Normal file
@@ -0,0 +1,169 @@
|
||||
# AI Session Log - 2026-03-05
|
||||
|
||||
## Overview
|
||||
|
||||
Bu oturumda sosyal medya video indirici özelliği tasarlandı ve implemente edildi.
|
||||
|
||||
## 1. Mimari Planlama
|
||||
|
||||
**İstek:** Sosyal medya platformlarından (YouTube, Instagram, TikTok, X, Facebook) video indirme özelliği.
|
||||
|
||||
**Kararlar:**
|
||||
|
||||
- Next.js API Routes kullanıldı (backend ayrı servis gereksinimi yok)
|
||||
- ~~Cobalt API (public instance) entegrasyonu~~ → Cobalt API v7 Kasım 2024'te kapatıldı
|
||||
- **ab-downloader npm paketi** entegre edildi (kullanıcının isteği üzerine)
|
||||
- Auth sistemi gereksiz (basit, herkes kullanabilir)
|
||||
- IP-based rate limiting (abuse önleme)
|
||||
|
||||
**Plan Dosyası:** `plans/social-media-downloader-plan.md`
|
||||
|
||||
## 2. Oluşturulan Dosyalar
|
||||
|
||||
### Types
|
||||
|
||||
- `src/types/download.ts` - TypeScript tip tanımları
|
||||
- `src/types/ab-downloader.d.ts` - ab-downloader için type declarations
|
||||
|
||||
### Backend (API Routes)
|
||||
|
||||
- `src/app/api/download/route.ts` - Ana download endpoint
|
||||
|
||||
### Utilities
|
||||
|
||||
- `src/lib/download/platform-detector.ts` - URL'den platform tespiti
|
||||
- `src/lib/download/downloader.ts` - ab-downloader wrapper (platform-specific fonksiyonlar)
|
||||
- `src/lib/security/url-validator.ts` - URL validation ve sanitization
|
||||
- `src/lib/security/rate-limiter.ts` - IP-based rate limiting
|
||||
|
||||
### Frontend Components
|
||||
|
||||
- `src/components/site/download/download-form.tsx` - URL input form
|
||||
- `src/components/site/download/download-result.tsx` - Sonuç görüntüleme
|
||||
- `src/app/[locale]/page.tsx` - Ana sayfa (download formu içeriyor)
|
||||
|
||||
### i18n
|
||||
|
||||
- `messages/en.json` - İngilizce çeviriler (download bölümü)
|
||||
- `messages/tr.json` - Türkçe çeviriler (download bölümü)
|
||||
|
||||
### Navigation
|
||||
|
||||
- `src/config/navigation.ts` - Basitleştirildi (sadece home linki)
|
||||
- `src/proxy.ts` - Auth gereksinimi kaldırıldı (herkes erişebilir)
|
||||
|
||||
## 3. ab-downloader Entegrasyonu
|
||||
|
||||
### Paket Bilgisi
|
||||
|
||||
- **Paket:** `ab-downloader`
|
||||
- **Kaynak:** https://www.npmjs.com/package/ab-downloader
|
||||
- **Versiyon:** 5.0.0
|
||||
|
||||
### Desteklenen Platformlar
|
||||
|
||||
| Platform | Fonksiyon | Notlar |
|
||||
|----------|-----------|--------|
|
||||
| Instagram | `igdl()` | Array döndürür |
|
||||
| YouTube | `youtube()` | - |
|
||||
| TikTok | `ttdl()` | - |
|
||||
| Twitter/X | `twitter()` | - |
|
||||
| Facebook | `fbdown()` | - |
|
||||
| Generic | `aio()` | Auto-detect |
|
||||
|
||||
### Response Format
|
||||
|
||||
```typescript
|
||||
interface DownloadResult {
|
||||
url: string; // Direct download URL
|
||||
title?: string; // Video title
|
||||
thumbnail?: string; // Thumbnail URL
|
||||
developer?: string; // "AbroCodes"
|
||||
contactme?: string; // "Telegram: abrocodes"
|
||||
}
|
||||
```
|
||||
|
||||
### Örnek Kullanım
|
||||
|
||||
```typescript
|
||||
import { igdl } from 'ab-downloader';
|
||||
|
||||
const result = await igdl('https://www.instagram.com/reel/xxx/');
|
||||
// result bir array: [{ url, thumbnail, ... }]
|
||||
const downloadUrl = result[0].url;
|
||||
```
|
||||
|
||||
## 4. API Endpoint
|
||||
|
||||
### POST /api/download
|
||||
|
||||
**Request:**
|
||||
|
||||
```json
|
||||
{
|
||||
"url": "https://www.instagram.com/reel/xxx/"
|
||||
}
|
||||
```
|
||||
|
||||
**Response (Success):**
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"downloadUrl": "https://d.rapidcdn.app/...",
|
||||
"filename": "instagram_1772720934409.mp4",
|
||||
"platform": "instagram",
|
||||
"thumbnail": "https://d.rapidcdn.app/thumb?..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Response (Error):**
|
||||
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"error": {
|
||||
"code": "error.download.failed",
|
||||
"message": "Video indirilemedi"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 5. Güvenlik Önlemleri
|
||||
|
||||
- **URL Validation:** Sadece desteklenen platformlardan URL'lere izin verilir
|
||||
- **Rate Limiting:** IP başına 10 istek/saat limiti
|
||||
- **HTTPS Only:** Sadece HTTPS URL'ler kabul edilir
|
||||
- **Request Timeout:** 30 saniye timeout
|
||||
|
||||
## 6. Test Sonuçları
|
||||
|
||||
### Instagram Test
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:3001/api/download \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"url":"https://www.instagram.com/reel/DVejgkGkUPU/"}'
|
||||
```
|
||||
|
||||
**Sonuç:** ✅ Başarılı - Download URL ve thumbnail döndü
|
||||
|
||||
## 7. Önemli Notlar
|
||||
|
||||
1. **Cobalt API Kapatıldı:** Cobalt API v7 Kasım 2024'te kapatıldığı için `ab-downloader` paketine geçildi
|
||||
2. **Array Response:** `igdl()` fonksiyonu array döndürüyor, bu yüzden `getFirstResult()` helper fonksiyonu kullanılıyor
|
||||
3. **Type Declarations:** Paket TypeScript support içermiyor, bu yüzden `src/types/ab-downloader.d.ts` oluşturuldu
|
||||
|
||||
## 8. Gelecek İyileştirmeler
|
||||
|
||||
1. Video kalite seçimi
|
||||
2. Sadece ses indirme seçeneği
|
||||
3. Download progress indicator
|
||||
4. Video thumbnail gösterimi (önbellek ile)
|
||||
5. Çoklu dil desteği genişletme
|
||||
|
||||
## Summary
|
||||
|
||||
Sosyal medya indirici özelliği başarıyla implemente edildi. Cobalt API'nin kapatılması nedeniyle `ab-downloader` npm paketi kullanıldı. Instagram videosu başarıyla indirildi ve test edildi. Tüm kod TypeScript ile strict modda yazıldı ve projenin mevcut mimarisine uygun şekilde geliştirildi.
|
||||
Reference in New Issue
Block a user