rss抓取实现相关技巧

很久没写点东西了,有点说不过去了。今天写点前段时间使用rss抓取文章的技术吧,有一些坑,供参考。php

使用rss的缘由主要是协议统一,各类博客,新闻站点,我的站点的文章内容格式千奇百怪,我没法为它们每一个都定制接口进行文章的导入工做,使用rss也就是说这些站点提供统一的接口吐出文章列表,我根据这个接口的格式来抓取文章。html

1.simplepie:项目时间有限,因此就没本身写一个rss抓取的工具,固然要写好也仍是须要一些时间的。在github上找了半天,最后选择了simplepie,缘由是更新比较频繁,最近都还有新的更新,一直都还有人维护。另外功能强大,编码处理啥的,便于应对以后可能遇到的各类新需求。git

2.中文编码问题:使用simplepie导入的文章数据会作一个操做,就是将中文字符转成html实体,这样在显示上是没问题的,可是因为是以html实体存储的,致使从文章中抽取摘要信息时,抽取的就是html实体了,在分享到微信,微博的时候就不是中文字符了,因此不能将中文转化成html实体。在google上找了半天,发现是library/Sanitize.php文件中的两行代码的问题,具体说明见http://blog.webfuns.net/archives/1710.html,主要意思就是这两行代码的操做等同于将html代码作了一次从新load,致使中文编码成html实体了,直接注释掉这两句代码就行了。github

3.simplepie确实挺好用的,初始化一个对象,设置几个参数,执行初始化函数,就能够获取到文章列表了,代码以下:web

//根据rss源初始化rss对象
    public static function init($rss_url) {
        $feed = new SimplePie();
        $feed->set_feed_url($rss_url);
        $feed->enable_cache(false);
        $feed->init();
        $feed->handle_content_type();
        return $feed->get_items();
    }

4.在获取的文章内容中,根据项目需求作了一些处理,主要抓取分段落的文字内容和图片内容,保存<p><br>标签,另外针对图片须要作特殊处理,保存<img>标签的同时,要经过图片连接地址抓取图片内容并存储。 还须要根据<img>标签进行html的分割处理,这里使用
$content_items = preg_split('/(<img[^>]*>)/i', $content, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
针对除<p><br>之外标签的过滤直接使用
$value = strip_tags($value, "<p><br>");

         差很少就这么多吧,项目中用到的就这么多了,基本上大多数对rss抓取的要求均可以知足了,有问题能够留言哈,看到了必定及时回复。微信