我有一个 Confluence 页面,里面有一个日历(请检查下面的照片)。 日历 我正在尝试从此日历中提取信息,例如每天有多少个事件。仅此而已。
我使用了来自 Stack Overflow 的代码,该代码使用 API 读取 Confluence 页面。但 JSON 响应不包含有关页面内日历的任何数据。
`import requests
import json
from requests.auth import HTTPDigestAuth
confluence_host = "https://confluence.tools.mycompany.com"
url = confluence_host + '/rest/api/content/'
page_id = "36013799"
page = requests.get(url=url + page_id,
params={'expand': 'body.storage'},
auth=('my_user', 'my_password') ).json()`
即使我编写 HTML = page['body']['storage']['value'] 并检查其输出,它也只给出这个:
name="日历" ac:schema-version="1" ac:macro-id="99a26d73-abaa-45a1-92cc-0edafec567f5"><ac:parameter ac:name="id">72da4ae5 -4888-46dd-9078-0299b51ab815,743a55b4-7b3b-4e00-b102-90d95916de8d</ac:parameter></ac:structed-macro>
有什么方法可以获取日历信息吗?
不幸的是,你无法使用 Confluence REST API 直接从 Team Calendars 宏中提取日历事件数据。你提供的 API 响应仅提供宏本身的基本信息(例如宏 ID、宏名称),而不提供其生成的内容。
可能的解决方法:
-
使用 Team Calendars API(如果可用): 检查你的 Confluence 版本是否有可公开日历事件数据的单独 Team Calendars REST API。这将是检索所需信息的更可靠方法。但是,Team Calendars 文档没有提供此类 API 的信息。
-
从 Team Calendars 导出日历: Team Calendars 通常允许你将日历数据导出为 iCalendar (.ics) 文件。你可以定期导出此文件并从中提取信息。这是一个解决方法,但它允许你访问数据。
-
屏幕抓取(不推荐): 作为最后的手段,你可以使用屏幕抓取技术从呈现的 Confluence 页面中提取日历数据。但是,这种方法很脆弱,容易受到 Confluence UI 或 Team Calendars 宏的任何更改的影响。
使用导出选项的示例(如果适用):
- 从 Team Calendars 视图导出日历(通常有一个导出选项)。
- 使用 Python 库(如 icalendar)解析生成的 .ics 文件。
from icalendar import Calendar
with open('calendar_export.ics', 'r') as f:
calendar = Calendar.from_ical(f.read())
for component in calendar.walk():
if component.name == "VEVENT":
print(f"Summary: {component.get('summary')}")
print(f"Start Date: {component.get('dtstart').dt}")
print(f"End Date: {component.get('dtend').dt}")
请记住,这只是一个示例,你需要调整代码以匹配导出的 .ics 文件的结构。
在继续之前,请先探索 Team Calendars 文档或联系你的 Confluence 管理员,看看是否有可用的 API。
标签:python,confluence From: 44412554