Şifreli RSS/Feed Sistemi

Kategori & Genre MP3 Dağıtım Analizi

20 Mart 2026 v1 Analiz Raporu

Basit Anlatım (Herkes İçin)

🎯 Ne İstiyoruz?

Muzibu'daki müzik kategorilerini (genre, sektör, tür) başka sitelerin veya uygulamaların çekebilmesini istiyoruz. Ama herkes değil - sadece şifreyi/anahtarı bilen kişiler erişebilsin.

🔑 Şifreleme Ne Demek?

  • API Key: Her müşteriye özel bir anahtar (şifre) veriyoruz
  • Token: Bu anahtar olmadan feed'e erişilemiyor
  • Süre Sınırı: İstersek anahtarın geçerlilik süresi olabilir

📻 Kullanım Senaryoları

Senaryo 1: İş Yeri Radyosu

Bir kafe zinciri kendi uygulamasında Muzibu'dan "Cafe Jazz" kategorisini çekip çalıyor.

Senaryo 2: Podcast Uygulaması

Spotify/Apple Podcast benzeri bir uygulama, Muzibu feed'ini podcast gibi listeliyor.

Senaryo 3: Entegrasyon

Bir otel zinciri kendi sistemine Muzibu'dan "Lounge" kategorisini entegre ediyor.

Senaryo 4: Beyaz Etiket

Bir marka kendi adıyla Muzibu içeriklerini sunuyor (white-label).

Teknoloji Seçenekleri Karşılaştırması

Teknoloji Uyumluluk Şifreleme Geliştirme Öneri
RSS 2.0 + Enclosure
Podcast Standardı
⭐⭐⭐⭐⭐
Tüm cihazlar
⭐⭐⭐⭐
Token/Basic Auth
⭐⭐⭐⭐⭐
Kolay
ÖNERİLEN
JSON Feed + API Key
Modern REST API
⭐⭐⭐
Yazılımcılar
⭐⭐⭐⭐⭐
Tam kontrol
⭐⭐⭐⭐
Mevcut API var
ALTERNATİF
Atom Feed + OAuth
XML Standardı
⭐⭐⭐⭐
Modern sistemler
⭐⭐⭐⭐⭐
OAuth 2.0
⭐⭐⭐
Orta zorluk
KARMAŞIK
GraphQL Subscription
Real-time
⭐⭐
Sadece geliştiriciler
⭐⭐⭐⭐⭐
JWT + WebSocket
⭐⭐
Zor
AŞIRI

Önerilen Çözüm: Podcast RSS + API Token

Neden Bu?

  • Evrensel Uyumluluk: Spotify, Apple Podcasts, VLC, her podcast uygulaması RSS'i destekler
  • Basit Şifreleme: URL'de token = şifreyi bilmeyen erişemez
  • Mevcut Altyapı: Laravel Sanctum token sistemi zaten var
  • Kolay Yönetim: Admin panelden token oluştur/iptal et

Örnek URL Yapısı

# Genre Feed
https://muzibu.com/feed/genre/jazz
?token=abc123xyz789
# Sektör Feed
https://muzibu.com/feed/sector/cafe
?token=abc123xyz789
# Playlist Feed
https://muzibu.com/feed/playlist/123
?token=abc123xyz789

Teknik Detaylar (Geliştiriciler İçin)

RSS 2.0 Podcast Feed Yapısı

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
     xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Muzibu - Jazz Kategorisi</title>
    <link>https://muzibu.com/genres/jazz</link>
    <description>En iyi jazz parçaları</description>
    <language>tr</language>
    <itunes:category text="Music"/>
    <itunes:image href="https://muzibu.com/covers/jazz.jpg"/>

    <!-- Her şarkı bir item -->
    <item>
      <title>Take Five - Dave Brubeck</title>
      <description>Classic jazz piece from 1959</description>
      <pubDate>Mon, 20 Mar 2026 10:00:00 +0300</pubDate>
      <itunes:duration>5:24</itunes:duration>
      <itunes:image href="https://muzibu.com/covers/take-five.jpg"/>

      <!-- MP3 URL - Signed URL ile korunuyor -->
      <enclosure
        url="https://muzibu.com/stream/12345?sig=xyz&exp=1711000000"
        length="5242880"
        type="audio/mpeg"/>

      <guid isPermaLink="false">song-12345</guid>
    </item>

    <!-- Daha fazla şarkı... -->
  </channel>
</rss>

Oluşturulacak Dosyalar

