同步LiveSpaces的评论到WordPress

以前做了个同步LiveSpaces的评论到WordPress的插件(wp-livesync-comments),没想到MS把评论的Layout给改了,结果抓不到正确的数据,导致WordPress里出现很多没有内容的匿名评论。今天稍微花点时间,修改了一下插件,让它可以正常工作了。

以前的评论格式:
<item>
<title>Thomas Tsui</title>
<link>http://xutao1976.spaces.live.com/Blog/cns!9A12B4DCE20412E9!437.entry</link>
<description>原来我的游戏机是这样买的。谢谢老爸老妈还记得这么清楚。&lt;img src=&quot;http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-7344609181510135063&amp;page=RSS%3a+Thomas+Tsui&amp;referrer=&quot; width=&quot;1px&quot; height=&quot;1px&quot; border=&quot;0&quot; alt=&quot;&quot;&gt;&lt;img style=&quot;position:absolute&quot; alt=&quot;&quot; width=&quot;0px&quot; height=&quot;0px&quot; src=&quot;http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=xutao1976.spaces.live.com&amp;amp;GT1=xutao1976&quot;&gt;</description>
<guid isPermaLink=”false”>cns!9A12B4DCE20412E9!440</guid>
<pubDate>Tue, 20 Jan 2009 23:22:10 GMT</pubDate>
<msn:type>blogcomments</msn:type>
<live:type>blogcomments</live:type>
<live:typelabel>Blog Comments</live:typelabel>
<cf:itemRSS>http://xutao1976.spaces.live.com/blog/cns!9A12B4DCE20412E9!437/comments/feed.rss</cf:itemRSS>
<live:authorName>Thomas Tsui</live:authorName>
<live:authorCid>-7344609181510135063</live:authorCid>
<live:commentBody>原来我的游戏机是这样买的。谢谢老爸老妈还记得这么清楚。</live:commentBody>
</item>

现在的评论格式:
<item>
<guid isPermaLink=”false”>9A12B4DCE20412E9!440</guid>
<title>Thomas Tsui</title>
<description>原来我的游戏机是这样买的。谢谢老爸老妈还记得这么清楚。</description>
<pubDate>Tue, 20 Jan 2009 23:22:10 Z</pubDate>
<link>http://xutao1976.spaces.live.com/Blog/cns!9A12B4DCE20412E9!437.entry</link>
<live:type>blogcomment</live:type>
<live:typelabel>Blog Comment</live:typelabel>
<live:id>-7344609181510135063</live:id>
</item>

修改代码很简单。修复数据稍微麻烦一点。
1.在comments表里删除空评论。
DELETE FROM `wp_comments` WHERE `comment_author` = ‘ ‘ and `comment_content` = ‘ ‘;

2.在options表里删除wp_msnsync_comment_id
DELETE FROM `wp_options` WHERE `option_name` = ‘wp_msnsync_comment_id’;
这里是将所有以前同步过来的评论的ID全部删掉,但是实际的评论没有删除,所以下次同步的时候,会导致以前的评论重复。最好的方法是修改option_value里面的值,只将空评论的ID删除。不过我对MySQL不熟,不知道如何更新Key-Value Pair的项目,暂时也没时间去研究这个,以后再说了。

3.重新同步所有评论。

Comments

Django 的 urls 匹配

昨天把Django的admin配好了,同时也写了一个Hello Onlinelist!的app放上去,一切看起来很美。

然后就想把onlinelist.jbobos.org加到Google的WebMaster里,结果发现Google说这个网站没有404,无法通过Verify。原来我写的urls.py,匹配了所有的URL到View的index函数,而这个index永远返回“Hello Onlinelist!”所以永远不会有找不到页面的情况。

修改前的urls.py

urlpatterns = patterns('',
  (r'^admin/(.*)', admin.site.root),
  (r'^(.*)$', include('djsite_onlinelist.onlinelist.urls')),
    #这里拦截了所有的URL,往后传的字符串是空。
)

修改后的urls.py

urlpatterns = patterns('',
  (r'^admin/(.*)', admin.site.root),
  (r'', include('djsite_onlinelist.onlinelist.urls')),
    #把所有的URL一个字不漏的传给onlinelist的urls。
)

onlinelist的urls.py

