Как я могу создать новую страницу для слияния с Python
Я пытаюсь создать новую страницу в месте слияния с помощью Python xmlrpclib
, Я уже знаю, как обновить содержимое существующей страницы, но как я могу создать совершенно новую страницу?
Я использовал следующий скрипт для обновления контента:
import xmlrpclib
CONFLUENCE_URL='https://wiki.*ownURL*/rpc/xmlrpc'
def update_confluence(user, pwd, pageid, newcontent):
client = xmlrpclib.Server(CONFLUENCE_URL,verbose=0)
authToken=client.confluence2.login(user,pwd)
page = client.confluence2.getPage(authToken, pageid)
page['content'] = newcontent
cient.confluence2.storePage(authToken, page)
client.confluence2.logout(authToken)
и это хорошо работает при обновлении контента. Но проблема в том, что как-то мне нужно решить pageID
при создании новой страницы, и я понятия не имею, как это сделать.
Есть ли другие способы создания новой страницы?
2 ответа
Вы можете создавать страницы, используя Confluence REST API: https://docs.atlassian.com/atlassian-confluence/REST/latest-server/
Вот пример, который работает в Python3. Вам нужно знать идентификатор родительской страницы.
import requests
import json
import base64
# Set the confluence User and Password for authentication
user = 'USER'
password = 'PASSWORD'
# Set the title and content of the page to create
page_title = 'My New Page'
page_html = '<p>This page was created with Python!</p>'
# You need to know the parent page id and space key.
# You can use the /content API to search for these values.
# Parent Page example http://example.com/display/ABC/Cheese
# Search example: http://example.com/rest/api/content?title=Cheese
parent_page_id = 123456789
space_key = 'ABC'
# Request URL - API for creating a new page as a child of another page
url = 'http://example.com/rest/api/content/'
# Create the basic auth for use in the authentication header
auth = base64.b64encode(b'{}:{}'.format(user, password))
# Request Headers
headers = {
'Authorization': 'Basic {}'.format(auth),
'Content-Type': 'application/json',
}
# Request body
data = {
'type': 'page',
'title': page_title,
'ancestors': [{'id':parent_page_id}],
'space': {'key':space_key},
'body': {
'storage':{
'value': page_html,
'representation':'storage',
}
}
}
# We're ready to call the api
try:
r = requests.post(url=url, data=json.dumps(data), headers=headers)
# Consider any status other than 2xx an error
if not r.status_code // 100 == 2:
print("Error: Unexpected response {}".format(r))
else:
print('Page Created!')
except requests.exceptions.RequestException as e:
# A serious problem happened, like an SSLError or InvalidURL
print("Error: {}".format(e))
Ответ "J. Antunes" верен, но мне потребовалось много времени, чтобы найти API, идентификаторы страниц и т. Д. Этот ответ даст вам пошаговое руководство о том, как этого добиться с помощью токенов API.
Шаг 1. Создайте токен API в Confluence.
На странице слияния перейдите в Настройки и нажмите пароль. Нажмите "Создание токенов API и управление ими" и получите токен. {ТОКЕН}
Шаг 2. Найдите родительскую страницу, на которой вы хотите создать дочернюю страницу.
Перейдите, чтобы получить идентификатор родительской страницы, и найдите {ID родительской страницы}
Шаг 3. Получите пробел
При слиянии перейдите в Настройки пространства и найдите упомянутый Пробел. {ПРОБЕЛ КЛЮЧ}
Шаг 4. Теперь приступим к работе с кодом.
import requests
import json
from requests.auth import HTTPBasicAuth
# set auth token and get the basic auth code
auth_token = "{TOKEN}"
basic_auth = HTTPBasicAuth('{email you use to log in}', auth_token)
# Set the title and content of the page to create
page_title = 'My New Page'
page_html = '<p>This page was created with Python!</p>'
parent_page_id = {Parent Page ID}
space_key = '{SPACE KEY}'
# get the confluence home page url for your organization {confluence_home_page}
url = '{confluence_home_page}/rest/api/content/'
# Request Headers
headers = {
'Content-Type': 'application/json;charset=iso-8859-1',
}
# Request body
data = {
'type': 'page',
'title': page_title,
'ancestors': [{'id':parent_page_id}],
'space': {'key':space_key},
'body': {
'storage':{
'value': page_html,
'representation':'storage',
}
}
}
# We're ready to call the api
try:
r = requests.post(url=url, data=json.dumps(data), headers=headers, auth=basic_auth)
# Consider any status other than 2xx an error
if not r.status_code // 100 == 2:
print("Error: Unexpected response {}".format(r))
else:
print('Page Created!')
except requests.exceptions.RequestException as e:
# A serious problem happened, like an SSLError or InvalidURL
print("Error: {}".format(e))
Я не знаю Python, но могу сделать это с помощью вызова REST:
echo '{"type":"page","ancestors":[{"type":"page","id":'$CONFLUENCE_PARENT_PAGE'}],"title":"'$PAGE_NAME'","space":{"key":"'$CONFLUENCE_SPACE'"},"body":{"storage":{"value":"'$CONTENT'","representation":"storage"}}}' > body.json
curl --globoff --insecure --silent -u ${CONFLUENCE_USER}:${CONFLUENCE_PASSWORD} -X POST -H 'Content-Type: application/json' --data @body.json $CONFLUENCE_REST_API_URL
URL-адрес оставшегося места слияния выглядит примерно так: https://confluence.yourdomain.com/rest/api/content/
По сути, ответ на ваш вопрос заключается в том, что вам нужно отправить родительскую страницу в качестве предка при создании новой страницы.