从 public url 中获取合流页面的页面 ID

Get page id of a confluence page from its public url

给定 page_url 如何获得 Confluence page_id。例如:

如果这是显示 URL:https://confluence.som.yale.edu/display/SC/Finding+the+Page+ID+of+a+Confluence+Page

我想使用 Confluence REST API

获取它的 page_id

更多详情here

你用atlassian-python-api吗?

在这种情况下,您可以解析 url 以获得融合 space (SC) 和页面标题 (Finding the Page ID of a Confluence Page),然后使用 confluence.get_page_id(space, title) .

from atlassian import Confluence

page_url = "https://confluence.som.yale.edu/display/SC/Finding+the+Page+ID+of+a+Confluence+Page"

confluence = Confluence(
        url='https://confluence.som.yale.edu/',
        username=user,
        password=pwd)
        
space, title = page_url.split("/")[-2:]
title = title.replace("+", " ")

page_id = confluence.get_page_id(space, title)

请注意,当您的标题包含特殊字符(+üä...)时,您的页面 url 将已经包含这样的 ID : https://confluence.som.yale.edu/pages/viewpage.action?pageId=1234567890 所以你可能想先检查一下。

编辑:这里是您的函数的一个版本:

from atlassian import Confluence
import re
import urllib

# regex pattern to match pageId if already in url
page_id_in_url_pattern = re.compile(r"\?pageId=(\d+)")

def get_page_id_from_url(confluence, url):
    page_url = urllib.parse.unquote(url) #unquoting url to deal with special characters like '%'
    space, title = page_url.split("/")[-2:]

    if re.search(page_id_in_url_pattern, title):
        return re.search(page_id_in_url_pattern, title).group(1)
    
    else:
        title = title.replace("+", " ")
        return confluence.get_page_id(space, title)



if __name__ == "__main__":
    from getpass import getpass
    user = input('Login: ')
    pwd = getpass('Password: ')

    page_url = "https://confluence.som.yale.edu/display/SC/Finding+the+Page+ID+of+a+Confluence+Page"

    confluence = Confluence(
            url='https://confluence.som.yale.edu/',
            username=user,
            password=pwd)

    print(get_page_id_from_url(confluence, page_url))