urlpatterns = patterns('djsite_onlinelist.onlinelist.views',
  (r'^$', 'index'),
    #空URL调用index,返回Hello Onlinelist!,状态码200
  (r'^notfound', 'notfound'),
    #notfound返回HttpResponseNotFound,状态码404
)

另外在templates下创建了404.html和500.html。上述urls中没有匹配到的URL都会显示404.html(状态码404),系统障害的时候会显示500.html(状态码500)。这样把昨天《继续在Dreamhost上配置Django》的遗留问题也解决了。

《参考资料》
Django官方文档:URL dispatcherWriting Views

Comments

继续在Dreamhost上配置Django

上次在Dreamhost上配置Django,能够看到Django启动的画面后,接着就好几天没玩它了。今天先把Django的admin配起来。

《1.创建media目录》

Django建议所有的静态文件应该交给Apache管理。官方教程(Django on Dreamhost)使用专门管理media的子域名media.mydomain.com,有点太小题大作了。我觉得在mydomain.com下建目录更好。一个media目录用于存放自己的媒体,一个admin_media链接到django的admin的media。如下(顺便把jQuery也装上):

$> export SOFTWAREHOME=$HOME/mysoftware
$> export DOMAINROOT=$HOME/org.jbobos.onlinelist
$> ln -s $SOFTWAREHOME/Django-1.0.2-final/django/contrib/admin/media $DOMAINROOT/admin_media
$> mkdir $DOMAINROOT/media $DOMAINROOT/media/js
$> cd $DOMAINROOT/media/js
$> wget http://jqueryui.com/repository/files/jquery-ui-personalized-1.5.3.zip
$> unzip jquery-ui-personalized-1.5.3.zip

《2.修改.htaccess》

这时候浏览器还看不到media,因为.htaccess将所有的HTTP请求都转给了dispatch.fcgi。

$> vi $DOMAINROOT/.htaccess

修改后的.htaccess文件如下,使media和admin_media开头的请求不要被转发。.htaccess的前四行禁止自己被浏览,「Options -Indexes」禁止目录被浏览。

<Files .htaccess>
order allow,deny
deny from all
</Files>

Options -Indexes

RewriteEngine On
RewriteBase /
RewriteRule ^(media|admin_media)/.*$ - [L]
RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
RewriteRule ^(.*)$ dispatch.fcgi/$1 [L]

现在在浏览器中输入http://onlinelist.jbobos.org/media/js/example.html,可以看到jQuery UI的sample了。mod_rewrite的详细文档请参照Apache Module mod_rewrite – URL Rewriting Engine

《3.修改settings.py》

$> export PROJECTSHOME=$HOME/myprojects
$> export PROJECTNAME=djsite_onlinelist
$> vi $PROJECTSHOME/$PROJECTNAME/settings.py

settings.py文件中被修改的部分如下:

import os
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))

DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = SITE_ROOT+'/onlinelist.db'
MEDIA_URL = 'http://onlinelist.jbobos.org/media/'
ADMIN_MEDIA_PREFIX = 'http://onlinelist.jbobos.org/admin_media/'
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
)

注意, MEDIA_ROOT 是用于保存上传文件的目录,如无必要,保留其为空即可。 Django官方文档中关于 MEDIA_ROOT 和 MEDIA_URL 的说明很不详细,我参考的是 Django and Static Files。关于数据库,看过Fenng写的《SQLite数据库是中小站点CMS的最佳选择》后,觉得就用sqlite3也挺好的。在设置DatabaseName的时候我用了相对路径,这样不用在source里把路径写死。详细请参考Django Settings Tip

《4.初始化admin数据库》

$> python $PROJECTSHOME/$PROJECTNAME/manage.py syncdb

按照提示创建管理员用户。数据库同步完成后,在浏览器中输入http://onlinelist.jbobos.org/admin/就可以看到登录画面了。

《5.其他问题》

在浏览器地址栏输入一个未定义的地址,会引发异常。DEBUG=True的话,会看到Django的404页面; DEBUG=False的话,会看到一个更ugly的Traceback,显示「TemplateDoesNotExist : 500.html」。这个问题稍后再解决。

Comments (2)

在Dreamhost上配置Django

看了很多指南,Guide之类的东西,也偷懒了很长时间。最近想练练手,用Django写点东西玩玩,所以还是记录一下过程,以备参考。好记性不如烂笔头,IT尤其如此。

