Bir TikTok video indirici oluşturmak basit bir iş gibi görünebilir, ancak bunu üretimde kullanıma sokmaya çalıştığınızda işler karmaşıklaşabilir. Kısa URL’ler, slayt gösterisi gönderileri, 403 hataları, bot kısıtlamaları ve platform güncellemeleri ile basit bir uygulama hızla başarısız olabilir.
<p>Bu kılavuzda, <strong>Laravel</strong> ve <strong>yt-dlp</strong> kullanarak güvenilir bir TikTok video indirici nasıl oluşturacağınızı öğreneceksiniz. Gerçek dünya kullanımı için yapılandırılmış bir rehber sunulacaktır.</p>
<hr/>
<h2>Neden API Yerine yt-dlp Kullanmalısınız?</h2>
<p>İki ana yaklaşım vardır:</p>
<ul>
<li>Üçüncü bir parti API kullanmak</li>
<li>yt-dlp'yi doğrudan sunucunuzda kullanmak</li>
</ul>
<p>APIs genellikle bozulabilir, abonelik gerektirebilir veya oran sınırlamaları uygulayabilir. yt-dlp açık kaynaklıdır, aktif olarak bakımı yapılmaktadır ve TikTok çıkartmalarını yerel olarak yönetmektedir.</p>
<p>Üretim düzeyinde güvenilirlik için, yt-dlp uzun vadeli daha iyi bir çözümdür.</p>
<hr/>
<h2>Proje Mimarisi</h2>
<ol>
<li>Kullanıcı TikTok URL'sini yapıştırır</li>
<li>Laravel girişi doğrular ve temizler</li>
<li>Backend, yt-dlp JSON modunu kullanarak URL'yi araştırır</li>
<li>Video mu yoksa slayt gösterisi mi olduğunu belirler</li>
<li>Dosyayı indirir</li>
<li>Dosyayı kullanıcıya döner</li>
</ol>
<hr/>
<h2>Adım 1: Ubuntu Üzerinde yt-dlp'yi Kurun</h2>
<pre><code>sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlpsudo chmod a+rx /usr/local/bin/yt-dlp
yt-dlp –version
<p>Her zaman yt-dlp'yi güncel tutun:</p>
<pre><code>yt-dlp -U<hr/>
<h2>Adım 2: Laravel Kontrolcüsü Oluşturun</h2>
<pre><code>php artisan make:controller TikTokController<p>yt-dlp'yi güvenli bir şekilde çalıştırmak için Symfony Process kullanacağız.</p>
<hr/>
<h2>Adım 3: Video Meta Verilerini Araştırın</h2>
<pre><code>use Symfony\Component\Process\Process;
private function probeVideo($url)
{
$process = new Process([
‘yt-dlp’,
‘-J’,
‘–no-warnings’,
$url
]);
$process->setTimeout(20);
$process->run();
if (!$process->isSuccessful()) {
throw new \Exception("Video meta verileri alınamadı.");
}
return json_decode($process->getOutput(), true);}
<p>Bu, bağlantının bir video mu yoksa slayt gösterisi mi olduğunu tespit etmemizi sağlar.</p>
<hr/>
<h2>Adım 4: Video ve Slayt Gösterisini Tespit Etme</h2>
<pre><code>$info = $this->probeVideo($url);
$isSlideshow = isset($info[‘entries’]) && is_array($info[‘entries’]);
<p>Slayt gösterisi ise → birden fazla resmi işleyin.
Video ise → MP4 çıkarımına devam edin.</p>
<hr/>
<h2>Adım 5: Videoyu İndirin</h2>
<pre><code>private function downloadVideo($url)
{
$outputPath = storage_path(‘app/downloads/%(id)s.%(ext)s’);
$process = new Process([
'yt-dlp',
'-f', 'bv*+ba/b',
'--merge-output-format', 'mp4',
'-o', $outputPath,
$url
]);
$process->setTimeout(120);
$process->run();
if (!$process->isSuccessful()) {
throw new \Exception("İndirme başarısız oldu.");
}
return true;}
<hr/>
<h2>403 Hatalarını Yönetme</h2>
<p>TikTok sık sık kimlik doğrulama yapılmamış taramaları engeller.
Çözüm: tarayıcıdan dışa aktarılan çerezleri kullanın.</p>
<pre><code>‘yt-dlp’,
‘–cookies’, storage_path(‘app/cookies.txt’),
<p>Bu, güvenilirliği büyük ölçüde artırır.</p>
<hr/>
<h2>Güvenlik En İyi Uygulamaları</h2>
<ul>
<li>TikTok alanını doğrulayın</li>
<li>Symfony Process kullanın (shell_exec değil)</li>
<li>Zaman aşımını ayarlayın</li>
<li>Oran sınırlaması uygulayın</li>
<li>Eski dosyaları otomatik olarak silin</li>
</ul>
<p>Oran sınırlamasını ekleyin:</p>
<pre><code>Route::middleware(‘throttle:10,1’)->post(‘/download’, …);
<hr/>
<h2>Üretim Optimizasyonu</h2>
<h3>Kuyruk Görevlerini Kullanın</h3>
<pre><code>php artisan make:job DownloadTikTokVideo</code></pre>
<h3>Eski Dosyaları Temizleme</h3>
<pre><code>php artisan make:command CleanupDownloads</code></pre>
<p>1 saatten daha eski dosyaları silmek için cron planlayın.</p>
<hr/>
<h2>Yaygın Sorunlar</h2>
<h3>Desteklenmeyen URL</h3>
<p>Genellikle şu nedenlerden kaynaklanır:</p>
<ul>
<li>/photo/ slayt gösterisi bağlantıları</li>
<li>Güncel olmayan yt-dlp</li>
<li>Kısa URL'nin çözülmemesi</li>
</ul>
<h3>Rastgele İndirme Hataları</h3>
<ul>
<li>Eksik çerezler</li>
<li>Sunucu zaman aşımı</li>
<li>Bant genişliği sınırlamaları</li>
</ul>
<hr/>
<h2>Hukuki Hususlar</h2>
<ul>
<li>Uygun bir feragatname ekleyin</li>
<li>İçeriği kalıcı olarak depolamayın</li>
<li>Telif hakkı yasalarına saygı gösterin</li>
<li>Yanıltıcı markalardan kaçının</li>
</ul>
<hr/>
<h2>Son Düşünceler</h2>
<p>Bir TikTok indirici oluşturmak sadece bir komut çalıştırmakla ilgili değildir.
Doğru doğrulama, güvenli yürütme, sunucu optimizasyonu ve sürekli güncellemeler gerektirir.</p>
<p><strong>Laravel yapı sağlar.
yt-dlp çıkarım gücü sunar.
Birlikte, ölçeklenebilir bir çözüm yaratırlar.</strong></p>
<p>Doğru bir şekilde uygulanırsa, bu basit bir araçtan ciddi bir yan proje veya SaaS aracı haline gelebilir.</p>Kaynak: Orijinal Makale


