首先说一下场景:
前些日子运营的童鞋突然提出来要做网站RSS开发,当时想了想,不就是生成个xml,挺容易的。
RSS是什么呢?定义上说叫真正简易联合。简单理解下就是不同网站之间相互交互信息用的一个渠道,比如说B站通过RSS可以方便的获取A站社会新闻的最新发布的文章。
其次说下第一次做的决定:
在网站的根目录下新建了一个rss目录,定义了一个web_rss.xml 用来响应其他客户端对网站rss资源的访问。
而这个web_rss采用了在后台文章管理列表添加生成rss按钮来进行xml内容的更新和删除。
那就要问了,这不是已经实现了功能么,你想推送什么东西就推送什么的东西,想把哪些推送删除掉就把哪些推送删除掉。不已经符合要求了吗?
坑的就在这里,我帮研发制造了一次重写的机会,坑了队友。
那问题在哪呢?:
rss这里其他的网站例如www.chinaDaily.com,人家提供出去的是http://classifieds.chinadaily.com/rss.php?view=ads&catid=1&cityid=2&lang=en这样一个链接,那和我们的有什么不一样呢?
人家的定远的类型ads 订阅的目录catid订阅的城市cityid订阅的rss的语言en都是可以配置的;而我们的是一个死死的静态web_xml...
人家的是动态请求,访问数据库的,网站已发布新文章访问这个链接就能拿到订阅的内容;而我们是要运营手动推的,坑爹的还要运营手动删除以前的,如果今天运营忘了点推送,那就是对应压根获取不到我们今天更新的新闻。
rss这里有一条注意事项是要能自动更新自己的内容,而我们显然没达到要求。
rss推荐用条件,比如最多50条等来控制推送的条数;而我们是让运营同事自己点击添加和删除,想想都觉得对不起运营。这不是给运营减负,这是给运营挖坑!
第二次的方案:
> rss改为动态请求,订阅的内容通过传递参数来决定。
> 技术上使用PHP的xml_rss函数直接读取xml内容并进行元素操作。
> 订阅的条数和运营协商定下来,按时间或运营定的可行规则将超出的部分废除掉。
> rss对应的xml文件按访问的参数的不同,存放在memcache缓存里,对于缓存的更新提供两种方案
注意:参数这里加限制,参数限制在有限的参数集合里,不能由用户自己随意设定。
a. 设置一个短的过期时间,比如5分钟
b. 缓存时间设置一天或更长, 新发布文章的时候调用rss更新接口直接更新缓存,用户访问的时候先取缓存的数据,没有的话再访问数据库。