正如我们一开始就说过的,ViKi
的主要作用是记录笔记,而笔记,免不了存在复杂的网状交叉引用,以及在发布出去之后的反复修改。因此,RSS
对于 ViKi 来说,用途非常有限。我们这里的 RSS
导出脚本所做的事情仅仅是扫描所有的 .viki
文件,将最近的 20 次修改编译所得到的 HTML
文件再通过
html2text
转回纯文本,插入到 RSS 文件中。
html2text 的具体实现在处理 &
号和双引号
"
时有一些 bug,没能正确对这两个符号的
HTML entity 做 decode,因此我们在对 html2text
的输出进行处理重新转回 html
的时候,不要对这两个符号再次做
encode。具体代码如下,使用的时候请将代码中提到的路径名称替换为你自己系统里的真实路径再使用:
cat
> html/rss.xml
<<EOF
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>滇狐的个人主页</title>
<description>滇狐就是既疯癫又糊涂!</description>
<link>http://edyfox.codecarver.org/html/rss.xml</link>
<pubDate>`date -Ru`</pubDate>
<lastBuildDate>`date -Ru`</lastBuildDate>
<generator>Home-brewed upload.sh 1.0</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
EOF
for item
in $
(
for file
in ~/Documents/Viki/*.viki ~/Documents/Viki/*.md; do
echo `stat -c %Z $file` $file
done | sort -r | head -20 | awk '{ print $2 }'
);
do
echo ' <item>' >> html/rss.xml
echo " <title>`grep ^`</title>" >> html/rss.xml
echo ' <author>滇狐</author>' >> html/rss.xml
echo " <link>http://edyfox.codecarver.org/html/`basename $item .viki`.html</link>" >> html/rss.xml
echo " <pubDate>$(date -Ru -d @`stat -c %Z $item`)</pubDate>" >> html/rss.xml
echo " <guid isPermaLink=\"false\">`basename $item .viki`</guid>" >> html/rss.xml
echo " <description>" >> html/rss.xml
html_base=
`basename $item .viki`
html_base=
`basename $html_base .md`
awk
'
/TEMPLATE_BODY''_BEGIN_TAG/ {
begin = "yes"
next
}
/TEMPLATE_BODY''_END_TAG/ {
begin = "no"
next
}
begin == "yes" {
print
}
' html/
${html_base}.html
| \
html2text
-width 2147483647 -utf8
| \
sed -e 's/"/"/g' \
-e 's/</\</g' \
-e 's/>/\>/g' \
-e 's/&/\&/g' \
-e 's/“/“/g' \
-e 's/”/”/g' \
-e 's/‘/‘/g' \
-e 's/’/’/g' \
-e 's/–/–/g' \
-e 's/^/ <p>/' \
-e 's/$/<\/p>/' \
>> html/rss.xml
echo " </description>" >> html/rss.xml
echo ' </item>' >> html/rss.xml
done
cat
>> html/rss.xml
<<EOF
</channel>
</rss>
EOF