2012-10-31 12 views
5

Sto tentando di caricare una canzone su Soundcloud utilizzando l'API di souncloud e javascript. Ma non mi sembra di essere in grado di farlo. Questo è il mio javascriptCaricare la canzone sull'account Soundcloud utilizzando javascript

function ADDTRACK() { 
    var test = document.getElementById('SongTrack').files[0]; 
    SC.get("http://api.soundcloud.com/users/redstr/tracks.json?client_id=3200814596a029b47877e63edfe6066c", { 
     limit: 1 
    }, function(tracks) { 
     SC.POST({ 
      tracks: { 
       description: 'This track was recorded in Berlin', 
       asset_data: '@' + test 
      } 
     }); 
    }); 
} 

E questa è la mia caricare HTML

<input type="file" id ="SongTrack" name="pic" accept="audio/*" /> 
     <button type="button" onclick="ADDTRACK()" />Add TRACK</button> 

ricevo errori, in modo che chiunque mi può puntare in quello che sto facendo di sbagliato?

+0

Hai provato passando attraverso il debugger? Non ho familiarità con l'API, ma forse c'è un "onSucess" e "onError" che puoi anche catturare, come con le chiamate Jquery Ajax che puoi acquisire per vedere cosa sta succedendo. – spots

risposta

2

Da: http://developers.soundcloud.com/docs/api/guide#uploading

// the JavaScript SDK does not by itself have access 
// to the filesystem, so instead this example records 
// some audio in the browser and uploads it. 

     SC.connect(function() { 
      SC.record({ 
      start: function() { 
       window.setTimeout(function() { 
       SC.recordStop(); 
       SC.recordUpload({ 
        track: { title: 'This is my sound' } 
       }); 
       }, 5000); 
      } 
      }  
    }); 

quindi non è possibile caricare direttamente in pista con javascript.

+0

Mi sembra però che sia datato, Javascript in teoria può accedere ai file attraverso i file API in html 5 ... Ho appena fatto un uploader diretto su Youtube usando quello, sarebbe bello se potessi ottenere lo stesso con SoundCloud ... –

1

Ho finito per voler caricare i file audio tramite l'SDK di Javascript, quindi ho decodificato gli SDK PHP e JS per farlo funzionare.

Innanzitutto, è necessario assicurarsi che l'SDK di Javascript funzioni. Lo stiamo solo utilizzando per il token di autenticazione (utilizzando un metodo non documentato). A parte il token, il resto viene gestito manualmente utilizzando $.ajax e un oggetto FormData.

HTML:

<script src="//cdn.jsdelivr.net/jquery/1.8.3/jquery-1.8.3.min.js"></script> 
<script src="//connect.soundcloud.com/sdk.js"></script> 
<button id="login">log in</button> 
<form> 
    <label>Title: <input name="title" disabled /></label><br> 
    <label>File: <input name="file" type="file" accept="audio/*" disabled /></label><br> 
    <button type="submit" disabled >Submit</button> 
</form> 

Javascript:

SC.initialize({ 
    client_id: "INSERT_CLIENT_ID", 
    redirect_uri: "INSERT_REDIRECT_URI" 
}); 

$("#login").click(function(){ 
    SC.connect(function(){ 
     $('form input,form button').removeAttr('disabled'); 
    }); 
}); 

$('form').submit(function(e) { 
    var fd = new FormData(); 
    fd.append('oauth_token', SC.accessToken()); 
    fd.append('format','json'); 
    fd.append("track[title]", $(this).find('input[name=title]').val()); 
    fd.append("track[asset_data]", $(this).find('input[name=file]').prop('files')[0]); 

    $.ajax({ 
     url: 'https://api.soundcloud.com/v1/tracks', 
     type: 'POST', 
     data: fd, 
     processData: false, 
     contentType: false, 
     xhr: function() { 
      var xhr = $.ajaxSettings.xhr(); 
      xhr.upload.onprogress = function(e) { 
       if(e.lengthComputable) { 
        var percent = Math.floor((e.loaded/e.total) * 100); 
        console.log(percent + '% uploaded'); 
       } 
      }; 
      return xhr; 
     } 
    }).done(function(e) { 
     console.log('Upload Complete!'); 
     console.dir(e); // This is the JSON object of the resulting track 
    }); 
    e.preventDefault(); 
}); 
Problemi correlati