7

C#.NET を使用して Soundcloud.com にオーディオ トラックをアップロードしようとしていますが、.NET のリソースがどこにもありません。.NET を使用して私の Soundcloud.com アカウントにオーディオ ファイルをアップロードする方法のリンクまたは例を誰かが投稿できますか?

ありがとう、アルマン

4

3 に答える 3

7

soundcloud の REST API を使用してオーディオをアップロードするには、HTTP POST 関連の問題 (RFC 1867) に対処する必要があります。一般に、ASP.NET は POST を使用した複数のファイル/値の送信をサポートしていないため、Krystalware ライブラリを使用することをお勧めします: http://aspnetupload.com/Upload-File-POST-HttpWebRequest-WebClient-RFC-1867.aspx

その後、適切なフォーム フィールドをhttps://api.soundcloud.com/tracks URLに送信する必要があります。

  • 認証トークン (oauth_token)
  • トラックタイトル (トラック[タイトル])
  • ファイル (トラック[asset_data])

サンプルコード:

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();
}

サンプル コードを使用すると、サーバーからオーディオ ファイルをアップロードし (ファイルへのパスを形成する Server.MapPath メソッドに注意してください)、json 形式で応答を取得できます (reader.ReadToEnd)。

于 2012-08-09T21:58:56.503 に答える
4

これは、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) {
                ...
            }
于 2013-10-11T12:50:13.303 に答える