Modules/Muzibu/
├── app/
│   ├── Http/
│   │   ├── Controllers/
│   │   │   └── Api/
│   │   │       └── FeedController.php          # RSS generator
│   │   └── Middleware/
│   │       └── ValidateFeedToken.php         # Token doğrulama
│   ├── Models/
│   │   └── FeedToken.php                     # Token model
│   └── Services/
│       └── RssFeedService.php                # Feed oluşturma servisi
├── database/
│   └── migrations/
│       └── tenant/
│           └── xxxx_create_feed_tokens_table.php
├── routes/
│   └── api.php                               # + Feed routes
└── resources/
    └── views/
        └── feed/
            └── rss.blade.php                 # RSS template

Token Tablosu Yapısı

Kolon Tip Açıklama
idbigintPrimary key
tokenvarchar(64)Benzersiz token (hash)
namevarcharToken adı (örn: "Starbucks TR")
user_idbigint nullableİlişkili kullanıcı (opsiyonel)
feedable_typevarcharGenre, Sector, Playlist
feedable_idbigintİlgili kayıt ID
permissionsjsonİzinler (stream, download, vs)
rate_limitintDakikada max istek
expires_attimestamp nullableSon kullanma tarihi
last_used_attimestamp nullableSon kullanım
is_activebooleanAktif/Pasif

API Route Yapısı

// routes/api.php

Route::prefix('feed')->middleware('feed.token')->group(function () {
    // RSS Feeds
    Route::get('/genre/{slug}', [FeedController::class, 'genre']);
    Route::get('/sector/{slug}', [FeedController::class, 'sector']);
    Route::get('/playlist/{id}', [FeedController::class, 'playlist']);
    Route::get('/artist/{slug}', [FeedController::class, 'artist']);

    // JSON Feeds (alternatif)
    Route::get('/genre/{slug}/json', [FeedController::class, 'genreJson']);
    Route::get('/sector/{slug}/json', [FeedController::class, 'sectorJson']);
});

// Stream endpoint - signed URL ile
Route::get('/stream/{songId}', [FeedController::class, 'stream'])
    ->middleware('signed');

Güvenlik Katmanları

1. Feed Token

Her müşteriye özel token. Token olmadan feed'e erişim yok. Admin panelden yönetim.

?token=abc123xyz789

2. Signed Stream URL

MP3 linkleri imzalı ve süreli. 30 dakika sonra geçersiz olur. Direkt paylaşılamaz.

?sig=xyz&exp=1711...

3. Rate Limiting

Token başına dakikada max istek limiti. Abuse durumunda otomatik engelleme.

rate_limit: 60/min

Ek Güvenlik Seçenekleri

IP Whitelist: Sadece belirli IP'lerden erişim
Zaman Kısıtı: Sadece belirli saatlerde erişim
Günlük Limit: Günde max X şarkı stream
Watermark: Ses dosyalarına görünmez damga

Admin Panel Yönetimi

Token Yönetimi Ekranı

Starbucks TR Aktif
Hilton Hotels Aktif
Demo Token 7 gün kaldı
Eski Müşteri Süresi doldu

Token Oluşturma

Starbucks TR - Jazz
Genre: Jazz
1 Yıl

Alternatif: JSON Feed API

RSS'e ek olarak, yazılımcılar için JSON formatında da feed sunulabilir:

{
  "feed": {
    "title": "Muzibu - Jazz Kategorisi",
    "home_page_url": "https://muzibu.com/genres/jazz",
    "feed_url": "https://muzibu.com/feed/genre/jazz/json?token=abc123",
    "description": "En iyi jazz parçaları",
    "icon": "https://muzibu.com/covers/jazz.jpg",
    "items": [
      {
        "id": "song-12345",
        "title": "Take Five",
        "artist": "Dave Brubeck",
        "album": "Time Out",
        "duration": 324,
        "duration_formatted": "5:24",
        "cover_url": "https://muzibu.com/covers/take-five.jpg",
        "stream_url": "https://muzibu.com/stream/12345?sig=xyz&exp=...",
        "published_at": "2026-03-20T10:00:00+03:00"
      }
    ],
    "next_page": "https://muzibu.com/feed/genre/jazz/json?token=abc123&page=2"
  }
}

Sonraki Adımlar

1

Onay

Bu yaklaşımı onaylarsanız, önce feed_tokens migration'ı için izin alacağım.

2

Migration Oluşturma

feed_tokens tablosu için 3 aşamalı onay süreci başlatılacak.

3

Feed Controller & Service

RSS generator, token middleware, stream endpoint.

4

Admin Panel

Token yönetimi için Livewire component.

5

Test & Dökümantasyon

Farklı podcast uygulamalarında test, müşteri dökümantasyonu.