Я создаю программу java, которая имеет возможность играть YouTube видео во встроенном проигрывателе. Проблема в том, что большинство музыкальных видеороликов не воспроизводятся, и я получаю следующее сообщение об ошибке: «Это видео содержит контент от (название медиакорпорации). Он ограничен воспроизведением на определенных сайтах».Как я могу обойти ограничения API для API YouTube, как и другие веб-сайты?
Я попытался загружая же URL в Chrome и получили те же результаты. https://www.youtube.com/embed/TMZi25Pq3T8
Однако, после некоторых исследований, я быстро получила ее исправить, установив расширение Chrome, который позволяет мне добавлять HTTP заголовки запросов и добавил Referer заголовка, который следует этой структуре «https://www..com» и получил это работает.
Так что я подумал, что должно быть. Я добавил следующий код, чтобы добавить заголовки запроса на мой JavaFX WebView/WebEngine:
URI uri = URI.create("https://www.youtube.com/embed/TMZi25Pq3T8");
List<String> cookies = new ArrayList<>();
cookies.add("User-Agent=BDM/v0.92");
cookies.add("Referer=https://www.youtube.com");
Map<String, List<String>> headers = new LinkedHashMap<String, List<String>>();
headers.put("Set-Cookie", cookies);
try {
CookieHandler.getDefault().put(uri, headers);
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.println(webView.getEngine().getUserAgent());
webView.getEngine().load(uri.toString());
Тем не менее, без успеха, то же сообщение об ошибке.
Веб-сайт, который я использую для извлечения данных об выпусках через их API, Discogs, также может воспроизводить «ограниченные» видео. Что мне здесь не хватает?
СПУСТЯ EDIT: Дальнейшие уточнения:
Я хотел бы извиниться за ошибки, которые я сделал:
- Линия
System.out.println(webView.getEngine().getUserAgent());
не печатает «BDM/v0.92», как я вначале он печатает пользовательский агент JavaFX по умолчанию, «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/538.19 (KHTML, например Gecko) JavaFX/8.0 Safari/538.19». И это приводит к числу 2 - Как отметил Роман Назаренко, я сбивал с кучей файлы с заголовками запросов.
Это приводит к реальному вопросу, как я могу отправить заголовки HTTP-запросов для JavaFX WebEngine? Единственный вариант для установки агента пользователя по телефону webView.getEngine().setUserAgent("myUserAgent");
Я нашел хак здесь, но это didin't работает для меня: https://twitter.com/codingfabian/status/524942996748652544
Спасибо!
Является ли ошибка, исходящая от вызова API? Если это так, вам может потребоваться проверить, какие параметры вы должны отправлять при отправке запроса. Таким образом, вы сможете определить любой недостающий параметр в случае, если ошибка выдается из API. –
Вы рассказываете о заголовках, но здесь вы настраиваете файлы cookie. Это не одно и то же. –
Вы пробовали прочитать это? http://stackoverflow.com/questions/13407482/youtube-embed-gives-restricted-from-playback-on-certain-sites-error-despite-ap. Кроме того, я нашел этот блог разработчиков и разработчиков YouTube: http://youtube-eng.blogspot.co.uk/2011/12/understanding-playback-restrictions_28.html. Это может помочь вам. –