什么是Android中最广泛使用的RSS订阅解析库?

8

我想制作一个应用程序,其中包括通过网络加载的解析源。鉴于标准Android + Core Java库不提供解析源服务,而且我也不想自己编写一个,您能否指定适用于低规格Android设备的Java源解析器?

我刚开始学习Android,完成了Hello World示例后,我想移动到我的第一个应用程序。我想制作一些解析ATOM或RSS源并在GridView中显示一些内容的东西。

在Android中,UI方面的材料似乎都有很好的文档记录,Sun也有很多关于如何检索URL的示例,但是我不知道如何进行源解析。

以前,当我在Python中做这种事情时,我使用通用的源解析器,它可以解析几乎任何东西(例如RSS,ATOM)。有许多良好的Python实现这种事情的方法,但是我没有找到任何像这样的东西作为标准Android库的一部分。

在工作中,我对企业Java应用程序进行了(轻度)维护。一般做法似乎是采取您喜欢的任何类(例如Jakarta Commons源解析器)并将其简单地捆绑到CLASSPATH中。桌面应用程序不关心依赖项有多大,但是我相信在编译用于具有有限内存的设备的APK包时,这是一个重大问题。当然,我必须非常挑剔地选择我所依赖的Jars类型,对吗?我可以直接使用桌面应用程序中使用的相同类吗?

注意:

  • 我的背景是Python(仅有轻度Java经验)
  • 理想情况下,我想使用流行的东西(不一定是最好的),这样我就可以得到支持。
  • 更好的是,我希望使用内置的库功能,这样我就不必添加任何第三方Jars来膨胀我的应用程序。
  • 目前针对Android 1.5(因为这是我的设备运行的版本)
5个回答

3

由于RSS/Atom源本质上是XML文档,您可以使用Android附带的标准Java库中的SAXParser进行解析。


2
是的,我可以做到这一点 - 但我不想重新发明轮子。肯定有许多(比我更有天赋的开发人员)已经创建了完美的 Feed 解析器。如果我在为桌面开发,则不会手动编写基于 SAX 的 Feed 解析器,考虑到我的时间限制,它可能很糟糕。我能否在 Android 上做类似的事情? - Salim Fadhley
要么使用第三方库,要么重新发明轮子。既然你说你不想将第三方JAR文件捆绑到你的应用程序中,那么使用SAX将是最好的选择。如果你想使用其他RSS库,那么我会采用Bozho的建议,使用Rome。 - James Goodwin
澄清一下,我想尽量减少额外的依赖关系,因为它们会导致膨胀,但是加入一点点“肥肉”并使其更好可能比花费大部分时间实现基本/无聊的东西如Feed解析器更好。请参见我下面有关Rome的评论。 - Salim Fadhley

3

Rome 看起来是最受欢迎的 Java RSS 库之一。 我猜它也可以在 Android 上使用。


1
我已经阅读过罗马需要JavaBeans,而这在Android平台上并不是一个组件。这可能不是一个选择。 - Salim Fadhley
1
我记得曾经看到一个基于Rome的Android RSS项目,但它已经不再活跃了。所以试试Rome吧,很快就能知道它是否可行。无论如何,在Stackoverflow上搜索更多相关信息——那里有很多结果。 - Bozho
Android的DalvikVM不支持ClassLoader,而ROME API中使用了它。 - lemotdit
是的,Rome很糟糕。这是一个已经停止开发的项目,网站甚至无法加载。示例不能编译。它使用的是JDOM 1.0,如果你使用最新版本的JDOM,它将不能编译。当在Android上运行时,它需要java.beans.*类,但它们并不存在。你必须单独下载那些类,将它们放到另一个包中,修改Rome源代码以引用它们,然后重新构建所有内容。不值得花费这些时间! - Chloe

0

我还写了一个新的RSS库: https://github.com/Pkmmte/PkRSS

它非常轻量级、高效、快速、可定制,并且极易使用。例如,以下代码可以在后台线程中加载和解析您的RSS源:

PkRSS.with(this).load(url).async();

很容易吧? GitHub页面上有更多细节。


0

设置一个SAX解析器的实现相当容易,但困难的是能够解析任何类型的订阅源。

您需要迎合所有格式,如RSS 1、RSS 2、Atom等。即使如此,您仍然必须处理格式不良的订阅源。

我过去也遇到过类似的问题,所以决定在服务器上执行我的Feed解析并只获取解析后的内容。这使我能够运行更复杂的库和解析器,并且可以在不推出应用程序更新的情况下进行修改。

我在AppEngine上运行以下服务,允许在您的端口进行更简单的XML / JSON解析。响应有固定且简单的结构。您可以使用此来解析。

http://evecal.appspot.com/feedParser

您可以使用以下参数发送POST和GET请求。

feedLink:RSS订阅源的URL response:JSON或XML作为响应格式

示例:

对于POST请求

curl --data-urlencode "feedLink=http://feeds.bbci.co.uk/news/world/rss.xml" --data-urlencode "response=json" http://evecal.appspot.com/feedParser

对于GET请求

evecal.appspot.com/feedParser?feedLink=http://feeds.nytimes.com/nyt/rss/HomePage&response=xml

我的安卓应用程序“NewsSpeak”也使用了这个。


0

查看轻量级Android库,以读取https://github.com/ahorn/android-rss中的RSS 2.0订阅源的部分内容。我不知道这是否是Android上最受欢迎的库,但它看起来对我来说很好。我还没有尝试过。


仅仅是一个建议,但我怀疑加入一些描述性的叙述来将这个链接放置在一个更为明确的上下文中会更受欢迎。比如说,这是你自己使用过的吗?还是大部分人通用的解决方案?不管怎样都可以。 - Rob
1
抱歉,我不知道它是否是最受欢迎的,而且我还没有尝试过。因此只有链接。但到目前为止,它看起来是最好的,我一定会尝试的。 - Chloe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接