![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/soundstudiopro.com/public_html/ |
<?php
require_once 'config/database.php';
echo "<h1>🚀 Direct Track Sync</h1>";
$pdo = getDBConnection();
$API_KEY = '63edba40620216c5aa2c04240ac41dbd';
$API_URL = 'https://api.api.box';
// Function to fetch all tracks from API
function fetchAllTracksFromAPI($apiKey, $apiUrl) {
$allTracks = [];
$page = 1;
$perPage = 50;
echo "<h2>Fetching tracks from API...</h2>";
while (true) {
$url = $apiUrl . "/api/v1/tracks?page=$page&per_page=$perPage";
echo "<p>Fetching page $page...</p>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
echo "<p style='color: red;'>❌ cURL Error: $error</p>";
break;
}
if ($httpCode !== 200) {
echo "<p style='color: red;'>❌ API Error: HTTP $httpCode</p>";
echo "<p>Response: $response</p>";
break;
}
$data = json_decode($response, true);
if (!$data || !isset($data['data']) || empty($data['data'])) {
echo "<p>No more tracks found on page $page</p>";
break;
}
$allTracks = array_merge($allTracks, $data['data']);
echo "<p style='color: green;'>✅ Found " . count($data['data']) . " tracks on page $page</p>";
if (count($data['data']) < $perPage) {
break;
}
$page++;
if ($page > 20) {
echo "<p>Safety limit reached (20 pages)</p>";
break;
}
}
echo "<p style='color: green;'>✅ Total tracks fetched from API: " . count($allTracks) . "</p>";
return $allTracks;
}
// Function to create track in database
function createTrackInDatabase($pdo, $trackData) {
try {
$taskId = $trackData['id'] ?? $trackData['task_id'] ?? null;
$title = $trackData['title'] ?? 'Untitled Track';
$prompt = $trackData['prompt'] ?? '';
$status = $trackData['status'] ?? 'processing';
$audioUrl = $trackData['audio_url'] ?? $trackData['source_audio_url'] ?? null;
$duration = $trackData['duration'] ?? null;
if (!$taskId) {
return ['success' => false, 'error' => 'No task_id found'];
}
// Check if track already exists
$stmt = $pdo->prepare("SELECT id FROM music_tracks WHERE task_id = ?");
$stmt->execute([$taskId]);
if ($stmt->fetch()) {
return ['success' => false, 'error' => 'Track already exists'];
}
// Create the track
$stmt = $pdo->prepare("
INSERT INTO music_tracks
(user_id, task_id, title, prompt, music_type, model_version, duration, status, audio_url, metadata, created_at, updated_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())
");
$metadata = json_encode($trackData);
$stmt->execute([
1, // Default user_id
$taskId,
$title,
$prompt,
$trackData['music_type'] ?? 'ai_generated',
$trackData['model_version'] ?? 'v1',
$duration,
$status,
$audioUrl,
$metadata
]);
return ['success' => true, 'id' => $pdo->lastInsertId()];
} catch (Exception $e) {
return ['success' => false, 'error' => $e->getMessage()];
}
}
// Main sync process
echo "<h2>Starting sync process...</h2>";
try {
// Get current database count
$stmt = $pdo->query("SELECT COUNT(*) as total FROM music_tracks");
$currentCount = $stmt->fetchColumn();
echo "<p>Current tracks in database: $currentCount</p>";
// Fetch all tracks from API
$apiTracks = fetchAllTracksFromAPI($API_KEY, $API_URL);
if (empty($apiTracks)) {
echo "<p style='color: red;'>❌ No tracks found in API</p>";
exit;
}
echo "<h2>Processing tracks...</h2>";
$created = 0;
$skipped = 0;
$errors = 0;
foreach ($apiTracks as $track) {
$result = createTrackInDatabase($pdo, $track);
if ($result['success']) {
$created++;
echo "<p style='color: green;'>✅ Created: " . ($track['title'] ?? 'Untitled') . "</p>";
} else {
if (strpos($result['error'], 'already exists') !== false) {
$skipped++;
echo "<p style='color: blue;'>⏭️ Skipped: " . ($track['title'] ?? 'Untitled') . " (already exists)</p>";
} else {
$errors++;
echo "<p style='color: red;'>❌ Error: " . ($track['title'] ?? 'Untitled') . " - " . $result['error'] . "</p>";
}
}
}
// Get final database count
$stmt = $pdo->query("SELECT COUNT(*) as total FROM music_tracks");
$finalCount = $stmt->fetchColumn();
echo "<h2>Sync Complete!</h2>";
echo "<p>API tracks found: " . count($apiTracks) . "</p>";
echo "<p>Tracks created: $created</p>";
echo "<p>Tracks skipped: $skipped</p>";
echo "<p>Errors: $errors</p>";
echo "<p>Database before: $currentCount</p>";
echo "<p>Database after: $finalCount</p>";
echo "<p>Total added: " . ($finalCount - $currentCount) . "</p>";
} catch (Exception $e) {
echo "<p style='color: red;'>❌ Sync failed: " . $e->getMessage() . "</p>";
}
?>