Как скачать вложение страницы Confluence с Python? - PullRequest
0 голосов
/ 03 февраля 2020

С помощью модуля atlassian- python -api 1.15.1 и python 3.6 как загрузить файл, прикрепленный к странице Confluence?

В разделе действия на странице в документации API упоминается API get_attachments_from_content, с помощью которого я могу успешно получить список всех вложений страницы с их метаданными. В конце этого вопроса приведен пример того, что я могу получить, напечатав один из элементов в ключе results.

Я уже пытался использовать модуль wget для загрузки вложения:

fname = wget.download(base_server_name + attachment['_links']['download'])

Однако загруженный файл - это не файл на странице, вместо этого у меня есть большой файл HTML, который выглядит как легкая страница входа. Кроме того, я не уверен, что использование wget здесь уместно, я бы предпочел решение с самим API atlassian python, поскольку оно само управляет аутентификацией.

ключ «результата»:

{'id': '56427526', 'type': 'attachment', 'status': 'current' , 'title': 'main. c', 'metadata': {'mediaType': 'application / octet-stream', 'tags': {'results': [], 'start': 0, 'limit ': 200,' size ': 0,' _links ': {' self ':' https://foo.bar.com/confluence/rest/api/content/56427526/label '}},' _expandable ': {' currentuser ':' ',' properties ':' ',' frontend ':' ',' editor Html ':' '}},' extensions ': {' mediaType ':' application / octet-stream ',' fileSize ': 363,' comment ':' ' }, '_links': {'webui': '/pages/viewpage.action?pageId=14648850&preview=%2F14648850%2F56427526%2Fmain.c', 'download': '/download/attachments/14648850/main.c? Version = 1 & modifyDate = 1580726185883 & api = v2 ',' self ':' https://foo.bar.com/confluence/rest/api/content/56427526 '},' _expandable ': {' container ':' / rest / api / content / 14648850 ',' операции ':' ',' children ':' / rest / api / content / 56427526 / child ','ограничений': '/ rest / api / content / 56427526 / limit / byOperation', 'history': '/ rest / api / content / 56427526 / history ',' ancestors ':' ',' body ':' ', 'версия': '', 'потомки': '/ rest / api / content / 56427526 / потомок', 'пробел': '/ rest / api / space / ~ Tim'}}

1 Ответ

0 голосов
/ 03 февраля 2020

Хотя я не нашел способа загрузить файлы напрямую с помощью модуля atlassian-python-api, мне удалось сделать это с помощью модуля requests, благодаря этому ответу . Вот код, используемый для загрузки всех видимых на странице вложений:

from atlassian import Confluence
import requests

confluence = Confluence(
    url="https://my.server.com/Confluence",
    username='MyUsername',
    password="MyPassword")

attachments_container = confluence.get_attachments_from_content(page_id=12345678, start=0, limit=500)
attachments = attachments_container['results']
for attachment in attachments:
        fname = attachment['title']
        download_link = confluence.url + attachment['_links']['download']
        r = requests.get(download_link, auth=(confluence.username, confluence.password))
        if r.status_code == 200:
            with open(fname, "wb") as f:
                for bits in r.iter_content():
                    f.write(bits)
...