Python redmine: 维基页面文本

1 投票
2 回答
1157 浏览
提问于 2025-04-17 20:44

我在使用 python-redmine 这个库,想要获取维基页面的文本,但遇到了一个错误——说某个属性不存在(但文本是存在的)。这是我的代码:

from redmine import Redmine

redmine = Redmine('http://redmine.example.com', username='user', password='1234')
projects = redmine.project.all()

for project in projects:
    print('Project: '+project.name)
    try:
        for page in project.wiki_pages:
            try:
                print('Title: '+page.title)
            except:
                print('Title: none')

            try:
                print('Content: '+page.text)
            except:
                print('Content: none')
            print('\n===========================\n')
    except:
        print('None')

我该怎么才能从维基页面获取文本呢?请帮帮我!

补充说明:我使用的是Python 3,python-redmine是通过pip安装的。

2 个回答

0

在Rails这个框架里,属性会被包装成方法,所以很难分清你使用的是属性还是单纯的方法。

在这里你可以看到,wiki_page有一个内容,而在这里你可以看到text这个方法的定义(属性text是属于内容的!)。

我没有使用过python-redmine,但我猜想你需要调用page.content.text而不是page.text。或者用其他方式获取page.content

2

你不能通过这种方式获取维基页面的文本,因为 project.wiki_pages 只会返回一个项目中所有维基页面的列表,还有一些其他的细节信息。如果你想获取某个维基页面的文本、作者和其他信息,就必须为每个维基页面单独发起请求:

from redmine import Redmine

redmine = Redmine('http://redmine.example.com', username='user', password='1234')
projects = redmine.project.all()

for project in projects:
    print('Project: ' + project.name)

    for wiki_page in project.wiki_pages:
        wiki_page_details = redmine.wiki_page.get(wiki_page.title, project_id=project.id)

        print('Title: ' + wiki_page_details.title)
        print('Content: ' + wiki_page_details.text)
        print('\n===========================\n')

这样做效率不高,但 Python Redmine 只是 Redmine REST API 的一个接口,而 Redmine 并没有提供一种方法可以一次性获取所有项目维基页面的所有信息,所以对每个维基页面单独发起请求是唯一的解决办法。

撰写回答