gofeed

强大的提要解析器
授权协议 MIT
开发语言 Google Go
所属分类 Web应用开发、 RSS/ATOM相关
软件类型 开源软件
地区 不详
投 递 者 杨俊茂
操作系统 Windows
开源组织
适用人群 未知
 软件概览

gofeed库是一个强大的提要(feed)解析器,支持解析 RSSAtom 和 JSON 提要。该库提供了一个通用模型gofeed.Parser,它可以解析所有提要类型,并将其转换为混合gofeed.Feed模型。

gofeed库由一个通用提要解析器 gofeed. Parser和几个特定类型解析器(rss.Parser 、atom.Parserjson. Parser

如果要同时处理 rss、atom 和 json 提要,那么使用gofeed. Parser,如果只解析一种提要类型,就使用对应的解析器。

 

gofeed会尽最大努力解析损坏的和无效的 XML 提要。目前,gofeed可以成功解析具有以下问题的提要:

  • 提要元素中的未转义/裸标记
  • 未声明的命名空间前缀
  • 某些元素上缺少结束标记
  • 没有命名空间前缀的提要元素中的非法标签
  • 缺少相应提要规范指定的“必需”元素。
  • 日期格式不正确

支持的提要类型

  • RSS 0.90
  • Netscape RSS 0.91
  • Userland RSS 0.91
  • RSS 0.92
  • RSS 0.93
  • RSS 0.94
  • RSS 1.0
  • RSS 2.0
  • Atom 0.3
  • Atom 1.0
  • JSON 1.0
  • JSON 1.1

基本用法

通用源解析器

最常见的使用场景是用于gofeed.Parser将任意 RSS 或 Atom 或 JSON 提要解析到混合gofeed.Feed模型中。这种混合模型允许您以相同的方式处理 RSS、Atom 和 JSON 提要。

从 URL 解析提要:

fp  :=  gofeed。NewParser ()
feed , _  :=  fp。ParseURL ( "http://feeds.twit.tv/twit.xml" )
fmt。Println ( feed . Title )

从字符串解析提要:

feedData  :=  `<rss version="2.0"> 
<channel> 
<title>Sample Feed</title> 
</channel> 
</rss>` 
fp  :=  gofeed。NewParser ()
 feed , _  :=  fp。ParseString ( feedData )
 fmt。Println ( feed . Title )

从  io. Reader 解析:

file, _ := os.Open("/path/to/a/file.xml")
defer file.Close()
fp := gofeed.NewParser()
feed, _ := fp.Parse(file)
fmt.Println(feed.Title)

解析一个超时 60 秒的URL:

ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
fp := gofeed.NewParser()
feed, _ := fp.ParseURLWithContext("http://feeds.twit.tv/twit.xml", ctx)
fmt.Println(feed.Title)

使用自定义的 User-Agent 从 URL 解析提要:

fp := gofeed.NewParser()
fp.UserAgent = "MyCustomAgent 1.0"
feed, _ := fp.ParseURL("http://feeds.twit.tv/twit.xml")
fmt.Println(feed.Title)
 相关资料
  • 我正在尝试使用欧洲中央银行(ECB)的当前汇率提要http://www.ECB.int/stats/eurofxref/eurofxref-daily.xml 他们提供了关于如何解析xml的文档,但没有一个选项对我有效:我检查了是否设置了allow_url_fopen=on。 http://www.ecb.int/stats/exchange/eurofxref/html/index.en.htm

  • 我正在从xml提要创建主干集合。xml提要返回110篇文章(它是外部的,无法返回更少的文章)。我加载到主干集合中,如下所示: 然后,我在列表底部显示带有“加载更多”按钮的前10个项目。当用户单击“加载更多”时,我想从主干集合中加载接下来的10个项目。在视图中,我这样做: 因此,each循环遍历前10个项目,跳过它们,因为它们已经加载(并且小于最后一个li子项的id),然后在接下来的10个项目上创建

  • 问题内容: 我正在尝试将以下feed解析为python中的ElementTree:“ http://smarkets.s3.amazonaws.com/oddsfeed.xml ”(警告大文件) 到目前为止,这是我尝试过的: 但是它似乎只是挂在上面,也许是无限地??(我知道这是一个大文件,但与我解析的其他非压缩提要相比似乎太长了,而这个大文件首先会扼杀gzip压缩带来的任何带宽增长)。 接下来我尝

  • 问题内容: 我目前正在使用MagpieRSS,但是当RSS或Atom提要格式不正确时,有时会掉下来。还有其他使用PHP解析RSS和Atom提要的选项吗? 问题答案: 我一直使用PHP内置的SimpleXML函数来解析XML文档。它是目前为数不多的具有直观结构的通用解析器之一,这使得为RSS提要等特定内容构建有意义的类非常容易。此外,它将检测XML警告和错误,找到任何内容后,您可以简单地通过HTML

  • 我正在使用Java的SharePoint2010OData列表。到目前为止,使用SSL和NTLMv2的连接工作得很好,我得到了一个Atom格式的响应。SharePoint似乎禁用了JSON格式。下一步是高效地解析响应,以获得Java中的列表条目内容属性。 我有几个选项,比如使用: null

  • 本文向大家介绍MongoDB中强大的统计框架Aggregation使用实例解析,包括了MongoDB中强大的统计框架Aggregation使用实例解析的使用技巧和注意事项,需要的朋友参考一下 听说项目里面Aggregation用的多,那就专门针对这个多多练习一下。 基本的操作包括: •$project - 可以从子文档中提取字段,可以重命名字段 •$match - 可以实现查找的功能 •$limi