SoundCloud API PUT方法不更新跟踪资产数据

我可以使用他们的JAVA API包装器(我知道这不是正式支持的)使用asset_data和artwork_data以及以下所有元素的方式向soundcloud发布新的音轨。 当我去使用更新方法时,除了asset_data(mp3)之外,它可以成功地更改所有内容,它甚至可以更改artwork_data。 有没有人用JAVA或任何其他语言工作。 我通过stackoverflow和SoundClouds示例仔细阅读,但还没有看到一个工作。 但它可以根据他们的开发人员API文档提供。 我是Pro无限用户。

POST

@RequestMapping(value = "/submitNewTrack", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @Timed public ResponseEntity saveNewSCTrack( HttpServletRequest req, @RequestParam("marketId") String marketId, @RequestParam("majorId") String majorId, @RequestParam("trackTags") String tags, @RequestParam("trackTitle") String title, @RequestParam("trackDescription") String description, @RequestParam("file") MultipartFile file ) throws IOException { ApiWrapper wrapper = new ApiWrapper("client", "secret", null, null); wrapper.login("xxxxxx", "xxxxxx"); HttpResponse resp2 = wrapper.post(Request.to(Endpoints.TRACKS) .add(Params.Track.TITLE, title) .add(Params.Track.TAG_LIST, tags) .add(Params.Track.DESCRIPTION, description) .withFile(Params.Track.ASSET_DATA, getFileByteArray(marketId, majorId), title) .withFile(Params.Track.ARTWORK_DATA, file.getBytes(), file.getName()) .setProgressListener(new Request.TransferProgressListener() { @Override public void transferred(long amount) { System.err.print("."); } })); return new ResponseEntity("{\"status\":\"ok\"}", HttpStatus.OK); } 

这会成功发布曲目。

 @RequestMapping(value = "/updateTrack", method = RequestMethod.PUT, produces = MediaType.APPLICATION_JSON_VALUE) @Timed public ResponseEntity updateSCTrack( @RequestParam("trackId") Integer id, @RequestParam("marketId") String marketId, @RequestParam("majorId") String majorId, @RequestParam("trackTitle") String title, @RequestParam("trackDescription") String description, @RequestParam("file") MultipartFile file ) throws IOException { ApiWrapper wrapper = new ApiWrapper("client", "secret", null, null); wrapper.login("xxxxxx", "xxxxxxxx"); HttpResponse resp = wrapper.put(Request.to(Endpoints.TRACK_DETAILS, id) .with(Params.Track.DESCRIPTION, description) .withFile(Params.Track.ASSET_DATA, getFileByteArray(marketId, majorId), title) .withFile(Params.Track.ARTWORK_DATA, file.getBytes(), file.getOriginalFilename())); return new ResponseEntity("{\"status\":\"ok\"}", HttpStatus.OK); } 

除了轨道资产数据(mp3)之外,此方法将替换调用中的所有内容。 它发布很好,没有错误。 但是,更新呼叫上没有上传任何曲目。 (重复:post工作正常,放不上传新曲目)。

在这里提出并回答了类似的问题。 不幸的是,SoundCloud目前无法通过API更新曲目的音频数据。 一种解决方法是删除然后使用相同的永久链接重新发布曲目,但是,这将导致丢失该曲目的所有统计数据(例如播放),评论等。

我理解你感受到的挫败感,尤其是当你考虑到使用api更新音轨的所有其他元素时。 为了增加混乱, API文档 btw asset_dataartwork_data没有区别,但是一个支持更新操作而另一个不通过API。

我想这背后有一个基本原理,但它没有解释为什么可以使用Web界面更新track的音频文件。 那说&由于Web界面选项可用,解决方法是利用HTMLUnit (或类似的东西)手动重新创建带代码的音频更新。

建议的删除和重新创建方法不可行bc您的指标也会在流程中删除,并且没有可用的导出选项。