はじめに
シフトページを自動化するPythonコードを書いてみた。
構造
-
テンプレート構造
親スペース[SPACE_KEY] ━ 親ページ[oya_page] ━ 月ページ[月テンプレート] ━ 日ページ[日テンプレートA]
┗ 日ページ[日テンプレートB] -
稼働後の構造:月と日のページが出来上がる
親スペース[SPACE_KEY] ━ 親ページ[oya_page] ━ 月ページ[YYYY/MM] ━ 日ページ[YYYY/MM/DD_A]
┗ 日ページ[YYYY/MM/DD_B]
※ページがYYYY/MM~となっているのはコンフルの一意制約対策
##APIキー(AUTH=)取得
https://id.atlassian.com/manage/api-tokens
##コード
変数名はご愛敬
import requests
import json
import re
import datetime
BASE_URL = "https://★コンフルのURL★.atlassian.net/wiki/rest/api"
AUTH = ("★コンフルのID★","★コンフルのPW★")
HEADERS = {"content-type":"application/json"}
SPACE_KEY = "★コンフルのスペースキー★"
NEW_DATE = datetime.datetime.now() + datetime.timedelta(days=7) # 一週間後指定(lambdaでの実行はUTC+7日後)
def lambda_handler(event, context):
parent_id = monthpage_create()
shiftpage_create("★日テンプレートAの名前★","★付属したい任意の文字(例:A)★", parent_id)
shiftpage_create("★日テンプレートBの名前★","★付属したい任意の文字(例:B)★", parent_id)
def monthpage_create():
template_title_month = "★月テンプレページの名前★"
new_page_title_month = NEW_DATE.strftime("%Y/%m")
oya_page = "★親ページのIDを指定"
# 月初は新規ページ作成
if NEW_DATE.strftime("%d") == "01":
# コピー元(月テンプレ)ページ情報取得
get_result_month = get_page(template_title_month)
parent_id = post_page(new_page_title_month, get_result_month[1], oya_page)
print("Create MonthPage : " + new_page_title_month + " PageId : " + parent_id)
else:
get_result_month = get_page(new_page_title_month)
parent_id = get_result_month[0]
return parent_id
def shiftpage_create(template_title_day, shift, parent_id):
# シフトのページタイトル作成
yobi = ["月","火","水","木","金","土","日"]
dow = yobi[NEW_DATE.weekday()] # 曜日取得(day of the week)
new_page_title_day = NEW_DATE.strftime("%Y/%m/%d") + ("(") + dow + (")") + shift
# コピー元(シフトテンプレ)ページ情報取得
get_result_day = get_page(template_title_day)
# シフトページ作成
shiftpage_id = post_page(new_page_title_day, get_result_day[1], parent_id)
print("Create DayPage : " + new_page_title_day + " PageId : " + shiftpage_id)
# ページを取得
# return:
# [0] = id
# [1] = contents
def get_page(title):
response_get = requests.get(
BASE_URL+"/content",
auth=AUTH,
params={
"title":title,
"spacekey":SPACE_KEY,
"expand":"body.storage.value"
}
)
response_get.raise_for_status()
json_contents = json.loads(response_get.content.decode("utf-8"))
contents = json_contents["results"][0]["body"]["storage"]["value"]
page_id = json_contents["results"][0]["id"]
return page_id, contents
# ページを新規作成
# return: id
def post_page(title, contents, parent_id):
payload = {
"type": "page",
"title": title,
"ancestors": [{"id": parent_id}],
"space": {"key": SPACE_KEY},
"body": {
"storage": {
"value": contents,
"representation": "storage"
# ↑の部分アトラシアンの仕様上APIでの作成は旧エディタで作成することになるようで、editor2が良いらしい(2020/1時点未実装のようだが)
}
}
}
response_create = requests.post(
BASE_URL + "/content",
auth = AUTH,
data = json.dumps(payload),
headers = HEADERS
)
response_create.raise_for_status()
json_create_contents = json.loads(response_create.content.decode("utf-8"))
create_id = json_create_contents["id"]
return create_id
Lambda + CloudWatchへの登録
以下雑です。
1.以下コマンドをlinux環境で実行して上のソースと一緒にzip化する
pip install requests
2.CloudWatchに時間登録
※CloudFormation使った登録は別で