Java SoundCloud API PUT方法未更新轨道资产数据

Java SoundCloud API PUT方法未更新轨道资产数据,java,soundcloud,Java,Soundcloud,我可以使用他们的JAVA API包装器(我知道这是不受正式支持的)向soundcloud发布一首新曲目,其中包含资产和艺术品数据,以及以下所有元数据,没有任何问题。当我使用更新方法时,它可以成功地更改除资产数据(mp3)之外的所有内容,甚至可以更改艺术品数据。有没有人能用JAVA或其他语言实现这个功能。我仔细阅读了stackoverflow和SoundClouds示例,还没有看到一个可以工作。但它是根据他们的开发者API文档提供的。我是一个亲无限的用户 职位 @RequestMapping(va

我可以使用他们的JAVA API包装器(我知道这是不受正式支持的)向soundcloud发布一首新曲目,其中包含资产和艺术品数据,以及以下所有元数据,没有任何问题。当我使用更新方法时,它可以成功地更改除资产数据(mp3)之外的所有内容,甚至可以更改艺术品数据。有没有人能用JAVA或其他语言实现这个功能。我仔细阅读了stackoverflow和SoundClouds示例,还没有看到一个可以工作。但它是根据他们的开发者API文档提供的。我是一个亲无限的用户

职位

@RequestMapping(value=“/submitNewTrack”,
method=RequestMethod.POST,
products=MediaType.APPLICATION\u JSON\u值)
@定时
公共响应属性保存新闻跟踪(
HttpServletRequest请求,
@RequestParam(“marketId”)字符串marketId,
@RequestParam(“majorId”)字符串majorId,
@RequestParam(“trackTags”)字符串标记,
@RequestParam(“trackTitle”)字符串标题,
@RequestParam(“trackDescription”)字符串描述,
@RequestParam(“文件”)多部分文件
)抛出IOException{
ApiWrapper=新的ApiWrapper(“客户机”、“机密”、null、null);
包装器登录(“xxxxxx”、“xxxxxx”);
HttpResponse resp2=wrapper.post(Request.to(Endpoints.TRACKS)
.add(Params.Track.TITLE,TITLE)
.add(Params.Track.TAG_列表,标记)
.add(Params.Track.DESCRIPTION,DESCRIPTION)
.withFile(Params.Track.ASSET_数据,getFileByteArray(marketId,majorId),标题)
.withFile(Params.Track.ARTWORK_数据,file.getBytes(),file.getName())
.setProgressListener(新请求.TransferProgressListener()){
@凌驾
已转移的公共无效(长期金额){
系统错误打印(“.”);
}
}));
返回新的响应属性(“{\”状态\“:\”确定\“}”,HttpStatus.ok);
}
这将成功地发布轨迹

@RequestMapping(value=“/updateTrack”,
方法=RequestMethod.PUT,
products=MediaType.APPLICATION\u JSON\u值)
@定时
公共响应更新跟踪(
@RequestParam(“trackId”)整数id,
@RequestParam(“marketId”)字符串marketId,
@RequestParam(“majorId”)字符串majorId,
@RequestParam(“trackTitle”)字符串标题,
@RequestParam(“trackDescription”)字符串描述,
@RequestParam(“文件”)多部分文件
)抛出IOException{
ApiWrapper=新的ApiWrapper(“客户机”、“机密”、null、null);
包装器登录(“xxxxxx”、“xxxxxxxx”);
HttpResponse resp=
wrapper.put(Request.to(Endpoints.TRACK_详细信息,id)
.带有(参数Track.DESCRIPTION,DESCRIPTION)
.withFile(Params.Track.ASSET_数据,getFileByteArray(marketId,majorId),标题)
.withFile(Params.Track.ARTWORK_数据,file.getBytes(),file.getOriginalFilename());
返回新的响应属性(“{\”状态\“:\”确定\“}”,HttpStatus.ok);
}

此方法将替换调用中除曲目资源数据(mp3)之外的所有内容。它贴得很好,没有错误。但在更新通话中没有上传任何曲目。(重复:post工作正常,put不会上传新曲目)。

有人问了一个类似的问题。不幸的是,SoundCloud目前无法通过API更新曲目的音频数据。一个解决办法是删除同一个PrimLink,然后重写轨道,这将导致丢失所有的统计(例如,播放),评论等,对于该轨道。

< P>我理解你的沮丧感,尤其是当你认为轨道的所有其他元素都可以用API更新时。更让人困惑的是,顺便说一句,
asset\u data
artwork\u data
没有区别,但是一个支持更新操作,而另一个不通过API

我想这背后有一个基本原理,但它并没有解释为什么曲目的音频文件可以用web界面更新。这就是说&既然web界面选项是可用的,一个解决方法就是利用(或类似的东西)手动用代码重新创建音频更新


建议的删除和重新创建方法不可行,因为您的度量也会在过程中删除,并且没有可用的导出选项

那么,您可能应该在API文档中反映这一点。至少声明它只能被发布,不能被放置。谢谢
@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);

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