RSS提要完全不同于浏览器中显示的方式
RSS Feed completely different to how displayed in Browser
所以我试图用编程的方式解析一个RSS提要的播客在Java中使用dom4j。
代码是这样的,并且对于很多很多提要都能顺利运行:
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
String line;
while((line = reader.readLine()) != null)
{
this.xmlData += line + "'n";
}
reader.close();
PrintWriter writer = new PrintWriter("rss_feed.txt", "UTF-8");
writer.println(this.xmlData);
writer.close();
this.document = DocumentHelper.parseText(this.xmlData);
然后我遇到了一个问题提要!提要的url是:https://marxismtodaypodcast.wordpress.com/category/audio/feed/
现在奇怪的是,如果我在浏览器中看这个页面,它看起来像一个普通的RSS提要,充满了期望的元素。
甚至这个提要验证器也确认它是一个格式正确的提要:
https://validator.w3.org/feed/然而,如果我读取url,并将其保存到一个文件中,它看起来不像我在url中看到的提要,并且包含javascript加载,而没有正常的<</p>
dom4j解析器讨厌我从url下载的提要,并抛出一系列奇怪的异常,因为该页面是.html页面而不是xml页面。
我怀疑页面中的javascript以某种方式创建了我们在浏览器中看到的输出。有没有办法让我下载我们在浏览器中看到的东西,而不是原始的javascript文件?我想这样做的方式,可以自动化,所以不太黑客!
或者也许我完全搞错了,还有别的事情发生吗?
EDIT 1: failed to Accept XML in HTTP Header
所以我尝试让HttpURLConnection接受xml,正如评论者Julien Genestoux所建议的那样。下面是我试过的代码:
HttpURLConnection connection = (HttpURLConnection)feed.openConnection();
connection.setRequestProperty("Accept","application/atom+xml,application/rdf+xml,application/rss+xml,application/xml,text/xml");
connection.connect();
String content_type = connection.getContentType();
System.out.println("content = " + content_type);
然而,当我运行这个,我得到相同的数据返回,内容为:
text/html; charset=UTF-8
我的编码正确吗?我假设我有一些错误,因为这个RSS提要确实正确验证,所以必须可以从这个url....
你遇到的是一个内容协商问题。基本上,HTTP客户端可以要求服务器以特定格式获取内容(它使用Accept
标头),服务器可以按照请求的格式发送内容(或者只是忽略请求,以它想要的任何格式提供内容)。
所以,你的问题不是"转换"你收到的内容,而是让你的HTTP库只要求正确的格式。要做到这一点,只需添加一个http头Accept
与以下值:application/atom+xml,application/rdf+xml,application/rss+xml,application/xml,text/xml
,您将收到的内容应该是正确的。
另外,如果你想处理所有这些,考虑使用像Superfeedr这样的API,它可以代表你进行轮询和解析,并向你发送规范化的JSON。
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 在ng重复循环中显示条件内容的最佳方式是什么
- 显示可链接的搜索结果+对齐方式
- 在网站上显示.mov作为加载屏幕的最佳方式
- 将不同上传的文件显示为缩略图或任何其他方式
- 另一种显示和隐藏按钮的方式
- 显示全屏Ajax加载程序的最佳方式
- DC.js数据表没有按应有的方式显示
- 显示数据的最快方式
- 将JavaScript检测与MVC4显示模式集成的最佳方式是什么
- 货到付款选择隐藏/显示付款方式
- 为什么某些Javascript属性没有在调试器中以交互方式显示
- 数据在确认框中的显示方式存在问题
- 在googlechrome中,没有www子域的页面会有不同的显示方式
- 重复的页面显示方式不同
- 当用户使用 ASP.NET 从 Web 窗体中的“下拉列表列表”中选择“其他”时,文本框的显示方式
- Javascript 对象属性值因显示方式而异
- 如何查找元素的当前显示方式
- 如何重新组织此页面缩略图的显示方式
- 改变数据在高图中的显示方式