PHP Examples
PHP examples using cURL for the AudioSpliter API.
Helper Function
<?php
function audiospliterRequest(string $method, string $path, array $data = null): array {
$apiKey = getenv('AUDIOSPLITER_API_KEY');
$url = 'https://api.audiospliter.com/api/v1' . $path;
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . $apiKey,
'Content-Type: application/json',
],
]);
if ($data !== null) {
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
}
$response = curl_exec($ch);
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($statusCode >= 400) {
$error = json_decode($response, true);
throw new Exception($error['error']['message'], $statusCode);
}
return $statusCode === 204 ? [] : json_decode($response, true);
}
Create a Split Job
$job = audiospliterRequest('POST', '/splits', [
'sourceUrl' => 'https://example.com/audio.mp3',
'splitMode' => 'duration',
'segmentDuration' => 600,
'outputFormat' => 'mp3',
]);
echo "Job created: {$job['id']}\n";
Poll for Completion
function waitForCompletion(string $jobId, int $interval = 5, int $timeout = 300): array {
$start = time();
while (time() - $start < $timeout) {
$job = audiospliterRequest('GET', "/splits/{$jobId}");
if ($job['status'] === 'completed') return $job;
if ($job['status'] === 'failed') {
throw new Exception("Job failed: " . ($job['error']['message'] ?? 'Unknown'));
}
sleep($interval);
}
throw new Exception('Timeout waiting for job');
}
$result = waitForCompletion($job['id']);
foreach ($result['segments'] as $segment) {
echo "Segment {$segment['index']}: {$segment['downloadUrl']}\n";
}
Download Segments
function downloadSegments(array $job, string $outputDir = './segments'): void {
if (!is_dir($outputDir)) {
mkdir($outputDir, 0755, true);
}
foreach ($job['segments'] as $segment) {
$filename = "{$outputDir}/segment-{$segment['index']}.mp3";
$content = file_get_contents($segment['downloadUrl']);
file_put_contents($filename, $content);
echo "Downloaded {$filename} (" . strlen($content) . " bytes)\n";
}
}
Webhook Handler (Laravel)
// routes/api.php
Route::post('/webhooks/audiospliter', function (Request $request) {
$signature = $request->header('X-AudioSpliter-Signature');
$payload = $request->getContent();
$secret = config('services.audiospliter.webhook_secret');
$expected = hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expected, $signature)) {
return response()->json(['error' => 'Invalid signature'], 401);
}
$data = $request->json()->all();
match ($data['event']) {
'job.completed' => ProcessCompletedJob::dispatch($data),
'job.failed' => HandleFailedJob::dispatch($data),
default => null,
};
return response()->json(['received' => true]);
});