前言
之前我们写了一篇 - Jira 任务同步到 Microsoft Teams 的文章。今天我们来讲讲获取 Confluence
的信息。获取信息后将其同步到 Microsoft Teams
的操作请参考 发送数据到 Microsoft Teams 的 Channel 上。
本文操作的 Node
版本是 v12.20.2
,npm
版本是 6.14.11
,使用了 koa
库,且在 mac m1
系统上运行。下面我们一步步来操作~
配置 Confluence 信息
在进行接口请求之前,我们需要用到下面的这些配置信息。
代码语言:javascript复制{
"confluence": {
"username": "your_username",
"password": "your_password",
"hostname": "https://your_domain.com"
}
}
我们获取这些配置,其中用用户名和密码用来生成 token
, hostname
表明我们将连接的服务地址。
我们结合 config 使用:
代码语言:javascript复制import config from 'config'
const confluence_token = Buffer.from(`${ config.confluence.username }:${ config.confluence.password }`).toString('base64')
或者,我们可以结合 dotenv 使用:
代码语言:javascript复制const dotenv = require('dotenv');
dotenv.config();
const username = process.env.username;
const password = process.env.password;
const confluence_token = Buffer.from(`${username}:${password}`).toString('base64');
连接服务
这里使用 axios
进行服务连接:
const axios = require('axios'); // 网络请求库
axios.get(`${ config.confulence.hostname }/rest/api/content/search`, {
headers: {
Authorization: `Basic ${ confluence_token }`
}
})
上面的案例是以 get
接口为例,引入了 axios 网络请求库。并且,在请求头上添加请求的凭证,即可访问 confluence
服务。
下面我们用例子讲讲如何调用。
调用示范
我们假设有下面两个简单的场景:
1. 获取 Confluence 上指定人员创建,且类型是文档,指定创建时间范围的记录
代码语言:javascript复制class Demo {
// 类静态方法
static async getPersonalCreatedConfluence(creator, timeRange) {
return await axios.get(`${config.confluence.hostname}/rest/api/content/search`, {
params: {
// cql
cql: `creator = ${ creator } and type = page and created >= ${ timeRange[0] } and created <= ${ timeRange[1] }`,
limit: 100,
expand: 'history',
},
headers: {
Authorization: `Basic ${confluence_token}`
}
})
}
}
// 调用
Demo.getPersonalCreatedConfluence('jimmy', ['2023-03-15', '2023-03-16'])
上面采用了 cql
即 Confluence Query Language
查询方式,我们指定 creator
,type
和 timeRange
。我们还限制了一次查询出来一页展示 100
条数据,并将操作的历史查询出来。更多相关 CQL
的内容,可以点击 Adcanced Searching using CQL。
2. 获取 Confluence 上指定人员更新,且类型是文档,指定修改时间范围的记录
代码语言:javascript复制class Demo {
static async getPersonalUpdateConfluence(contributor, timeRange) {
return await axios.get(`${config.confluence.hostname}/rest/api/content/search`, {
params: {
// cql
cql: `contributor = ${ contributor } and type = page and lastModified >= ${ timeRange[0] } and lastModified <= ${ timeRange[1] }`,
limit: 100,
expand: 'history.lastUpdated',
},
headers: {
Authorization: `Basic ${confluence_token}`
}
});
}
}
// 调用同上
Demo.getPersonalUpdateConfluence('jimmy', ['2023-03-15', '2023-03-16'])
代码跟上面