Dayi Lin, Ph.D.

Principal Researcher, AI & Software Engineering

打造群博2:借助WP-o-Matic实现RSS自动抓取

笔记

上一篇我们讲到了关于改造模板使得文章只显示摘要以方便阅读,这一篇我们来讨论下如何基于WordPress来实现自动根据RSS抓取文章的群博功能。

介绍一下这个强大的插件:WP-o-Matic。这是我试了N个不同插件之后唯一能用而且效果还行而且支持中文的RSS抓取插件……它也是一个开源项目,目前的最新版本是2.3.9。

在正式开始搭建群博之前,我们还需要一些准备工作,比如:在WP后台的分类目录中,根据抓取的RSS设置好分级的分类目录。每个RSS在之后占一个子类,其上可以有父类。这样方便后续管理与查看。

完成之后,就可以开始正式搭建了。首先,大家可以前往WP的官方地址下载这个插件:http://wordpress.org/plugins/wp-o-matic/ 下载回来是一个ZIP包。和正常安装其他插件一样,你可以直接从WP后台的插件功能里上传这个ZIP包安装。不过这要求服务器开着FTP服务。所以,我们通过SSH或者其他手段,把这个压缩包解压,放到WP目录的wp-contentplugins目录下。因为后面需要用到本地缓存图片这个功能,所以记得把这个目录的权限设置成777。

到此,插件就安装完了,是不是很方便呢~~我们登陆WP的后台,在插件这个模块里把它启用。安装启用后会提示你依次点击Next,一共4步,最后点击Submit提交。我们发现设置里已经多了一个栏目,就叫WP-o-Matic。这样它就已经起作用了。我们现在需要进行一些简单的设置。

在设置 -> WP-o-Matic里,我们可以看到五个选项卡:Dashboard Campaigns Options Import Export。最后两个是导入和导出。插件支持一般RSS订阅器的标准格式的导入和导出,可以方便的移植RSS种子们。我们需要用的是前三个。

Dashboard是一个概览页面,可以看到贡献最多文章的Campaign,更新日志等系统的概览信息。Campaigns可以对每一个单独的RSS种子做设置(我们将每一个独立的RSS设置为一个Campaign以方便管理和区分)。Options就是整体的设置啦。

我们先在Options里设置一下。其实不是很难的英语,按照自己的需求设置就好了。需要特别强调的是下面这个:插件的三种Cron模式。

我们知道,网页的代码是在用户访问的时候,服务器才并行执行的。这样插件怎么实现自动对RSS进行抓取呢?WP-o-Matic给我们提供了三种解决方法:

If you want to go automated, and let WP-o-Matic do the nasty job of pulling rss feeds and creating posts, you need to set up a cron job. For performance reasons, it’s highly recommended that you do so, but you can also let WP-o-Matic handle it in browser requests.

Add this line to your crontab, or use your web panel of choice interface.

*/20 * * * * C:Windowssystem32ftp.EXE http://localhost/wp/wp-content/plugins/wp-o-matic/cron.php?code=a1882cd5

If you decide not to enable cron, a pseudo-cron web-based approach takes place, which relies on web requests. Disadvantages? It can harm user experience (the page won’t load for the visitor until feeds are parsed), and will only take place if someone visits your site, which is not good for sites that may not receive visits in days (intranet sites may be an example).

There’s, however, an option in the middle. It’s called WebCron, a service that will request a webpage you specify at the time you specify, just like cron. Disadvantages? We don’t know about its reliability. But if you can’t run cron, this might be a great option for you. Set it up for every hour and point it to this URL:

http://localhost/wp/wp-content/plugins/wp-o-matic/cron.php?code=a1882cd5(作者注:这个code不是固定的,每个人并不一定相同,以你自己的插件给出的网址为准。)

大家一定懒得看上面一大段英文,给大家简单说明一下它的意思。

为了能够定期的抓取RSS更新,我们需要让网页定期的被访问以触发PHP程序被执行。而达到这种效果有三种方法:

1、Cron

计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 cron 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的作务。比如我们可以在配置文件中约定每天早上4点,对httpd 服务器重新启动,这就是一个计划任务;
下面我们先来说说cron:
在Linux系统中,计划任务一般是由cron承担,我们可以把cron设置为开机时自动启动。cron启动后,它会读取它的所有配置文件(全局性配置文件/etc/crontab,以及每个用户的计划任务配置文件),然后cron会根据命令和执行时间来按时来调用度工作任务。
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

你也可以将这个服务在系统启动的时候自动启动:
在/etc/rc.d/rc.local这个脚本的末尾加上:

/sbin/service crond start

现在Cron这个服务已经在进程里面了,我们就可以用这个服务了

上面比较详细的给出了CRON的说明。而我们也不必纠结CRON的具体接口是什么样的,因为WP-o-Matic帮我们给出了一句语句,只需配置CRON让它执行这个就好了。

*/20 * * * * C:Windowssystem32ftp.EXE http://localhost/wp/wp-content/plugins/wp-o-matic/cron.php?code=a1882cd5

上面这句看起来是给WINDOWS的,不过稍加改造就也能给LINUX用了。

2、Web-Cron

如果不幸没有服务器的访问权限,例如只是一个网络上的虚拟空间,该怎么办呢?没关系,还有第二种解决方案:有一个叫web-cron的网站~在上面简单注册之后,它会代你每隔一定时间访问一次特定的链接,这样就也触发了更新过程~

3、pseudo-cron

如果跟我们的这个群博一样,是架在内网的网站,外网不能访问它,那么web-cron就不起作用了,怎么办?WP-o-Matic提供了一种解决方案,只需简单的设置,更新过程就变成依赖于用户访问触发。一旦有用户在更新时间访问了网站,他她就代为触发了更新过程。这么做的缺点是,对于那个运气不好的用户,它的访问速度就很慢,因为它需要等待整个RSS更新完才会显示出网站来……而如果站点很久没人访问,也会导致内容陈旧(不过没人访问,又有什么关系呢= =)

好了,关于自动更新的CRON,就给大家介绍到这。这步完成之后,只需要点设置页面的标题旁的Add A Campaign,添加一个个RSS种子,就可以了~这个其实不难,大家自己看英文哦~~

Leave a Reply

Your email address will not be published. Required fields are marked *