RssDemon 的 OPML 导入导出

黄杰, 2015-10-29
root[a]linuxsand.info

2016-08-29 更新:RssDemon 做了一次大更新(4.x.x),虽然变好看了,但是我看中的功能基本废了。已弃用……

换了新手机,正在手动恢复部分程序、数据。

原本在用 Feed+ 看订阅,现在打算用 RssDemon,这两个软件几乎是一样的,经过判断后者才是「真·美猴王」。但是本文针对的是 Feed+。

问题是这样的,软件设置中可以导出订阅,但我实在找不到导出文件的路径。没办法,进到 /data/data/com.appyet.feedplus/databases,用数据库查看器打开 data.db 查看表结构,其中有个 Feed 表,进入就看到了我想要的内容。

把 data.db 拷贝出来,再根据 http://www.sqlite.org/cli.html 页面「Writing results to a file」的样例,把我要的信息提取出来:

sqlite> .open data.db
sqlite> .mode tab
sqlite> .output result.txt
sqlite> select FeedType, Link, Title from Feed;
sqlite> .exit

得到中间结果 result.txt:

...
ATOM    http://v2ex.com/feed/tab/qna.xml    V2EX - 问与答
RSS http://www.dgtle.com/rss/dgtle.xml  数字尾巴
...

再根据 OPML 的格式要求(我偷懒用 Foxmail 导出了一个),拼接成最终的 OPML 文件出来。「一次性」Python 脚本:

# coding: utf-8
outline = '<outline htmlUrl="%s" xmlUrl="%s" version="%s" type="%s" title="%s" text="%s"/>'

lines = []
for line in open('result.txt'):
    parts = line.rstrip().split('\t')
    assert len(parts) == 3
    _type, _url, _title = tuple(parts)
    lines.append(outline % (_url, _url, _type.upper(), _type, _title, _title))

opml = '''<?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0">
    <head>
        <title/>
    </head>
    <body>
        <outline title="Others" text="Others">
            %s
        </outline>
    </body>
</opml>'''

with open('opml.txt', 'w') as f:
    f.write(opml % '\n'.join(lines))

将拼接好的 opml.txt 复制到手机上,然后打开 RssDemon,从 OPML 添加订阅,手动输入 opml.txt 的路径(……),完成。


在软件的设置上,建议仅在 WiFi 环境下载图片。