Программное чтение динамически созданного RSS-канала с использованием Java

Наше программное обеспечение написано с использованием Play! framework (версия 1.2.5), и нам нужно читать RSS-каналы. До сих пор это не было проблемой, но недавно мы столкнулись с RSS-каналом, который динамически создается с использованием javascript в событии onload.

В настоящее время мы используем следующий код:

URL url = new URL(this.url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36");     
conn.setRequestProperty("Accept-Language", "en-US,en;q=0.8");   
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");            
conn.setRequestMethod("GET");

InputStream inputStream = conn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader rd = new BufferedReader(inputStreamReader);
String line;

while ((line = rd.readLine()) != null)
{
    result += line;
}

Однако этого недостаточно в случае динамически создаваемого RSS, поскольку все, что мы получаем, — это HTML-страница, в которой указано, что javascript должен быть включен.

Я думаю, нам нужна какая-то встроенная веб-страница, но это похоже на использование кувалды, чтобы расколоть орех.

Есть ли альтернативы?

РЕДАКТИРОВАТЬ: после отключения javascript при просмотре RSS-канала все еще возвращались данные канала в формате XML, так что это несколько усугубило мое замешательство. Было высказано предположение, что некоторые RSS-каналы используют javascript для перевода своего канала с помощью XSLT, но ответ, который я получаю на запрос, таков:

«Этот сайт требует включения JavaScript и файлов cookie. Пожалуйста, измените настройки вашего браузера или обновите его». Так что я не совсем уверен, почему это происходит


person Nova75    schedule 19.11.2013    source источник


Ответы (1)


Чтобы очистить содержимое, сгенерированное Javascript, я думаю, вам придется использовать механизм Javascript для отображения содержимого HTML.

Вы можете использовать что-то вроде HTMLUnit, который представляет собой легкий безголовый браузер на чистом Java. Единственная проблема с HTMLUnit заключается в том, что он использует относительно старый движок JavaScript.

Раньше я использовал PhantomJS с Selenium WebDriver для очистки веб-страниц, сгенерированных JavaScript.

person prav    schedule 19.11.2013