首页 > blog > wordpress下解决godaddy免费空间feed出错的问题

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

2009年4月17日 happysa 发表评论 阅读评论

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="</object></layer></span></div></table></body></html><!-- adsok -->"
#GDSTRING2="<script language='javascript' src='https://a12.alphagodaddy.com/hosting_ads/gd01.js'></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\" \/>\)/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\" \/>/feed.happysa.org\/atom.xml\" \/>/' $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\" \/>\)/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>&1");
?>

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

分类: blog 标签: , , 1,871 views

收藏本文:Del.icio.us - Google书签 - 分享到Twitter - 收藏到鲜果 - yahoo收藏 - digg - 更多 »


转载请注明出处及作者信息

本文链接: http://blog.happysa.org/blog/solve_the_feed_problem_of_godaddy.html


Creative Commons License

  1. 2009年8月11日21:17 | #1

    看了,太复杂,懒得去钻研了。
    如果能把LIVE WRITER设置一下就好了,这个我感兴趣。
    GODDAY这个太不厚道,赠送的免费空间很多功能不正常,我的wordpress后台的动态功能都用不了,包括插入图片、FLASH、音乐,小工具也不可用,FEED也无法更新,也无法离线发布。比较郁闷。
    还好,本人需求不高,能凑合。

  2. happysa
    2009年8月11日21:30 | #2

    @邵希杰
    虽然我现在用的不是godaddy的免费空间了,不过我记得wordpress的后台基本上是比较正常的,这篇文章里的图片就是当时插入的,只是用的不是flash上传,所以不清楚flash是不是正常,也可能是某些插件冲突了,我最近就因为Use Google Libraries插件导致后台的js代码都失效了。另外关于feed更新、离线发布等,应该就是那段广告代码导致的,引起xml文件解析出错,不嫌麻烦的话可以试试我文中的方法。 :smile:

  3. 2009年9月27日16:54 | #3

    我基本放弃了

  4. wuzhez
    2009年9月27日21:02 | #4

    @邵希杰
    不知道godaddy现在的广告脚本怎么样了,解决思路应该是差不多的

  5. 2010年1月8日15:43 | #5

    楼主,我用的是我xiaosi.me的免费空间装的wordpress,为什么老提示,Your PHP installation appears to be missing the MySQL extension which is required by WordPress.
    我都按要求填入了数据库信息了,为什么每次运行安装页面的时候都跳出来上面这个提示呢?请指教,万分感谢。

  6. wuzhez
    2010年1月8日16:35 | #6

    @xiaosi
    是php没有配置好mysql库的支持吧,php.ini里配置的,可以联系一下提供空间的网站管理员或客服

  7. 2010年1月8日22:06 | #7

    @wuzhez
    我的是免费空间,不知道该怎么问客服呀?

  8. wuzhez
    2010年1月9日07:42 | #8

    @xiaosi
    总会有技术支持的吧,或者FAQ、帮助中心什么的

  9. Bral
    2010年1月11日23:17 | #9

    怎么我这里设置了feed.sh自动执行,而且文件也用ftp工具改成777属性了,但是目标目录却没有任何文件被下载到呢?直接访问http://blog.u15s.com/feed是能看到有feed内容的

  10. wuzhez
    2010年1月12日09:30 | #10

    @Bral
    你可以先拿脚本在本地执行一下看,确定一下是不是脚本的问题

  11. 2010年1月12日15:26 | #11

    额,本地是win,怎么执行啊。
    我是完全照搬你的脚本,只是改了路径以及域名的说。feed.sh文件路径是http://blog.u15s.com/feed.sh,博主麻烦下载来帮忙看看,谢了

  12. wuzhez
    2010年1月12日19:19 | #12

    @Bral
    脚本的字符编码方面有点问题,有一些不可见的字符,导致执行的时候失败了。可以重新写一个脚本试试

  13. Bral
    2010年1月12日21:21 | #13

    那应该用什么编码?utf8还是ascii?我这个是直接复制你的这个的,当时保存的时候好像是提示某些字符会丢失

  14. Bral
    2010年1月12日22:16 | #14

    感谢博主的指导。找了个朋友在Ubuntu下重新保存了一次,这下可以正常执行了。这个办法太好用了!

  15. wuzhez
    2010年1月12日22:36 | #15

    @Bral
    过奖了,互相学习 :smile:

  16. 2010年2月25日13:08 | #16

    godaddy的免费空间我也花了好多时间弄过,其实感觉支持最好的是emlog,我当初就用这个建过,稍微改下代码,就能几乎完全正常运行,唯一的缺陷就是无法输出RSS,所以没办法,换空间……

  17. 2010年2月25日13:08 | #17

    什么时候我也来试试这个方法,希望好用……

  18. wuzhez
    2010年2月25日13:56 | #18

    @天成
    已经不用免费空间很久了,不过看前面有人评论说这个方法还是好用的

  19. 2010年3月16日22:30 | #19

    文章相当详细哦.

  20. 2010年3月20日18:49 | #20

    无意间又进来了。
    博主好!
    FTP下载不了GD中的文件是怎么回事?修改权限777后也无法下载。

  21. wuzhez
    2010年3月20日19:33 | #21

    @shaoxijie
    这个倒是没碰到过,而且下载的话并不需要777的权限的,不知道是不是ftp做限制了。可以换种方法,把你要下载的文件放到网站的某个能访问的目录下面,在浏览器里访问下载就可以了

  22. addio
    2010年4月9日22:48 | #22

    脚本里面这行“FEEDPATH=/var/www/home/happysa/domains/happysa.org/public_html/feed #下载后的feed文件存放地址,路径根据具体情况修改”
    这个地址我不知道怎么修改?博主怎么看godaddy.com免费空间文件地址?

  23. addio
    2010年4月9日23:14 | #23

    如果在wordpress/wp-includes/ 目录修改
    feed.php
    feed-atom.php
    feed-atom-comments.php
    feed-rdf.php
    feed-rss.php
    feed-rss2.php
    feed-rss2-comments.php
    使得rss feed中剔除掉错误行,是不是也可以呢?

  24. 2010年4月9日23:32 | #24

    addio :
    脚本里面这行“FEEDPATH=/var/www/home/happysa/domains/happysa.org/public_html/feed #下载后的feed文件存放地址,路径根据具体情况修改”
    这个地址我不知道怎么修改?博主怎么看godaddy.com免费空间文件地址?
    支持(0)反对(0)

    这个我文章最下面有介绍的,用system执行pwd命令就可以了

  25. wuzhez
    2010年4月9日23:35 | #25

    @addio
    这个不知道有没有用,你可以试一下

  26. 2010年4月10日00:26 | #26

    本来想试试,现在看还是算了

  1. 2010年4月13日10:43 | #1
  2. 2010年4月14日19:25 | #2
  3. 2010年5月21日23:12 | #3
注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。