2010-12-05 92 views
2

我看到了使用Mylyn WikiText將wiki頁面轉換爲html from this question的建議,但我不確定它是否僅通過單獨閱讀網站的首頁尋找它。我會進一步研究。雖然我更喜歡它是一個Trac插件,所以我可以從wiki選項中啓動轉換,但所有插件只在Trac-Hacks導出單個頁面,而我想一次轉儲所有格式化的頁面。有沒有辦法將Trac Wiki頁面轉換爲HTML?

那麼現在有一個Trac插件或獨立應用程序能滿足我的要求嗎?如果不是,你會指出我開始考慮自己實現這個功能嗎?

回答

5

你可能會在trac-hacksthis ticket評論中找到一些有用的信息。一位用戶報告使用wget實用程序創建wiki的鏡像副本,就像它是一個普通網站一樣。另一個用戶報告使用XmlRpc plugin來提取任何給定的wiki頁面的HTML版本,但是這種方法可能需要您創建一個腳本來與該插件進行交互。不幸的是,海報沒有提供任何示例代碼,但XmlRpc插件頁面包含了大量的文檔和示例以幫助您入門。

如果你有機會獲得主辦Trac的服務器上的命令行,你可以使用trac-admin命令,如:

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

檢索指定的wiki頁面的純文本版本。然後您必須將wiki語法解析爲HTML,但有些工具可用於執行此操作。

+0

對於wget而言,這僅僅適合我目前的需求。我會回到這個答案,並嘗試其他建議,如果我需要任何更復雜的想法。謝謝。 – spade78 2010-12-14 22:06:27

0

出於我們的目的,我們希望單獨導出每個維基頁面,而不需要頁眉/頁腳和其他實例特定的內容。爲此,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 

它會提示輸入密碼。如果不需要密碼,只需按回車即可繞過。如果需要不同的用戶名,還可以設置USER環境變量。 Keyring支持也可用,但可以忽略。

相關問題