SoundCloud API PUT 方法未更新曲目资产数据
SoundCloud API PUT method not updating track asset data
我可以 post 使用他们的 JAVA API 包装器(我知道这不受正式支持)和 asset_data 和 artwork_data 和以下所有元数据都没有问题。当我去使用更新方法时,它可以成功地改变除了 asset_data (mp3) 之外的所有内容,它甚至改变了 artwork_data。有没有人在 JAVA 或任何其他语言中工作。我仔细阅读了 Whosebug 和 SoundClouds 示例,但还没有看到一个工作。但根据他们的开发者 API 文档,它是可用的。我是 Pro Unlimited 用户。
POST
@RequestMapping(value = "/submitNewTrack",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<String> 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);
}
那 post 曲目成功。
放置
@RequestMapping(value = "/updateTrack",
method = RequestMethod.PUT,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<String> 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 没有错误。然而,更新调用中没有上传曲目。 (重复:post 工作正常,put 不上传新曲目)。
有人问了类似的问题 answered here。遗憾的是,SoundCloud 目前不提供通过 API 更新曲目的音频数据的功能。一种解决方法是删除曲目,然后使用相同的永久链接重新发布曲目,但是,这将导致丢失该曲目的所有统计数据(例如播放次数)、评论等。
我理解您的挫败感,尤其是当您考虑可以使用 api 更新轨道的所有其他元素时。更令人困惑的是,API documentation 顺便说一句 asset_data
和 artwork_data
没有区别,但是一个支持更新操作,而另一个不通过 API。
我想这背后有一个基本原理,但它没有解释为什么可以使用 Web 界面更新轨道的音频文件。那就是说 & 由于 Web 界面选项可用,解决方法是利用 HTMLUnit(或类似的东西)使用代码手动重新创建音频更新。
建议的删除和重新创建方法不可行,因为您的指标也在此过程中被删除,并且没有可用的导出选项。
我可以 post 使用他们的 JAVA API 包装器(我知道这不受正式支持)和 asset_data 和 artwork_data 和以下所有元数据都没有问题。当我去使用更新方法时,它可以成功地改变除了 asset_data (mp3) 之外的所有内容,它甚至改变了 artwork_data。有没有人在 JAVA 或任何其他语言中工作。我仔细阅读了 Whosebug 和 SoundClouds 示例,但还没有看到一个工作。但根据他们的开发者 API 文档,它是可用的。我是 Pro Unlimited 用户。
POST
@RequestMapping(value = "/submitNewTrack",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<String> 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);
}
那 post 曲目成功。
放置
@RequestMapping(value = "/updateTrack",
method = RequestMethod.PUT,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<String> 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 没有错误。然而,更新调用中没有上传曲目。 (重复:post 工作正常,put 不上传新曲目)。
有人问了类似的问题 answered here。遗憾的是,SoundCloud 目前不提供通过 API 更新曲目的音频数据的功能。一种解决方法是删除曲目,然后使用相同的永久链接重新发布曲目,但是,这将导致丢失该曲目的所有统计数据(例如播放次数)、评论等。
我理解您的挫败感,尤其是当您考虑可以使用 api 更新轨道的所有其他元素时。更令人困惑的是,API documentation 顺便说一句 asset_data
和 artwork_data
没有区别,但是一个支持更新操作,而另一个不通过 API。
我想这背后有一个基本原理,但它没有解释为什么可以使用 Web 界面更新轨道的音频文件。那就是说 & 由于 Web 界面选项可用,解决方法是利用 HTMLUnit(或类似的东西)使用代码手动重新创建音频更新。
建议的删除和重新创建方法不可行,因为您的指标也在此过程中被删除,并且没有可用的导出选项。