使用 Python 和 API 发布更新 Confluence 页面
Issue Updating Confluence Page with Python and API
我正在通过 python 和 Confluence API 更新一个 Confluence 页面。
我找到了一个将数据写入我的页面的功能,不幸的是它用我的数据创建了一个新页面,而旧页面变成了存档版本。
我一直在搜索参考文献 material,但看不出我获取新页面而不是将数据附加到页面末尾的原因。我能想到的唯一解决方案是复制正文并将新数据附加到它,然后创建新页面......但我认为应该有一种附加方法。
我发现/正在利用的write函数代码如下:
def write_data(auth, html, pageid, title = None):
info = get_page_info(auth, pageid)
print ("after get page info")
ver = int(info['version']['number']) + 1
ancestors = get_page_ancestors(auth, pageid)
anc = ancestors[-1]
del anc['_links']
del anc['_expandable']
del anc['extensions']
if title is not None:
info['title'] = title
data = {
'id' : str(pageid),
'type' : 'page',
'title' : info['title'],
'version' : {'number' : ver},
'ancestors' : [anc],
'body' : {
'storage' :
{
'representation' : 'storage',
'value' : str(html),
}
}
}
data = json.dumps(data)
pprint (data)
url = '{base}/{pageid}'.format(base = BASE_URL, pageid = pageid)
r = requests.put(
url,
data = data,
auth = auth,
headers = { 'Content-Type' : 'application/json' }
)
r.raise_for_status()
我开始认为复制/附加到正文是一种选择,但希望其他人遇到过这个问题。
这不是一个优雅的解决方案,但我使用了复制旧正文并附加选项。
基本上,写了一个简单的函数到 return 现有的主体:
def get_page_content(auth, pageid):
url = '{base}/{pageid}?expand=body.storage'.format(
base = BASE_URL,
pageid = pageid)
r = requests.get(url, auth = auth)
r.raise_for_status()
return (r.json()['body']['storage']['value'])
在此示例中,只需将新字符串附加 (+=) 到现有主体。
def write_data(auth, html, pageid, title = None):
info = get_page_info(auth, pageid)
page_content = get_page_content(auth, pageid)
ver = int(info['version']['number']) + 1
ancestors = get_page_ancestors(auth, pageid)
anc = ancestors[-1]
del anc['_links']
del anc['_expandable']
del anc['extensions']
page_content += "\n\n"
page_content += html
if title is not None:
info['title'] = title
data = {
'id' : str(pageid),
'type' : 'page',
'title' : info['title'],
'version' : {'number' : ver},
'ancestors' : [anc],
'body' : {
'storage' :
{
'representation' : 'storage',
'value' : str(page_content),
}
}
}
data = json.dumps(data)
url = '{base}/{pageid}'.format(base = BASE_URL, pageid = pageid)
r = requests.put(
url,
data = data,
auth = auth,
headers = { 'Content-Type' : 'application/json' }
)
r.raise_for_status()
print "Wrote '%s' version %d" % (info['title'], ver)
print "URL: %s%d" % (VIEW_URL, pageid)
请注意,由于这是一个 post 到汇合体,因此传递的文本是 html。 '\n' 换行不起作用,您需要传递 '
' 等...
如果谁有更优雅的解决方案,欢迎提出建议。
段.
我正在通过 python 和 Confluence API 更新一个 Confluence 页面。
我找到了一个将数据写入我的页面的功能,不幸的是它用我的数据创建了一个新页面,而旧页面变成了存档版本。
我一直在搜索参考文献 material,但看不出我获取新页面而不是将数据附加到页面末尾的原因。我能想到的唯一解决方案是复制正文并将新数据附加到它,然后创建新页面......但我认为应该有一种附加方法。
我发现/正在利用的write函数代码如下:
def write_data(auth, html, pageid, title = None):
info = get_page_info(auth, pageid)
print ("after get page info")
ver = int(info['version']['number']) + 1
ancestors = get_page_ancestors(auth, pageid)
anc = ancestors[-1]
del anc['_links']
del anc['_expandable']
del anc['extensions']
if title is not None:
info['title'] = title
data = {
'id' : str(pageid),
'type' : 'page',
'title' : info['title'],
'version' : {'number' : ver},
'ancestors' : [anc],
'body' : {
'storage' :
{
'representation' : 'storage',
'value' : str(html),
}
}
}
data = json.dumps(data)
pprint (data)
url = '{base}/{pageid}'.format(base = BASE_URL, pageid = pageid)
r = requests.put(
url,
data = data,
auth = auth,
headers = { 'Content-Type' : 'application/json' }
)
r.raise_for_status()
我开始认为复制/附加到正文是一种选择,但希望其他人遇到过这个问题。
这不是一个优雅的解决方案,但我使用了复制旧正文并附加选项。
基本上,写了一个简单的函数到 return 现有的主体:
def get_page_content(auth, pageid):
url = '{base}/{pageid}?expand=body.storage'.format(
base = BASE_URL,
pageid = pageid)
r = requests.get(url, auth = auth)
r.raise_for_status()
return (r.json()['body']['storage']['value'])
在此示例中,只需将新字符串附加 (+=) 到现有主体。
def write_data(auth, html, pageid, title = None):
info = get_page_info(auth, pageid)
page_content = get_page_content(auth, pageid)
ver = int(info['version']['number']) + 1
ancestors = get_page_ancestors(auth, pageid)
anc = ancestors[-1]
del anc['_links']
del anc['_expandable']
del anc['extensions']
page_content += "\n\n"
page_content += html
if title is not None:
info['title'] = title
data = {
'id' : str(pageid),
'type' : 'page',
'title' : info['title'],
'version' : {'number' : ver},
'ancestors' : [anc],
'body' : {
'storage' :
{
'representation' : 'storage',
'value' : str(page_content),
}
}
}
data = json.dumps(data)
url = '{base}/{pageid}'.format(base = BASE_URL, pageid = pageid)
r = requests.put(
url,
data = data,
auth = auth,
headers = { 'Content-Type' : 'application/json' }
)
r.raise_for_status()
print "Wrote '%s' version %d" % (info['title'], ver)
print "URL: %s%d" % (VIEW_URL, pageid)
请注意,由于这是一个 post 到汇合体,因此传递的文本是 html。 '\n' 换行不起作用,您需要传递 '
' 等...
如果谁有更优雅的解决方案,欢迎提出建议。
段.