【问题标题】:Modify wiki page (Confluence) programmatically以编程方式修改 wiki 页面 (Confluence)
【发布时间】:2017-05-10 17:54:50
【问题描述】:

我想以编程方式(在 python 中)修改 wiki 页面(Atlassian 的 Confluence - JIRA 编辑器)。到目前为止,我尝试的是模拟用户行为:

  1. 点击编辑按钮
  2. 更改textarea 输入的内容
  3. 使用保存按钮提交更改

第 1 部分还可以,因为我有与页面编辑相对应的 URL,第 2 部分(页面检索和修改)也可以,但我不知道如何实现第 3 步...我' m 使用urllib2。

感谢您的帮助!!

编辑:XML-RPC 确实是解决方案,this example 正是我想要的!

【问题讨论】:

  • 您能否发布解决方案作为答案?我无法在链接中查看该页面。

标签: python html urllib2


【解决方案1】:
# write to a confluence page
import xmlrpclib

CONFLUENCE_URL = "https://intranet.example.com/confluence/rpc/xmlrpc" 
CONFLUENCE_LOGIN = "a confluence username here"
CONFLUENCE_PASSWORD = "confluence pwd for username"

# get this from the page url while editing
# e.g. ../editpage.action?pageId=132350005 <-- here
PAGE_ID = "132350005" 
client = xmlrpclib.Server(CONFLUENCE_URL, verbose = 0)
auth_token = client.confluence2.login(CONFLUENCE_LOGIN, CONFLUENCE_PASSWORD)
page = client.confluence2.getPage(auth_token, PAGE_ID)

# and write the new contents
page['content'] = "!!!your content here!!!"

result = client.confluence2.storePage(auth_token, page)
client.confluence2.logout(auth_token)

请注意,当您执行此操作时,confluence 会修改您的 html 代码。例如,它去除了元素上的脚本、样式和有时的标题属性。为了把这些东西拿回来,你需要使用他们的宏代码。

最简单的方法是在融合中编辑页面并使其看起来像您想要的那样,然后抓取页面并打印页面['content'] 看看 atlassian 人决定做哪些神奇的新东西到标准 html。

【讨论】:

  • 我相信您需要在注销之前添加client.confluence2.storePage(auth_token, page) 才能正常工作,不是吗?
  • 该代码是从工作脚本修改的。我怀疑索引分配正在做这项工作。不过,我明天上班时会仔细检查。
  • @Jerry 你说的很对。我一定以某种方式错过了那条线。我已经相应地修复了脚本。感谢您的反馈。
  • @dementedhedgehog 我无法让auth_token = cliient.confluence2.login(CONFLUENCE_LOGIN, CONFLUENCE_PASSWORD) 行工作。收到405 Method Not Allowed 协议错误。我需要在 Confluence 上安装一些东西或启用权限吗?
  • 对我使用的 URL 也感到困惑。假设我要编辑的页面是http://my.server.net:port/confluence/blah/myname/mypage。我是否将整个内容复制为CONFLUENCE_URL?
【解决方案2】:

这似乎是绝对错误的做法。

首先,Confluence 有一个插件架构,它应该允许您从应用程序本身以编程方式manage content,而无需任何类型的 HTTP 请求。其次,即使您出于某种原因不想或不能使用插件 API,下一个明显的选择是使用 SOAP/XML-RPC API。

没有理由真正混淆buttons 和textareas,除非您尝试进行某种端到端测试,包括测试 GUI(例如自动跨浏览器测试)。

【讨论】:

  • 太棒了!我不会使用第一个解决方案,因为我使用的是 Python,但第二个解决方案非常棒(刚刚找到了一个完全符合我要求的示例)!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多