通过代理更新Gregarius

[Gregarius](http://gregarius.net/)是我现在使用的rss阅读器,其它在线的比如google reader、zhuaxia我网速太慢,使用不顺畅,纯离线方式的吧,比如liferea,在浏览的时候依然要解析html和联网(feed内容中有图像),还是在本机架一个Gregarius,cron定时更新,然后用firefox看方便,保存有价值的文章也更方便。

原先更新都是用wget:

wget --no-check-certificate -O /tmp/gregarius.update https://my_local_machine_name/gregarius/update.php

wget的输出会已本地用户邮件形式被mutt收下来,设定好之后,有一段没时间看rss也没在意,这天忽然发现原来wget只要retry 3、4次就能更新完全部feed,现在需要十几次,而我的feed增长显然没达到这种程度;并且有些网站在Gregarius中看到已经很久没有更新了(-t 1可以指定只retry一次,默认是20次,-t 0为无限制retry下去)。同时在feed管理中看到,很多网站的名字都加上了删除线,比如“[月光博客](http://www.williamlong.info/)”,最后终于发现,这些名字打上了删除线的blog的feed全部托管在feedburner,并且内容全部没有更新,原因,自然是开始于前段时间的feedburner无法访问。

feedburner无法访问我倒不怕,我一直都在本机[用squid、privoxy、tor智能中转web访问请求](294),现在只要让gregarius更新feed时用上我这个本地的代理服务器squid就可以了,看了一下gregarius的代码,远程读取rss使用的是[Snoopy类](http://snoopy.sourceforge.com),本地文件为extlib/Snoopy.class.inc,调用是在extlib/rss_fetch.inc文件中,大概第317行,function _fetch_remote_file部分,在这里添加如下内容即可:

$client->read_timeout = MAGPIE_FETCH_TIME_OUT;
$client->use_gzip = MAGPIE_USE_GZIP;

// 这几行是添加的内容,其它是原文件中的 Modify by Fwolf @ 2007-10-14
// Use proxy localhost:3128 when fetch feed
$client->proxy_host = "localhost";
$client->proxy_port = "3128";
$client->_isproxy = true;
$client->read_timeout = 0;  // tor via squid is slow
//

if (is_array($headers) ) {
    $client->rawheaders = $headers;
}

就这么简单,$client的设置参照Snoopy类的定义即可,然后调用不再使用wget,而是直接运行update.php:

cd /local/path/to/gregarius; php -f update.php

这样更新的结果会清晰的输出:

Engadget Simplified Chinese ...
OK (HTTP 200), 3 New Items

玩意儿 ...
OK (304 Not modified), 0 New Items

津津乐道 ...
HTTP Timeout (Local cache), 0 New Items

小众软件 ...
OK (HTTP 200), 0 New Items

如果加上-- --silent就没有输出了,第一个--是给截止php接收参数的参数,--silent才是给update.php用的。

本文针对Gregarius 0.5.5 revision1761。

3 thoughts on “通过代理更新Gregarius”

  1. 我也有一个站用gregarius。开始觉得很好。后来觉得还是linlina简单方便。所以其他聚合都用lilinan。gregariius本来想换掉了。现在看你也在研究和使用这个,我就保留吧。一定能从你的使用心得中将来收获不少呢。

    wget的输出会已本地用户邮件形式被mutt收下来,设定好之后,有一段没时间看rss也没在意

    这个什么意思?看着让人激动啊。能否找时间详细说一下。

    给你提一个建议。为什么不把你gregarius站点放在国外呢,那样更新源不就没有问题了么?之后再邮件发给你。

    既然你现在有主机了,上面也能cron,可以尝试一下啊。

  2. @jlake 极湖也是你的网站吧?怎么用opera的blog了?程序一般,还无法访问,不过现在好了:

    极湖 ...
    OK (HTTP 200), 0 New Items

    @bxy wget的输出其实没有什么实际意义的,和shell下的输出结果一样,cron会把输出以本地用户邮件形式发给用户,mutt里自然就能看到了,比如下面的内容:

    --04:00:01--  https://my_local_machine_name/gregarius/update.php
               => /tmp/gregarius.update'
    Resolving my_local_machine_name... 192.my.ip
    Connecting to my_local_machine_name|192.my.ip... connected.
    WARNING: Certificate verification error for my_local_machine_name: self signedcertificate
    HTTP request sent, awaiting response... 302 Found
    Location: http://my_local_machine_name/sys/gregarius/ [following]
    --04:05:36--  http://my_local_machine_name/gregarius/
               =>/tmp/gregarius.update'
    Connecting to my_local_machine_name|192.my.ip... connected.
    HTTP request sent, awaiting response... 200 No headers, assuming HTTP/0.9
    Length: unspecified

    0K                                                          22.09 MB/s
    

    04:05:36 (22.09 MB/s) - `/tmp/gregarius.update' saved [448]

    不放主机上不是因为cron占资源,而是因为会被爬虫乱抓(不是所有的都遵守robots.txt),并且会影响别人的网站,原来有网友抱怨我gregarius里的内容在搜索引擎中排在他网站前面(这里,fcicq的留言);另外也没有意义,就我自己用,远程数据备份也不方便。

Leave a Reply to jlake Cancel reply

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