Метод 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 (или что-то подобное), чтобы вручную воссоздать аудио-обновление с кодом.

Предложенный метод удаления и повторного создания нежизнеспособен, поскольку ваши метрики также удаляются в процессе, и нет доступных вариантов экспорта.

Другие вопросы по тегам