0

JavaScript SDK を github からクローンしたところ、Firefox15.0 が不満だった以外は、何でも GET できました。(トラック リスト、グループ リスト)。

トラックの 1 つをグループの 1 つに追加できるようにしたいと考えています (これまでのところ、テストを簡単にするために、それぞれ 1 つしか取得していません)。コンソールで (PUT https://api.soundcloud. com/groups/92779/contributions/58889291 )、グループから同じトラックを削除 (同じ URI で DELETE) しますが、javascript SDK jQuery の例ではできません。(私はそれがjquery.sc.api.jsだと思い始めていますが、よくわからないので助けを求めています。)

これは私がこれまでに一緒にハックしたものです: (まあ、もっとたくさんのことをしましたが、この 1 つの例だけを強調するために切り詰めました.)

index.html

<!DOCTYPE html>
<html>
  <head><meta charset="utf-8" />
<title>SC.js.test</title>
<script> var FireFox15_error = 'Error: ReferenceError: id is not defined \
Source File: jquery.tmpl.js Line: 126'
</script>
<style type="text/css">.hidden { visibility: hidden; }</style>
</head>
  <body>
    <div id="container">
    </div>
    <div id="tracks" class="hidden">
    <h2>Your tracks</h2>
      <ul id="track-list">
      </ul>
        The Add button seems 'to work' if the track is already in the group, but just redirects to the login page if it isn't (is this a sign that the token isn't being sent with the PUT ?)
    </div>
<!-- am I'm just old wanting to move these into the <head> ? -->
<script type="text/javascript" charset="utf-8" src="jquery_1.7.1_min.js"></script>
<script type="text/javascript" charset="utf-8" src="jquery.tmpl.js"></script>
<script type="text/javascript" charset="utf-8" src="jquery.sc.api.js"></script>
<script type="text/javascript" charset="utf-8" src="main.js"></script>
    <!-- Templates -->
    <script id="track" type="text/html">
      <li data-track-id="${id}" id="${id}">${$i}) <a href="${permalink_url}">${title}</a>(${id})</li>
    </script>
<div id="debug" class="hidden">
    <h3>Requests/Questions</h3>
<ol>
<li>api.put('/me', { "description": 'Guess who is using the new API function?' }); //please add this</li>
<li> why does sc have a different string than the track_id for removing tracks from a group?  </li>
</ol>
</div>
</body></html>

main.js

(function($) {
   var soundCloudApiKey = 'should_be_able_to_create_a_key_for_(locked_to)_each_user';
   var user_id = '';
  var api = $.sc.api(soundCloudApiKey, {
    onAuthSuccess: function(user, container) {
        user_id = user.id;
      $('<span class="username">Logged in as: <strong>' + user.username + '</strong> (' + user_id + ')</a>').prependTo(container);
    }
  });
  $(document).bind($.sc.api.events.AuthSuccess, function(event) {
  $(this).click(function(data) {
    data.preventDefault();
    var Sender = window.event.srcElement;
    if(Sender.id == 'add_track_submit'){
        var group_id = $('#group_id').val();
        var track_id = $('#track_id').val();
        alert('TRYING to add track ' + track_id + ' to group ' + group_id);
        //api.put('/groups/' + group_id + '/contributions/' + track_id); // http://developers.soundcloud.com/docs/api/guide#contributing-group
        api.put('/groups/' + group_id + '/contributions/' + track_id, function(reply, e){ //trying to get some feedback on why this does not work
                    // It seems to be using a GET rather than a PUT or POST
        //api.post('/groups/' + group_id + '/contributions/' + track_id, function(reply, e){ //also does not seem to work
            if(e){ console.log('err:' + e); }
            console.log('track add reply' + reply);
            alert('track ' + track_id + ' added to group ' + group_id);
        });
    }
   return false;
  });
   api.get('/me/tracks', function(data) {
      // you can use new jQuery templating for generating the track list
      $('#track').render(data).appendTo("#track-list");
      //groovy, if Firefox15.0 did not hate it, (works in Google Chrome 18.0.1025.162/JavaScript V8 3.8.9.18)
      $.map( data, function(track, i){
            my_group_id = 92779; //dirty hack while I try to get this working with just one track and one group
            var add_button = '<span id="add_button"><form id="add_track"><input id="group_id" type="hidden" name="group_id" value="' + my_group_id + '" /> \
<input type="hidden" id="track_id" name="track_id" value="' + track.id + '" /> \
<input type="submit" id="add_track_submit" name="add" value="Add ' + track.title + ' to group ' + my_group_id + '" /></form></span>';
                                $('#track-list>#' + track.id).append(add_button);
    });
    $('div').removeAttr("class", "hidden");
  });
});
})(jQuery);
4

1 に答える 1

0

SDK のバグを見つけて修正しました: https://github.com/alxxroche/SoundCloud-API-jQuery-plugin/blob/master/jquery.sc.api.js - 私のコードを変更する必要はありませんでした。

于 2012-09-11T09:00:45.823 に答える