{"id":15018984,"url":"https://github.com/jerry08/soundcloudexplode","last_synced_at":"2025-10-24T01:30:24.800Z","repository":{"id":54310355,"uuid":"495913593","full_name":"jerry08/SoundCloudExplode","owner":"jerry08","description":"Parses public metadata on SoundCloud tracks/playlists and lets you download them.","archived":false,"fork":false,"pushed_at":"2024-11-01T12:04:13.000Z","size":181,"stargazers_count":37,"open_issues_count":2,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-01-30T22:08:43.696Z","etag":null,"topics":["downloader","downloadermp3","scdl","soundcloud","soundcloud-api","soundcloud-dl","soundcloud-downloader"],"latest_commit_sha":null,"homepage":"https://www.nuget.org/packages/SoundCloudExplode","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jerry08.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-24T16:57:33.000Z","updated_at":"2024-12-21T19:42:14.000Z","dependencies_parsed_at":"2023-11-15T01:25:54.399Z","dependency_job_id":"55c8fe68-42c6-4afa-bb64-3fa54fcc4441","html_url":"https://github.com/jerry08/SoundCloudExplode","commit_stats":{"total_commits":56,"total_committers":3,"mean_commits":"18.666666666666668","dds":0.4464285714285714,"last_synced_commit":"db1c0f7652b80110ced3bd4d77cefc0cffe0cb06"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jerry08%2FSoundCloudExplode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jerry08%2FSoundCloudExplode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jerry08%2FSoundCloudExplode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jerry08%2FSoundCloudExplode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jerry08","download_url":"https://codeload.github.com/jerry08/SoundCloudExplode/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237896902,"owners_count":19383608,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["downloader","downloadermp3","scdl","soundcloud","soundcloud-api","soundcloud-dl","soundcloud-downloader"],"created_at":"2024-09-24T19:52:43.203Z","updated_at":"2025-10-24T01:30:24.511Z","avatar_url":"https://github.com/jerry08.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n    SoundCloudExplode\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n   \u003ca href=\"https://discord.gg/U7XweVubJN\"\u003e\u003cimg src=\"https://img.shields.io/badge/Discord-7289DA?style=for-the-badge\u0026logo=discord\u0026logoColor=white\"\u003e\u003c/a\u003e\n   \u003ca href=\"https://github.com/jerry08/SoundCloudExplode\"\u003e\u003cimg src=\"https://img.shields.io/nuget/dt/SoundCloudExplode.svg?label=Downloads\u0026color=%233DDC84\u0026logo=nuget\u0026logoColor=%23fff\u0026style=for-the-badge\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n**SoundCloudExplode** is a library that provides an interface to query metadata of SoundCloud tracks and playlists, as well as to resolve and download streams.\n\n### 🌟STAR THIS REPOSITORY TO SUPPORT THE DEVELOPER AND ENCOURAGE THE DEVELOPMENT OF THE APPLICATION!\n\n\n## Install\n\n- 📦 [NuGet](https://nuget.org/packages/SoundCloudExplode): `dotnet add package SoundCloudExplode` (**main package**)\n\n## Usage\n\n**SoundCloudExplode** exposes its functionality through a single entry point — the `SoundCloudClient` class.\nCreate an instance of this class and use the provided operations to send requests.\n\n### Tracks\n\n#### Retrieving track metadata\n\nTo retrieve the metadata associated with a Soundcloud track, call `Tracks.GetAsync(...)`:\n\n```csharp\nusing SoundCloudExplode;\n\nvar soundcloud = new SoundCloudClient();\n\nvar track = await soundcloud.Tracks.GetAsync(\"https://soundcloud.com/purityy79/dororo-op-piano-sheet-in-description\");\n\nvar title = track.Title;\nvar duration = track.Duration;\n```\n\n### Playlists\n\n#### Retrieving playlist metadata\n\nYou can get the metadata associated with a Soundcloud playlist by calling `Playlists.GetAsync(...)` method:\n\n```csharp\nusing SoundCloudExplode;\n\nvar soundcloud = new SoundCloudClient();\n\n// Get a playlist basic information\nvar playlist = await soundcloud.Playlists.GetAsync(\n    \"https://soundcloud.com/tommy-enjoy/sets/aimer\"\n);\n\n// Or get playlist and load all related tracks at the same time\nvar playlist = await soundcloud.Playlists.GetAsync(\n    \"https://soundcloud.com/tommy-enjoy/sets/aimer\",\n    true\n);\n\nvar title = playlist.Title;\nvar artworkUrl = playlist.ArtworkUrl;\nvar tracks = playlist.Tracks;\n...\n```\n\n#### Getting tracks included in a playlist\n\nTo get the tracks included in a playlist, call `Playlists.GetTracksAsync(...)`:\n\n```csharp\nusing SoundCloudExplode;\nusing SoundCloudExplode.Common;\n\nvar soundcloud = new SoundCloudClient();\nvar playlistUrl = \"https://soundcloud.com/tommy-enjoy/sets/aimer\";\n\n// Get all playlist tracks\nvar tracks = await soundcloud.Playlists.GetTracksAsync(playlistUrl);\n\n// Get only the first 20 playlist tracks\nvar tracksSubset = await soundcloud.Playlists.GetTracksAsync(playlistUrl).CollectAsync(20);\n\n// Get only the first 20 playlist tracks (by setting a limit)\nvar tracksSubset = await soundcloud.Playlists.GetTracksAsync(playlistUrl, limit: 20);\n\n// Setting offset\nvar tracksSubset = await soundcloud.Playlists.GetTracksAsync(\n    playlistUrl,\n    offset: 10,\n    limit: 5\n);\n```\n\nYou can also enumerate the tracks iteratively without waiting for the whole list to load:\n\n```csharp\nusing SoundCloudExplode;\n\nvar soundcloud = new SoundCloudClient();\nvar playlistUrl = \"https://soundcloud.com/tommy-enjoy/sets/aimer\";\n\nawait foreach (var track in soundcloud.Playlists.GetTracksAsync(playlistUrl))\n{\n    var title = track.Title;\n    var duration = track.Duration;\n}\n```\n\nIf you need precise control over how many requests you send to SoundCloud, use `Playlists.GetTrackBatchesAsync(...)` which returns tracks wrapped in batches:\n\n```csharp\nusing SoundCloudExplode;\n\nvar soundcloud = new SoundCloudClient();\nvar playlistUrl = \"https://soundcloud.com/tommy-enjoy/sets/aimer\";\n\n// Each batch corresponds to one request\nawait foreach (var batch in soundcloud.Playlists.GetTrackBatchesAsync(playlistUrl))\n{\n    foreach (var track in batch.Items)\n    {\n        var title = track.Title;\n        var duration = track.Duration;\n    }\n}\n```\n\n### Albums\n**Note:** Use the same method as retrieving playlists to get albums because they are the same. \n\n### Searching\nYou can execute a search query and get its results by calling `Search.GetResultsAsync(...)`. Each result may represent either a track, a playlist, an album, or a user, so you need to apply pattern matching to handle the corresponding cases:\n\n```csharp\nusing SoundCloudExplode;\nusing SoundCloudExplode.Common;\n\nvar soundcloud = new SoundCloudClient();\n\nawait foreach (var result in soundcloud.Search.GetResultsAsync(\"banda neira\"))\n{\n    // Use pattern matching to handle different results (tracks, playlists, users)\n    switch (result)\n    {\n        case TrackSearchResult track:\n            {\n                var id = track.Id;\n                var title = track.Title;\n                var duration = track.Duration;\n                break;\n            }\n        // NOTE: Soundcloud handles playlist and albums the same way.\n        case PlaylistSearchResult playlist:\n            {\n                var id = playlist.Id;\n                var title = playlist.Title;\n                break;\n            }\n        case UserSearchResult user:\n            {\n                var id = user.Id;\n                var title = user.Title;\n                var userName = user.Username;\n                var fullName = user.FullName;\n                break;\n            }\n    }\n}\n```\n\nTo limit the results to a specific type, use `Search.GetTracksAsync(...)`, `Search.GetPlaylistsAsync(...)`, or `Search.GetUsersAsync(...)`\n\n```csharp\nusing SoundCloudExplode;\nusing SoundCloudExplode.Common;\n\nvar soundcloud = new SoundCloudClient();\n\nvar tracks = await soundcloud.Search.GetTracksAsync(\"banda neira\");\nvar playlists = await soundcloud.Search.GetPlaylistsAsync(\"banda neira\");\nvar users = await soundcloud.Search.GetUsersAsync(\"banda neira\");\n```\n\n#### Downloading tracks\n\n```csharp\nusing System;\nusing System.IO;\nusing SoundCloudExplode;\n\nvar soundcloud = new SoundCloudClient();\n\nvar track = await soundcloud.Tracks.GetAsync(\"https://soundcloud.com/purityy79/dororo-op-piano-sheet-in-description\");\n\nvar trackName = string.Join(\"_\", track.Title.Split(Path.GetInvalidFileNameChars()));\n\nawait soundcloud.DownloadAsync(track, $@\"{Environment.CurrentDirectory}\\Download\\{trackName}.mp3\");\n```\n\nYou can request the download url for a particular track by calling `Tracks.GetDownloadUrlAsync(...)`:\n\n```csharp\nusing SoundCloudExplode;\n\nvar soundcloud = new SoundCloudClient();\n\nvar track = await soundcloud.Tracks.GetAsync(\"https://soundcloud.com/purityy79/dororo-op-piano-sheet-in-description\");\n\nvar downloadUrl = await soundcloud.Tracks.GetDownloadUrlAsync(track);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjerry08%2Fsoundcloudexplode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjerry08%2Fsoundcloudexplode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjerry08%2Fsoundcloudexplode/lists"}