...
Just my blog

Blog about everything, mostly about tech stuff I made. Here is the list of stuff I'm using at my blog. Feel free to ask me about implementations.

Soft I recommend
Py lib I recommend

I'm using these libraries so you can ask me about them.

Atlassian Confluence REST API

Как работать с REST API Confluence.

Eng Atlassian_Python О чем этот топик?

  • Структура API в системе Confluence.
  • Объекты, файлы, статьи, родство и проч.
  • Формирование запроса(адреса) в API Confluence
  • Открытие сессии и удержание её в памяти - !
  • Формирование заголовков при помощи модуля requests и - json !
  • Отправка файла, содержания файла, вики-разметки на сервер Confluence - !
  • Интерпретируем ответы от сервера

Что такое Atlassian Confluence вы можете почитать здесь:

  • https://www.atlassian.com/software/confluence
  • https://ru.wikipedia.org/wiki/Confluence

Кому нужен этот топик?

Тем мученикам, которые хотят автоматизировать процесс написания/отправки документации в разработке. Тем мученикам, которые как и я, по очевидным примерам не могут разобраться в модуле requests касаемо работе с заголовками. Мне самому, чтобы не забыть свой "подвиг" и все его наработки, так как память имеет свойство "стираться".   В тот момент, когда я решил заняться автоматизацией процесса документации в своей компании я не знал, насколько кастрирована наша Confluence и насколько убогий, окажется в принципе сам её API, как долго придется возиться с тем, чтобы составить удобоваримый заголовок, который томкат сможет скушать и не поперхнуться, а также насколько убогая разметка на Confluence, я буду писать несколько топиков, каждый по отдельному пункту или нескольким из указанных выше, также попробую продублировать эту информацию на английском, вдруг сюда захочет зайти наш иностранный коллега. В общем, кому вдруг пригодится - следите за темой и связанными постами, я буду постепенно выкладывать материал, отсебятину и добавлять ссылки в эту статью. Для нетерпеливых или тех, кто быстро схватывает и кому достаточно просто посмотреть код или часть его - выкладываю черновой, но рабочий вариант всего этого процесса, сразу предупреждаю, это не пример для подражания, это черновой вариант:

import json
import requests

# Config HTTP session
# request 0
confluence_auth_url = 'https://docs.companyname.com/docs/dashboard.action?os_username=SERVICE_USERNAME&os_password=SERVICE_PASSWORD'
session = requests.session()
session.post(confluence_auth_url)

# Configipedia stats
space_page = '625685389'        # DocBot SPACE "title":"DocBot space", "space":{"id":624689178,"key":"~SERVICE_USERNAME","name":"Configipedia Automation","type":"global","_links":{"self":"https://docs.companyname.com/docs/rest/api/space/~SERVICE_USERNAME"}
space_root_page = '625685397'   # DocBot HOMEPADE "title":"Space root page (Parent 1)",   "space":{"id":624689178,"key":"~SERVICE_USERNAME","name":"Configipedia Automation","type":"global","_links":{"self":"https://docs.companyname.com/docs/rest/api/space/~SERVICE_USERNAME"}
space_id = '624689178'
space_key = '~SERVICE_USERNAME' # {"id":624689178,"key":"~SERVICE_USERNAME","name":"Configipedia Automation"
space_name = 'DocBot+space'
child_page_1 = '625685424'
child_page_2 = '625685428'
confPedia_root = 'https://docs.companyname.com/docs'
confPediaUser = '~SERVICE_USERNAME'

# api keys
# Usage example: "confPedia_root+conf_content+space_id" - request to get space homepage content
api = '/rest/api/'
conf_space = '/rest/api/space/'
conf_content = '/rest/api/content/'
conf_children = '/child/page/'

# Usual URLS
space_url = confPedia_root+conf_content+space_page
space_child_items = confPedia_root+conf_content+space_root_page+conf_children
space_post = confPedia_root+conf_content

# GET HOMESPACE
# request 1
r_homepage = session.get(space_url)
r_homepage = r_homepage.json()
# Check current location:
r_homepage_loc = r_homepage['_links']['webui']
print("You are here now: "+confPedia_root+r_homepage_loc)

# GET CHILDREN ITEMS
# request 2
r_home_children = session.get(space_child_items)
r_home_children = r_home_children.json()
# Check current location
r_home_children_loc = r_home_children['_links']['self']
print("You are looking through this branch: "+r_home_children_loc)

# Getting results from "request 2"
r_home_children_results = r_home_children['results']
product_pages_list = []
for item in r_home_children_results:
    id = item['id']
    title = item['title']
    web_link = item['_links']['webui']
    post_link = item['_links']['self']
    # product_page = {'id':id, 'title':title, 'web_link':web_link, 'post_link':post_link}
    product_page = {'id':id, 'title':title, 'web':confPedia_root+web_link, 'post':post_link}
    product_pages_list.append(product_page)
    print(product_page)

files = open('THIS_IS_FILE_WHERE_WIKI_MARKUP.txt', 'r')
file = files.read()
file_string = str(file)
file_string_repl = file_string.replace("\\r\\n", "<br/>")

contentType = 'application/json'
userAgent = 'DocBot/0.0.1'
acceptType = 'application/json'
header = {"Content-type":contentType}
title = 'DOC NAME TITLE'
post_object = {"type":"page","title":title,"space":{"key":space_key},"body":{"storage":{"value":file_string_repl,"representation":"storage"}}}
data=json.dumps(post_object)
# print(file_string)
# print(data)

# POST SOMETHING ON PAGE
# request 3
print("POST something to: "+space_post)
r_post_homepage = session.post(space_post, headers=header, data=data)
r_post_homepage_answer = r_post_homepage.text
print(r_post_homepage_answer)