Метод SoundCloud API PUT не обновляет данные активов трека
Я могу опубликовать новый трек в soundcloud, используя их JAVA API Wrapper (я знаю, что это формально не поддерживается) с помощью asset_data и artwork_data и всех следующих мета без проблем. Когда я использую метод обновления, он может все успешно изменить, кроме asset_data (mp3), он даже меняет artwork_data. У кого-нибудь это работает на JAVA или на любом другом языке. Я просматривал стек-поток и пример SoundClouds и еще не видел ни одного работающего. Но это доступно согласно их документации API разработчика. Я Pro Неограниченный Пользователь.
СООБЩЕНИЕ
@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);
}
Этот метод заменяет все в вызове, за исключением данных ресурсов трека (mp3). И это отправляет хорошо без ошибки. Тем не менее, трек не загружен при вызове обновления. (повторюсь: пост работает нормально, поставил не загружает новый трек).
2 ответа
Подобный вопрос был задан и дан ответ здесь. К сожалению, SoundCloud в настоящее время не предоставляет возможность обновлять аудиоданные трека через API. Одним из обходных путей является удаление, а затем повторная публикация дорожки с той же постоянной ссылкой, однако это приведет к потере всей статистики (например, воспроизведения), комментариев и т. Д. Для этой дорожки.
Я понимаю разочарование, которое вы испытываете, особенно если учесть, что все остальные элементы трека могут быть обновлены с помощью API. Чтобы добавить к путанице нет никакой разницы в документации API, кстати asset_data
а также artwork_data
однако одна поддерживает операции обновления, а другая - не через API.
Я полагаю, что за этим стоит логическое обоснование, но оно не объясняет, почему аудиофайл дорожки можно обновить с помощью веб-интерфейса. Тем не менее, & поскольку опция веб-интерфейса доступна, обходной путь должен был бы использовать HTMLUnit (или что-то подобное), чтобы вручную воссоздать аудио-обновление с кодом.
Предложенный метод удаления и повторного создания нежизнеспособен, поскольку ваши метрики также удаляются в процессе, и нет доступных вариантов экспорта.