Skip to main content

Python Examples

Complete Python examples for the AudioSpliter API using the requests library.

Setup

pip install requests
export AUDIOSPLITER_API_KEY=as_live_abc123

Helper Class

import requests
import os
import time

class AudioSpliter:
BASE_URL = 'https://api.audiospliter.com/api/v1'

def __init__(self, api_key=None):
self.api_key = api_key or os.environ['AUDIOSPLITER_API_KEY']
self.session = requests.Session()
self.session.headers.update({
'X-API-Key': self.api_key,
'Content-Type': 'application/json',
})

def _request(self, method, path, **kwargs):
response = self.session.request(method, f'{self.BASE_URL}{path}', **kwargs)
response.raise_for_status()
if response.status_code == 204:
return None
return response.json()

def create_job(self, source_url, split_mode='duration', **kwargs):
return self._request('POST', '/splits', json={
'sourceUrl': source_url,
'splitMode': split_mode,
**kwargs,
})

def get_job(self, job_id):
return self._request('GET', f'/splits/{job_id}')

def list_jobs(self, **params):
return self._request('GET', '/splits', params=params)

def delete_job(self, job_id):
return self._request('DELETE', f'/splits/{job_id}')

def wait_for_completion(self, job_id, interval=5, timeout=300):
start = time.time()
while time.time() - start < timeout:
job = self.get_job(job_id)
if job['status'] == 'completed':
return job
if job['status'] == 'failed':
raise Exception(f"Job failed: {job.get('error', {}).get('message')}")
time.sleep(interval)
raise TimeoutError('Job did not complete within timeout')

Create and Wait

client = AudioSpliter()

job = client.create_job(
'https://example.com/podcast.mp3',
segmentDuration=600,
outputFormat='mp3',
)
print(f"Job {job['id']} created")

result = client.wait_for_completion(job['id'])
for segment in result['segments']:
print(f"Segment {segment['index']}: {segment['downloadUrl']}")

Download Segments

import os

def download_segments(job, output_dir='./segments'):
os.makedirs(output_dir, exist_ok=True)
for segment in job['segments']:
response = requests.get(segment['downloadUrl'])
filename = os.path.join(output_dir, f"segment-{segment['index']}.mp3")
with open(filename, 'wb') as f:
f.write(response.content)
print(f"Downloaded {filename} ({len(response.content)} bytes)")

Full Pipeline

client = AudioSpliter()

# Split
job = client.create_job(
'https://example.com/long-recording.wav',
splitMode='duration',
segmentDuration=600,
outputFormat='mp3',
)

# Wait
result = client.wait_for_completion(job['id'])

# Download
download_segments(result, './output')
print(f"Done! {len(result['segments'])} segments downloaded.")

Error Handling

from requests.exceptions import HTTPError

try:
job = client.create_job('https://example.com/audio.mp3', segmentDuration=600)
except HTTPError as e:
if e.response.status_code == 429:
retry_after = e.response.json()['error'].get('retryAfter', 30)
print(f"Rate limited. Retry after {retry_after}s")
elif e.response.status_code == 401:
print("Invalid API key")
else:
print(f"Error: {e.response.json()['error']['message']}")