有没有办法将Trac Wiki页面转换为HTML?

时间:2010-12-05 02:39:08

标签: html wiki trac

我看到使用Mylyn WikiText将wiki页面转换为html from this question的建议,除了我不确定它是否只是通过阅读网站的首页来寻找它。我会进一步研究它。虽然我更喜欢它是一个Trac插件,所以我可以从wiki选项中启动转换,但Trac-Hacks的所有插件只导出单页,而我想一次性转储所有格式化的页面。

那么现有的Trac插件或独立应用程序是否符合我的要求?如果没有,你会指着我开始考虑自己实现这个功能吗?

2 个答案:

答案 0 :(得分:5)

您可以在this tickettrac-hacks评论中找到一些有用的信息。一个用户报告使用wget实用程序创建wiki的镜像副本,就像它是一个普通的网站一样。另一个用户报告使用XmlRpc plugin来提取任何给定Wiki页面的HTML版本,但是这种方法可能需要您创建一个脚本来与插件进行交互。不幸的是,海报并未提供任何示例代码,但XmlRpc插件页面包含大量文档和示例以帮助您入门。

如果您可以访问托管Trac的服务器上的命令行,则可以使用trac-admin命令,如:

trac-admin /path/to/trac wiki export <wiki page name>

检索指定Wiki页面的纯文本版本。然后,您必须将wiki语法解析为HTML,但有一些工具可用于执行此操作。

答案 1 :(得分:1)

出于我们的目的,我们希望单独导出每个Wiki页面,而不需要页眉/页脚和其他特定于实例的内容。为此,XML-RPC接口非常适合。这是我创建的Python 3.6+脚本,用于将整个wiki导出到当前目录中的HTML文件中。请注意,此技术不会重写任何超链接,因此它们将完全解析为该站点。

import os
import xmlrpc.client
import getpass
import urllib.parse


def add_auth(url):
    host = urllib.parse.urlparse(url).netloc
    realm = os.environ.get('TRAC_REALM', host)
    username = getpass.getuser()
    try:
        import keyring
        password = keyring.get_password(realm, username)
    except Exception:
        password = getpass.getpass(f"password for {username}@{realm}: ")

    if password:
        url = url.replace('://', f'://{username}:{password}@')

    return url


def main():
    trac_url = add_auth(os.environ['TRAC_URL'])
    rpc_url = urllib.parse.urljoin(trac_url, 'login/xmlrpc')
    trac = xmlrpc.client.ServerProxy(rpc_url)

    for page in trac.wiki.getAllPages():
        filename = f'{page}.html'.lstrip('/')
        dir = os.path.dirname(filename)
        dir and os.makedirs(dir, exist_ok=True)
        with open(filename, 'w') as f:
            doc = trac.wiki.getPageHTML(page)
            f.write(doc)


__name__ == '__main__' and main()

此脚本仅需要Python 3.6,因此请下载并保存到export-wiki.py文件,然后设置TRAC_URL环境变量并调用脚本。例如在Unix上:

$ TRAC_URL=http://mytrac.mydomain.com python3.6 export-wiki.py

它会提示输入密码。如果不需要密码,只需按Enter键即可绕过。如果需要不同的用户名,还要设置USER环境变量。也可以获得密钥环支持,但可以忽略不计。