这是一篇与Feed托管有关的解决方案,如果你觉得有用,并且打算当天自己搞一个独立域名玩BLOG,请收藏。
昨天晚上,解决了一个烦恼很久的问题,正好昨天FeedBurner被GFW屏蔽了IP,我觉得我解决问题的过程对某些人有用,就写出来吧,哪怕被GFW的技术人员看到,说不定他们又想出应对方法整得我的个人新闻台失去功力。
我的BLOG是独立域名的BLOG,订阅地址是基于我自己的域名的,我认为我不需要FeedBurner 或Feedsky给的一个固定URL来作为FEED地址,也不需要统计功能。我对网络赚钱也没什么兴趣,所以不在乎网站访问量和FEED的订阅数,很长一段时间内,我都不使用FeedBurner 或Feedsky的统计服务,直到现在也不在Feed中放FeedBurner 或Feedsky投放的广告。后来,在今年三月份的时候,我正使劲推广OPENID,Feedsky的吕欣欣找到我,说以Feedsky响应支持OPENID(身份网址),并且希望我使用他们提供域名绑定服务,我就使用了。结果正好后来碰上我报道重庆最牛钉子户,我的网站的weblog目录被BLOCK,有一个用了三年的Feed失效了 ,国内的阅读器抓取不到 https://www.zuola.com/weblog/feedrss2.asp 的内容。幸好我有feed.zuola.com,我便改用上了http://feed.zuola.com 这个不受GFW影响的FEED地址。我甚至还得寸进尺的要求Feedsky把我的这个地址放在他们的绑定域名的示范案例中,这有助于我提高我的个人新闻台的“功力“,这是后话暂且不提。
我把Feed.zuola.com的DNS的A记录指向61.4.177.3就可以使用http://feed.zuola.com了,别人可以订阅这个地址,由于Feedsky的IP是国内的,不会被GFW,国内网友可以很方便的订阅到这个地址。即使如果feedsky被GFW的话,我就可以把IP指向另一个地址,不用再麻烦读者更改订阅地址了。要知道,也许有些网友本来就看我不顺眼,也许趁着你要求他改订阅地址的机会把你的RSS退订了,所以,千万不能让读者感到不便,不要给他们添麻烦。所以啊,使用Feedsky的免费的域名绑定FEED的功能,这是一种很健壮的方案,很安全,不用老麻烦别人换FEED订阅地址。我在这里推荐一下他们的服务和这个方案。
当然,如果遇到连Feedsky也罢工的情况怎么办呢?我昨天晚上的工作就是解决这个问题,提供了一个应急的预案。
我先找一个主机,让他能够在feedsky的IP61.4.177.3罢工的时候能替代它,更改feed.zuola.com 的IP到这个主机的IP上时能够让读者继续得到feed.zuola.com的RSS内容。这个工作一定要未雨先绸缪,到了Feedsky罢工的时候再做这个工作就会手忙脚乱了,趁着现在有时间,做一下这个工作是有必要的,万一feedsky出了事,我只要上网改一下feed.zuola.com这个二级域名的IP指向就是了。
用过Blogger.com的人就知道Blogger.com有一个FTP发布的功能。我从Blogger.com得到启发,觉得可以利用Ftp和crontab还有wget来实现RSS同步,我昨天晚上解决的也是一个利用FTP自动发布来实现RSS同步。主要用到了Linux下的sh和crontab。我其实也不懂Linux命令,但被逼得没办法,只好动脑筋解决这个问题。
解决方案如下:
介绍方法之前我说一下sh脚本,我个人认为sh脚本和我以前学过的DOS的批处理差不多,可以让电脑按一定的顺序做一些事情。
要实现这个必须有一个支持SSH的主机上的帐号。我是Dreamhost用户,当然有SSH帐号了。这个方法的思路就是:用wget下载FeedBurner的RSS内容,然后用sh脚本启动FTP命令把RSS内容上传到国内的空间,再用crontab定期运行SH脚本,这样就可以实现每隔十五分钟把RSS同步到国内了,这样就可以逃过GFW对FeedBurner的封锁了。这种方法对在FeedBurner有Feed广告发布的solidot或cnbeta有帮助,这样就不影响RSS页内的广告展示了。
autoftp.sh的内容:
#!/bin/sh
cd /home/zuola/Maildir/new/
rm *.*
cd /home/zuola/
rm index.xml
wget https://www.zuola.com/index.xml
ftp -i -n feed.zuola.com <<!
user zola fuckgfw&gcd
cd www
prompt
ascii
put index.xml
close
bye
!
上面代码的第一行#!/bin/sh是注明用什么来解释这段脚本,
第二行和第三行是为了删除crontab成功运行命令后系统发给用户的邮件
第三行和第四行是为了清除原来的rss,如果不删除的话,wget下来的文件不会覆盖原来的文件而生成index.xml.1
第五行是为了下载原始feed内容,如果你下载的是FeedBurner的内容,你可能要rename一下再push到另一个FTP站点里。
第六行,开始上传文件到feed.zuola.com的备用主机的,这里可使用域名或IP,最好使用IP,可省去域名解析过程。需要特别指出的是后面的<<!这段内容,这个叹号可以改为任意字母或单词,那bye后面的叹号也必须对应改。两个地方必须一致。这似乎是UNIX下的一个特性,如果没有这样处理一下,FTP的任务就不能完成。-n 这个参数是让FTP忽略.nertc文件,.netrc是中指定的主机名和密码之类的信息,ftp命令在执行时会去寻找.netrc的文件,如果此文件存在并且其中有FTP命令行,则会执行.netrc文件中命令行。
第七行是输入用户名,用户名和密码之间用空格间开.
第八行是进入某个目录
第九行是关闭提示
第十行是把传输类型改为ascii,不要改为binary了,RSS内容全是文字字符,不是二进制代码。
第十一行是上传文件
第十二行是关闭链接
第十三行是退出FTP程序。
然后把autoftp.sh的属性chmod 为755,我也不知道改成700能不能执行。
运行crontab -e后加一行
0-59/15 * * * * /home/zuola/autoftp.sh
我昨天晚上浪费很多时间,开始我设置15分钟执行一次,用的代码是
*/15 * * * * /home/zuola/autoftp.sh
结果这样不执行,最后我用笨办法一一排除才知道用0-59/15才是每隔15分钟执行的正确方法,也许在其它crontab中能执行,我在Draemhost中就只能用0-59/15这种表达方式。
对了,其实,FTP PUSH过程中用.netrc的方式有更高的安全性。我懒得去试验使用netrc来登录FTP了。已经解决自动FTP都已经很高兴了,要知道,自从我的网站被GFW之后,我为了让GFW的怀抱内的抓虾和Feedsky能获得到我的FEED内容,我都是用手工下载再用FTP上传的办法把FEED内容转移到防火长城内,用手工的办法来维持两份内容完全相同的FEED。现在我总算可以省下一道工序了。希望我的办法对其它BLOG建立在国外的Blogger有帮助作用,你也可以用这种办法为GFW内外的人们提供两个订阅地址。
用Fenng提供的办法也很“健壮”,只公布一个属于自己的域名下的订阅地址,然后用rewite temp方式用http 301重定向到feedsky或FeedBurner 提供的feed地址,同样可以享受到统计服务,也不怕天灾人祸。
我以前也介绍过“Feedburne的另类用法“,这个方法的具体描述在这(英文介绍)。
使用这种方法后,别人订阅的是本机提供的Feed,实际获得的Feed却是重烧过的,万一FeedBurner被GFW屏蔽,还是可以直接获得本机Feed提供的内容。我早说过feedburner有被GFW的危险了,不知道那篇文章有没有帮助到人。
BTW:feedburner被GFW,我有点高兴,为啥?我心理阴暗呗,凭啥我一个人先受难?现在好了,有难大家当了,反对GFW不是我一个人的事了,也不会再有傻逼冒出来教训我:可怜之人必有可恨之处。妈的,似乎GFW来整我还是我的不对。现在这傻逼应该能明白“倾巢之下 焉有完卵”的意义了吧。还是那句话,弄点钱,有空起诉GFW去,这才是终极solution。
逼的。
对于有SSH账号的主机的朋友们来说,这个很实用。
第三行的rm *.*可以简单的用rm *代替。UNIX下文件系统没有扩展名这个概念的,所谓.后面的字符纯是为了方便人们识别用的。
feedburner对中国互联网影响似乎没有想想中那样的严重。
因为大部分读者是用GoogleReader 和抓虾等RSS阅读器,不受影响。
v2ex也加入了gfw列表,,惨。。