Для наших целей мы хотели бы экспортировать каждую из страниц вики отдельно без заголовка/нижнего колонтитула и другого содержимого, специфичного для экземпляра. С этой целью интерфейс XML-RPC был подходящим. Вот сценарий Python 3.6+, который я создал для экспорта всей вики в 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. Поддержка клавиш также доступна, но ее можно игнорировать.
+1 для wget, которого достаточно для моих нужд на данный момент. Я вернусь к этому ответу и попробую другие предложения, если мне нужны идеи для чего-то более сложного. Благодарю. – spade78 2010-12-14 22:06:27