我看到了使用Mylyn WikiText將wiki頁面轉換爲html from this question的建議,但我不確定它是否僅通過單獨閱讀網站的首頁尋找它。我會進一步研究。雖然我更喜歡它是一個Trac插件,所以我可以從wiki選項中啓動轉換,但所有插件只在Trac-Hacks導出單個頁面,而我想一次轉儲所有格式化的頁面。有沒有辦法將Trac Wiki頁面轉換爲HTML?
那麼現在有一個Trac插件或獨立應用程序能滿足我的要求嗎?如果不是,你會指出我開始考慮自己實現這個功能嗎?
我看到了使用Mylyn WikiText將wiki頁面轉換爲html from this question的建議,但我不確定它是否僅通過單獨閱讀網站的首頁尋找它。我會進一步研究。雖然我更喜歡它是一個Trac插件,所以我可以從wiki選項中啓動轉換,但所有插件只在Trac-Hacks導出單個頁面,而我想一次轉儲所有格式化的頁面。有沒有辦法將Trac Wiki頁面轉換爲HTML?
那麼現在有一個Trac插件或獨立應用程序能滿足我的要求嗎?如果不是,你會指出我開始考慮自己實現這個功能嗎?
你可能會在trac-hacks的this ticket評論中找到一些有用的信息。一位用戶報告使用wget
實用程序創建wiki的鏡像副本,就像它是一個普通網站一樣。另一個用戶報告使用XmlRpc plugin來提取任何給定的wiki頁面的HTML版本,但是這種方法可能需要您創建一個腳本來與該插件進行交互。不幸的是,海報沒有提供任何示例代碼,但XmlRpc插件頁面包含了大量的文檔和示例以幫助您入門。
如果你有機會獲得主辦Trac的服務器上的命令行,你可以使用trac-admin
命令,如:
trac-admin /path/to/trac wiki export <wiki page name>
檢索指定的wiki頁面的純文本版本。然後您必須將wiki語法解析爲HTML,但有些工具可用於執行此操作。
出於我們的目的,我們希望單獨導出每個維基頁面,而不需要頁眉/頁腳和其他實例特定的內容。爲此,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支持也可用,但可以忽略。
對於wget而言,這僅僅適合我目前的需求。我會回到這個答案,並嘗試其他建議,如果我需要任何更復雜的想法。謝謝。 – spade78 2010-12-14 22:06:27