ԱŮװ
Ů
׷
Դװ
˼Դ
Ҿ̳
Ա
װ
װ
83ʱŮ
Ҿװ
Ա̳
Ա̳ Ҿװ Ҿ̳ 83ʱŮ ԱŮװ Ů ׷ Դװ ˼Դ װ Ա װ

存档

文章标签 ‘godaddy’

wordpress下解决godaddy免费空间feed出错的问题

2009年4月17日 26 条评论

128px-feed-icon_svg问题描述:
在浏览器里打开feed地址,不能像正常的feed订阅那样出来订阅的页面,在firefox下是直接以纯文本形式显示,IE7下显示“已取消到该网页的导航”,而直接通过google reader等倒是能正常订阅。在Feed Validator上检查feed文件的正确性,问题如下:

This feed does not validate.
line 1, column 1: Blank line before XML declaration [help]
line 42, column 1: XML parsing error: :42:1: not well-formed (invalid token) [help]

虽然对于我这blog来说feed订阅这东西短期内基本上是拿来摆设的,不过有这问题心里总是不爽,于是乎网上搜寻解决办法,皇天不负有心人,最后顺利解决问题了,下面就介绍一下我的解决方法(方法非原创,参考了SAM LESHER)。

先说说引起这个问题的原因:godaddy的免费空间(CreatingDrew),因为godaddy会自动加上一段广告代码,所以在feed的XML文件输出时也在文件的最后两行给加上了广告代码,并在最前面加了一个空行,这就是上面检查出的问题,所以只要去了这个空行和广告代码就OK了,步骤大致如下:

1. 根据wordpress输出feed的默认地址下载feed文件到本地,这个文件是包含广告代码的
2. 写脚本,使用sed对文件进行过滤,把开头的空行和广告给删除掉
3. 通过修改后的feed文件输出feed订阅信息
4. 在godaddy管理页面上建一条cron任务,每隔一定时间执行一遍脚本,使更新后的feed地址也是正常的

可以把feed文件下载和过滤都写到一个脚本里,修改feed地址则可以使用插件来完成。

下面是实现脚本:

#!/bin/sh
BLOGADDRESS="http://blog.happysa.org" #blog地址,用于下载feed文件
FEEDPATH=/var/www/home/happysa/domains/happysa.org/public_html/feed #下载后的feed文件存放地址,路径根据具体情况修改
FEEDFILE=$FEEDPATH/feed.xml
RSSFILE=$FEEDPATH/rss.xml
RDFFILE=$FEEDPATH/rdf.xml
ATOMFILE=$FEEDPATH/atom.xml
COMMENTSFILE=$FEEDPATH/comments.xml
#GDSTRING1="
 
<!-- adsok -->"
#GDSTRING2="<script src="https://a12.alphagodaddy.com/hosting_ads/gd01.js"><!--mce:0--></script>"
 
if [ -f $FEEDFILE ]; #删除老的feed文件
then
    rm -f $FEEDFILE
fi
wget -q $BLOGADDRESS/feed -O $FEEDFILE #下载feed文件
sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $FEEDFILE #过滤广告代码和最前面的空行,过滤条件可根据具体情况作改动
sed -i 's/blog.happysa.org\/feed\"\( rel=\"self\" type=\"application\/rss+xml\" \/&gt;\)/feed.happysa.org\/\"\1/' $FEEDFILE #修改订阅地址
 
if [ -f $RSSFILE ];
then
    rm -f $RSSFILE
fi
wget -q $BLOGADDRESS/feed/rss -O $RSSFILE
sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $RSSFILE
 
if [ -f $RDFFILE ];
then
    rm -f $kRDFFILE
fi
wget -q $BLOGADDRESS/feed/rdf -O $RDFFILE
sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $RDFFILE
 
if [ -f $ATOMFILE ];
then
    rm -f $ATOMFILE
fi
wget -q $BLOGADDRESS/feed/atom -O $ATOMFILE
sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $ATOMFILE
sed -i 's/blog.happysa.org\/feed\/atom\" \/&gt;/feed.happysa.org\/atom.xml\" \/&gt;/' $ATOMFILE
 
if [ -f $COMMENTSFILE ];
then
   rm -f $COMMENTSFILE
fi
wget -q $BLOGADDRESS/comments/feed -O $COMMENTSFILE
sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $COMMENTSFILE
sed -i 's/blog.happysa.org\/feed\/comments\"\( rel=\"self\" type=\"application\/rss+xml\" \/&gt;\)/feed.happysa.org\/comments.xml\"\1/' $COMMENTSFILE

以上代码新建一个脚本feed.sh,在空间下放哪都可以,之后在空间根目录下建立feed文件夹,用于存放feed文件。

好像免费空间没有ssh帐号的,有些东西设置就会麻烦一点,首先要打开ftp客户端登陆后在脚本文件上右击修改属性,使之有可执行权限。接着就是利用cron建立一个自动执行计划,让脚本每隔多少时间执行一次,在Hosting Control Center上Content下的Cron manager,如图:

2009-04-17_213114

Create Cron Job,主要是Command,时间勾上Run twice an hour,这样可以更新频繁一点,之后保存。

2009-04-17_213705

接下来就是设置feed地址了,只要feed正常了,怎么用就很简单了,网上的方法也很多,比如可以使用wp-feedlocations,安装后在里面设置feed地址

2009-04-17_215302

上面有个地方用到空间的绝对路径,查看绝对路径可以利用php的system函数,同时如果没到cron的时间而想手动执行脚本也可以利用这个,并且可以用这个来输出信息进行调试,我的方法是空间下新建一个php文件,如foo.php,写入如下代码:

<!--?php
    system("pwd");
    system("sh /var/www/home/happysa/domains/happysa.org/public_html/scripts/feed.sh  -->log 2&gt;&amp;1");
?&gt;

然后在浏览器里访问http://happysa.org/foo.php,就可以看到绝对路径并手动执行脚本了。

分类: blog 标签: , ,