Python Soundcloud API
Project description
Soundcloud-lib
This is a Soundcloud API library that doesn't require a client ID to function. It's basic, it can really only fetch tracks and playlists, but doesn't require the user to go through the soundcloud app approval process.
Why
I once applied for API access and was approved. I used this access for months until it was revoked for some reason and all my emails and new applications were ignored. I decided to create a library that allows me to do Soundcloud API stuff without an approved application.
Features
- Supports asyncio
- Does not require a client ID
- Fetches and writes mp3 metadata (Album artist, title, artwork)
- Can fetch entire playlists of tracks
Installation
This library is installable as a pip package.
pip install soundcloud-lib
How
This library uses programming and algorithms to find a client ID that can be used to access the Soundcloud API.
Saving an mp3 to a file.
This will write the ID3 tags for album artist, track title AND will embed the album artwork into the mp3.
from sclib import SoundcloudAPI, Track, Playlist
api = SoundcloudAPI() # never pass a Soundcloud client ID that did not come from this library
track = api.resolve('https://soundcloud.com/itsmeneedle/sunday-morning')
assert type(track) is Track
filename = f'./{track.artist} - {track.title}.mp3'
with open(filename, 'wb+') as fp:
track.write_mp3_to(fp)
Fetch a playlist
from sclib import SoundcloudAPI, Track, Playlist
api = SoundcloudAPI()
playlist = api.resolve('https://soundcloud.com/playlist_url')
assert type(playlist) is Playlist
for track in playlist.tracks:
filename = f'./{track.artist} - {track.title}.mp3'
with open(filename, 'wb+') as fp:
track.write_mp3_to(fp)
Asyncio Support
from sclib.asyncio import SoundcloudAPI, Track
api = SoundcloudAPI()
track = await api.resolve('https://soundcloud.com/user/track')
assert type(track) is Track
filename = f'{track.artist} - {track.title}.mp3'
with open(filename, 'wb+') as fp:
await track.write_mp3_to(fp)
Fetch a playlist
from sclib.asyncio import SoundcloudAPI, Track, Playlist
api = SoundcloudAPI()
playlist = await api.resolve('https://soundcloud.com/playlist_url')
assert type(playlist) is Playlist
for track in playlist.tracks:
filename = f'./{track.artist} - {track.title}.mp3'
with open(filename, 'wb+') as fp:
await track.write_mp3_to(fp)
Write Album Name or Track Number
from sclib import SoundcloudAPI, Track, Playlist
playlist = SoundcloudAPI().resolve("https://soundcloud.com/user/sets/playlist_name")
for track_number, track in enumerate(playlist):
track.track_no = track_number
track.album = playlist.title
with open(f"{track.artist} - {track.title}.mp3", "wb+") as file:
track.write_mp3_to(file)
Bugs or Features
Please report any and all bugs using the issues tab.
Feel free to request new features too.
Contributing
Sure, submit a pull request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file soundcloud-lib-0.4.3.tar.gz
.
File metadata
- Download URL: soundcloud-lib-0.4.3.tar.gz
- Upload date:
- Size: 5.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 89da386c98e8250f32a1ae2a42f4b128eae210b0e40e8528ca27aa9252e1edf2 |
|
MD5 | e5efd8a60e73aa11f2e314e0f0fab249 |
|
BLAKE2b-256 | 2ec4ca3630bc6d1216f2b47aef4436fff380fd90560a1470d2c46240c7a15af2 |