2015-10-16 3 views
2

J'essaye de créer une nouvelle page dans la confluence en utilisant xmlrpclib de Python. Je sais déjà comment mettre à jour le contenu d'une page existante, mais comment puis-je créer une page totalement nouvelle?Comment puis-je créer une nouvelle page à confluence avec Python

Je l'ai utilisé script suivant pour mettre à jour le contenu:

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) 

et qui fonctionne bien lorsque le contenu de mise à jour. Mais le problème est que d'une manière ou d'une autre j'ai besoin de résoudre pageID lors de la création d'une nouvelle page et je n'ai aucune idée de la façon de le faire.

Existe-t-il d'autres façons de créer une nouvelle page?

Répondre

0

Je ne sais pas Python, mais peut le faire avec un appel 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 

Le reste de confluence url api ressemble à ceci: https://confluence.yourdomain.com/rest/api/content/

Fondamentalement, la réponse à votre question est que vous avez besoin pour envoyer la page parent comme un ancêtre lors de la création d'une toute nouvelle page.

0

Vous pouvez créer des pages en utilisant l'API Confluence REST: https://docs.atlassian.com/atlassian-confluence/REST/latest-server/

Voici un exemple qui fonctionne dans python3. Vous devez connaître l'identifiant de la page parent.

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))