新闻类网站rss接口的编写心得
使用的是Jdom中的相关API,具体步骤如下
要求的格式:
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
<channel>
<title>上千趣,顶有趣</title>
<description>千趣网,有趣新闻第一聚合平台,生产和提供适合社交网络传播的各类有趣新闻。</description>
<link>http://www.qianqu.cc</link>
<language>zh_CN</language>
<pubDate>Tue, 06 Sep 2016 13:46:22 +0800</pubDate>
<item>
<title>
<![CDATA[俄罗斯推出女模裸体高速举牌活动,成效实在是太好了 ]]>
</title>
<link>http://127.0.0.1:8080/life/55720.html?from=LieBao&s=cm</link>
<description>
<![CDATA[俄罗斯的交通事故发生率非常高,每年有三万多人因此死亡受伤 ]]>
</description>
<content:encoded>
<![CDATA[
<article id="articleContent">
<p style="text-align: left; text-indent: 2em;">俄罗斯的交通事故发生率非常高,每年都有三万多人因此死亡受伤。为了让人们意识到超速行驶的危害,当局做了很多努力,效果都不理想。现在他们又做了一个大胆的尝试,那就是让半裸美女在街头举限速牌,提醒司机不要超速<span style="text-indent: 2em;">很多司机看到后果然将车速放缓,慢了下来。</span>
</p><p style="text-align: center; text-indent: 2em;"><img src="http://www.qianqu.cc/uploads/image/article/big/20160906/1473140636321029057.jpg"/></p><p style="text-align: left; text-indent: 2em;">因为美女的颜值太高了,当她们在路边举牌的时候路过的车辆无一不按照规定限速安全驾驶。当局让半裸美女举限速标志,就是为了让人们放慢车速,不管是要看美女还是看限速牌,只要慢下来就是成功。
</p><p style="text-align: center; text-indent: 2em;"><img src="http://www.qianqu.cc/uploads/image/article/big/20160906/1473140636507051888.jpg"/></p><p style="text-align: center; text-indent: 2em;"><img src="http://www.qianqu.cc/uploads/image/article/big/20160906/1473140636664041317.jpg"/></p><p style="text-align: center; text-indent: 2em;">
<img src="http://www.qianqu.cc/uploads/image/article/big/20160906/1473140636765052287.jpg"/></p><p style="text-align: center; text-indent: 2em;"><img src="http://www.qianqu.cc/uploads/image/article/big/20160906/1473140636859014104.jpg"/></p><p style="text-align: left; text-indent: 2em;">这就是俄罗斯街头的场景。
</p><p style="text-align: left; text-indent: 2em;">路边突然出现半裸美女,司机很容易分神。虽然她们是一番好意,举牌提醒司机不要超速,但分神带来的后果可能更加严重。之前莫斯科街头一辆印有女子胸部广告的卡车就在一天内引发500多起车祸。</p><p style="text-align: left; text-indent: 2em;">和美女一姐打嘴炮、探讨不一样姿势。微信添加朋友→公众号→搜“姿势情报局一姐”(已认证),太纯洁的,不要来!
<br style="text-align: left;"/></p></article>
]]>
</content:encoded>
<category>生活</category>
<source>千趣网</source>
<pubDate>Tue, 06 Sep 2016 13:44:18 +0800</pubDate>
</item>
</channel>
</rss>
第一步:创建根标签
Document doc = new Document();
Element rss = new Element("rss");
rss.setAttribute("version", "2.0");
doc.setRootElement(rss);
第二步:创建子标签(带有CDATA的)
Element channel = new Element("channel");
//将channel标签置于rss标签中
rss.addContent(channel);
//不带CDATA区域的
Element CTitle = new Element("title");
CTitle.addContent(channelData.getTitle());
channel.addContent(CTitle);
//带CDATA区域的
Element CDescription = new Element("description");
CDATA str = new CDATA(channelData.getDescription());
CDescription.addContent(str);
channel.addContent(CDescription);...........以此类推,需要多少标签,已同样的方式创建即可,如果标签较多,也得自己手动编写代码,是一件比较苦逼的活儿
第三步:使用io流将拼接好的xml输出
XMLOutputter out = new XMLOutputter();// 创建输出流
ByteArrayOutputStream buf = new ByteArrayOutputStream();
out.output(doc, buf);
String ok = buf.toString("ISO-8859-1");
return ok;
这里需要强调一下:这里的编码我这边是需要改成iso-8859-1的(控制台输出的=对应的日志也是乱码,但是再浏览器中访问接口链接时,不会出现乱码),我这我也比较郁闷,之前换成utf-8不好使,会出现乱码
注意事项:
1,我使用的是springmvc作为表现层框架的
@Controller
@RequestMapping("")
public class SuNingAction {
@Autowired
private SuNingService suNingService;
@RequestMapping(method={RequestMethod.GET},produces = MediaType.APPLICATION_XHTML_XML_VALUE,value={"/suNing"})
@ResponseBody()
public String Xiaozhi(HttpServletResponse response) throws JAXBException, IOException {具体代码就是上面的三大步骤;return null;}
2,关于xml中的名称空间问题<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
Document doc = new Document();
Element rss = new Element("rss");
//名称空间的添加
Namespace ns= Namespace.getNamespace("content", "http://purl.org/rss/1.0/modules/content/");
rss.addNamespaceDeclaration(ns);
//版本号的添加
rss.setAttribute("version", "2.0");
doc.setRootElement(rss);
//这招绝对好用
3,有的rss中的content标签,需要带上encoded,比如说上面的案例就需要使用 <content:encoded>并且还需CDATA包裹
Element Icontent = new Element("encoded", "content","http://purl.org/rss/1.0/modules/content/");
CDATA c = new CDATA(itemData.get(i).getContent());
Icontent.addContent(c);
item.addContent(Icontent);
4,时间格式问题
涉及到时间的格式化问题Tue, 06 Sep 2016 13:44:18 +0800
还有就是星期的转化,中英文的转换问题,这些可以通过百度自行解决,并不是难点
5,还有最后一个问题是在servcie层中关于数据返回的问题
注意变量的定义的范围,也就是全局变量与局部变量的定义位置问题,当从数据库中获取到数据后,通过get/set方法存值时,千万注意,不要将变量定义成全局的
否则无论你检索的数据有多少条,存放值的对象中使用是一条相同的数据,这个问题虽然不大,但尽量不要犯,会被人嘲笑的, 擦,老子就被总监嘲笑半天.......
Element CDescription = new Element("description");
CDATA str = new CDATA(channelData.getDescription());
CDescription.addContent(str);
channel.addContent(CDescription);
新闻类网站rss接口的编写心得的更多相关文章
- GNE: 4行代码实现新闻类网站通用爬虫
GNE(GeneralNewsExtractor)是一个通用新闻网站正文抽取模块,输入一篇新闻网页的 HTML, 输出正文内容.标题.作者.发布时间.正文中的图片地址和正文所在的标签源代码.GNE在提 ...
- 新闻类网站的通用爬虫--GNE
GNE(GeneralNewsExtractor)是一个通用新闻网站正文抽取模块,输入一篇新闻网页的 HTML, 输出正文内容.标题.作者.发布时间.正文中的图片地址和正文所在的标签源代码.GNE在提 ...
- Java基础-接口.编写2个接口:InterfaceA和InterfaceB;在接口InterfaceA中有个方法void printCapitalLetter();在接口InterfaceB中有个方法void printLowercaseLetter();然 后写一个类Print实现接口InterfaceA和InterfaceB,要求 方法 实现输出大写英文字母表的功能,printLowerca
#34.编写2个接口:InterfaceA和InterfaceB:在接口InterfaceA中有个方法void printCapitalLetter():在接口InterfaceB中有个方法void ...
- java处理高并发高负载类网站的优化方法
java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF ...
- [转]java处理高并发高负载类网站的优化方法
本文转自:http://www.cnblogs.com/pengyongjun/p/3406210.html java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,ja ...
- 用react开发一个新闻列表网站(PC和移动端)
最近在学习react,试着做了一个新闻类的网站,结合ant design框架, 并且可以同时在PC和移动端运行: 主要包含登录和注册组件.头部和脚部组件.新闻块类组件.详情页组件.评论和收藏组件等: ...
- 爬取表格类网站数据并保存为excel文件
本文转载自以下网站:50 行代码爬取东方财富网上市公司 10 年近百万行财务报表数据 https://www.makcyun.top/web_scraping_withpython6.html 主要学 ...
- web应急:新闻源网站劫持
新闻源网站一般权重较高,收录快,能够被搜索引擎优先收录,是黑灰产推广引流的必争之地,很容易成为被攻击的对象.被黑以后主要挂的不良信息内容主要是博彩六合彩等赌博类内容,新闻源网站程序无论是自主开发的还是 ...
- TestNG使用教程详解(接口测试用例编写与断言)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/sinat_34766121/artic ...
随机推荐
- Atitit wsdl的原理attilax总结
Atitit wsdl的原理attilax总结 1.1. 在 W3C 的 WSDL 发展史1 1.2. 获取wsdl,可能需要url后面加wsdl,也可能直接url1 1.3. Wsdl的作用2 1. ...
- 移动混合应用HTML5数据查询优化
项目介绍 pheongap混合应用,跨平台,做应用加工厂提供应用模板编辑器~ 本地应用,完全是模拟IOS,安卓原生应用的实现,所以支持14种手势,所有PPT动画,视觉差效果,等等功能组合... 这是I ...
- 移动web app开发必备 - Deferred 源码分析
姊妹篇 移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...
- 前端学PHP之字符串函数
× 目录 [1]特点 [2]输出 [3]空格[4]大小写[5]HTML[6]格式化[7]比较 前面的话 字符串的处理和分析在任何编程语言中都是一个重要的基础,往往是简单而重要的.信息的分类.解析.存储 ...
- 这算是ASP.NET MVC的一个大BUG吗?
这是昨天一个同事遇到的问题,我觉得这是一个蛮大的问题,而且不像是ASP.NET MVC的设计者有意为之,换言之,这可能是ASP.NET MVC的一个Bug(不过也有可能是保持原始请求数据而作的妥协). ...
- 探讨Android中的内置浏览器和Chrome
1.Android默认浏览器和Chrome的区别 Android出厂自带的浏览器:安卓WebKit浏览器,也成内置浏览器或者默认浏览器. 安卓WebKit不是Chrome.Chrome浏览器在它的用户 ...
- 我的iOS开发系列博文
之前目录性的总结了发表过的关于OC方面的文章,今天在目录性的总结一下有关iOS开发的文章.走过路过不要错过哦,今天的博文也全都是干货.写技术博客与大家交流一下思想也是不错的. 下面是我的技术博客中有关 ...
- MongoDB碎碎念
1. 如何从备份节点读取数据 默认是不允许的,会报如下错误: testReplSet:SECONDARY> show dbs --19T10:: E QUERY [thread1] Error: ...
- tomcat:there is no resources that can be added or removed from server
原因: 1.不是web project 解决方式:project-->property--project facet 新建或者修改 2. 版本不兼容 升级tomcat版本
- Quartz 在 Spring 中如何动态配置时间--转
原文地址:http://www.iteye.com/topic/399980 在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度. 有关调度的实现我就第一就想到了Quartz这个开源 ...