《前提条件》

  • 1.在 Dreamhost 的控制面板里,将准备使用 Django 的(子)域名配置成 Enable FastCGI 。因为 Dreamhost 不支持 mod_python ,只能通过 Fast CGI 来调用 Django 。
  • 2.用 SSH 连上 Dreamhost 主机,此时应该在自己的用户根目录下。

《设置过程》
※直接贴代码。请将域名、目录名、文件名换成自己的。

  • 0.设置环境变量
$> export PROJECTSHOME=$HOME/myprojects
$> mkdir $PROJECTSHOME
$> export SOFTWAREHOME=$HOME/mysoftware
$> mkdir $SOFTWAREHOME
$> export DOMAINROOT=$HOME/org.jbobos.onlinelist
$> export PROJECTNAME=djsite_onlinelist
  • 1.安装Django
$> cd $SOFTWAREHOME
$> wget http://media.djangoproject.com/releases/1.0.2/Django-1.0.2-final.tar.gz
$> tar xzvf Django-1.0.2-final.tar.gz
$> cd $HOME
$> echo 'export PATH=$PATH:'$SOFTWAREHOME/Django-1.0.2-final/django/bin >> .bash_profile
$> echo 'export PYTHONPATH=$PYTHONPATH:'$SOFTWAREHOME/Django-1.0.2-final:$PROJECTSHOME >> .bash_profile
$> source .bash_profile
  • 2.建立工程
$> cd $PROJECTSHOME
$> django-admin.py startproject $PROJECTNAME
  • 3.配置FastCGI
$> cd $DOMAINROOT
$> rm -f fcgi.py
$> wget http://svn.saddi.com/py-lib/trunk/fcgi.py
$> rm -f dispatch.fcgi
$> touch dispatch.fcgi
$> echo -e \#\!"/usr/bin/python2.4" >> dispatch.fcgi
$> echo "import sys" >> dispatch.fcgi
$> echo "sys.path += ['$SOFTWAREHOME/Django-1.0.2-final']" >> dispatch.fcgi
$> echo "sys.path += ['$PROJECTSHOME']" >> dispatch.fcgi
$> echo "from fcgi import WSGIServer" >> dispatch.fcgi
$> echo "from django.core.handlers.wsgi import WSGIHandler" >> dispatch.fcgi
$> echo "import os" >> dispatch.fcgi
$> echo "os.environ['DJANGO_SETTINGS_MODULE'] = '$PROJECTNAME.settings'" >> dispatch.fcgi
$> echo "WSGIServer(WSGIHandler()).run()" >> dispatch.fcgi
$> chmod 755 $DOMAINROOT/fcgi.py
$> chmod 755 $DOMAINROOT/dispatch.fcgi
  • 4.配置.htaccess
$> cd $DOMAINROOT
$> rm -f .htaccess
$> touch .htaccess
$> echo "RewriteEngine On" >> .htaccess
$> echo "RewriteBase /" >> .htaccess
$> echo "RewriteRule ^(dispatch\.fcgi/.*)$ - [L]" >> .htaccess
$> echo "RewriteRule ^(.*)$ dispatch.fcgi/"\$1" [L]" >> .htaccess
  • 5.注意事项

经过上面0~4的配置,现在在浏览器中输入onlinelist.jbobos.org,应该可以看到Django启动的画面了。另外,dispatch.fcgi可以直接运行。它会将HTML代码直接输出到标准输出。调试的时候可以使用。如果修改了全局的settings,需要用命令【touch dispatch.fcgi】重新载入。

《参考资料》

Comments (3)

我的SNS

画了张自己的SNS网络图,如下:

GTalk Douban GReader Picasa Youtube Facebook LinkedIn LiveProfile
  |      |      |      |      |        |        |         |
  |      |----->|----->|----->|------->|<-------|<--------|
  |                                    |
  |                                    v
  |----------(im robot)----------> Friend Feed
                                      | ^
                                      v |
                                    Twitter
                                      | ^
                         (digest post)| |(twitter tools)
                                      v |
Windows ----(network status)------> My Blog
Live Spaces <-----(sync post)-----(WordPress)

Comments

« Previous entries Next Page » Next Page »