Connect and download tracks using Soundcloud API using C # .NET

I am trying to upload a soundtrack to Soundcloud.com using C # .NET, but there are no resources for .NET anywhere. Can someone post a link or an example of how to upload an audio file to my Soundcloud.com account using .NET?

Thanks Arman

+7
source share
3 answers

To download audio using the soundcloud REST API, you need to take care of the HTTP-related HTTP messages (RFC 1867). In general, ASP.NET does not support sending multiple files / values ​​using POST, so I suggest you use the Krystalware library: http://aspnetupload.com/Upload-File-POST-HttpWebRequest-WebClient-RFC-1867.aspx

After that, you need to send the correct form fields to https://api.soundcloud.com/tracks url:

  • Auth token (oauth_token)
  • Track name (track [name])
  • File (track [asset_data])

Code example:

using Krystalware.UploadHelper; ... System.Net.ServicePointManager.Expect100Continue = false; var request = WebRequest.Create("https://api.soundcloud.com/tracks") as HttpWebRequest; //some default headers request.Accept = "*/*"; request.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3"); request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch"); request.Headers.Add("Accept-Language", "en-US,en;q=0.8,ru;q=0.6"); //file array var files = new UploadFile[] { new UploadFile(Server.MapPath("Downloads//0.mp3"), "track[asset_data]", "application/octet-stream") }; //other form data var form = new NameValueCollection(); form.Add("track[title]", "Some title"); form.Add("track[sharing]", "private"); form.Add("oauth_token", this.Token); form.Add("format", "json"); form.Add("Filename", "0.mp3"); form.Add("Upload", "Submit Query"); try { using (var response = HttpUploadHelper.Upload(request, files, form)) { using (var reader = new StreamReader(response.GetResponseStream())) { lblInfo.Text = reader.ReadToEnd(); } } } catch (Exception ex) { lblInfo.Text = ex.ToString(); } 

The sample code allows you to download an audio file from the server (pay attention to the Server.MapPath method to form the path to the file) and get a response in json format (reader.ReadToEnd)

+7
source

Here is a snippet of code to download a track through the SoundCloud API =>

  using (HttpClient httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.ConnectionClose = true; httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("MySoundCloudClient", "1.0")); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("OAuth", "MY_AUTH_TOKEN"); ByteArrayContent titleContent = new ByteArrayContent(Encoding.UTF8.GetBytes("my title")); ByteArrayContent sharingContent = new ByteArrayContent(Encoding.UTF8.GetBytes("private")); ByteArrayContent byteArrayContent = new ByteArrayContent(File.ReadAllBytes("MYFILENAME")); byteArrayContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); MultipartFormDataContent content = new MultipartFormDataContent(); content.Add(titleContent, "track[title]"); content.Add(sharingContent, "track[sharing]"); content.Add(byteArrayContent, "track[asset_data]", "MYFILENAME"); HttpResponseMessage message = await httpClient.PostAsync(new Uri("https://api.soundcloud.com/tracks"), content); if (message.IsSuccessStatusCode) { ... } 
+4
source

Here is another way to get a non-expiring token and load the track into SoundCloud using C #:

 public class SoundCloudService : ISoundPlatformService { public SoundCloudService() { Errors=new List<string>(); } private const string baseAddress = "https://api.soundcloud.com/"; public IList<string> Errors { get; set; } public async Task<string> GetNonExpiringTokenAsync() { using (var client = new HttpClient()) { client.BaseAddress = new Uri(baseAddress); var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("client_id","xxxxxx"), new KeyValuePair<string, string>("client_secret","xxxxxx"), new KeyValuePair<string, string>("grant_type","password"), new KeyValuePair<string, string>("username"," xx@xx.com "), new KeyValuePair<string, string>("password","xxxxx"), new KeyValuePair<string, string>("scope","non-expiring") }); var response = await client.PostAsync("oauth2/token", content); if (response.StatusCode == HttpStatusCode.OK) { dynamic data = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); return data.access_token; } Errors.Add(string.Format("{0} {1}", response.StatusCode, response.ReasonPhrase)); return null; } } public async Task UploadTrackAsync(string filePath) { using (var client = new HttpClient()) { client.BaseAddress=new Uri(baseAddress); var form = new MultipartFormDataContent(Guid.NewGuid().ToString()); var contentTitle = new StringContent("Test"); contentTitle.Headers.ContentType = null; form.Add(contentTitle, "track[title]"); var contentSharing = new StringContent("private"); contentSharing.Headers.ContentType = null; form.Add(contentSharing, "track[sharing]"); var contentToken = new StringContent("xxxxx"); contentToken.Headers.ContentType = null; form.Add(contentToken, "[oauth_token]"); var contentFormat = new StringContent("json"); contentFormat.Headers.ContentType = null; form.Add(contentFormat, "[format]"); var contentFilename = new StringContent("test.mp3"); contentFilename.Headers.ContentType = null; form.Add(contentFilename, "[Filename]"); var contentUpload = new StringContent("Submit Query"); contentUpload.Headers.ContentType = null; form.Add(contentUpload, "[Upload]"); var contentTags = new StringContent("Test"); contentTags.Headers.ContentType = null; form.Add(contentTags, "track[tag_list]"); var bytes = File.ReadAllBytes(filePath); var contentFile = new ByteArrayContent(bytes, 0, bytes.Count()); contentFile.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); form.Add(contentFile, "track[asset_data]", "test.mp3"); var response = await client.PostAsync("tracks", form); } } } 
+2
source

All Articles