前回書いた、「「gitでmasterブランチにマージしたらそのmdファイルを変換してAPIでWordpressに投げる」」ようななにかを試作中。
仕様
- markdownで書く
- ファイル名から拡張子を削除したところがタイトルになる
- pandocでhtml5に変換してapiでpostする
- gitでタグを打つかマージした瞬間に処理する
ざっくりとシェルスクリプトで書いてみたものが以下
#!/bin/sh
# タグの取得
function getTag () {
#local -r tag=$(git tag -n1 | awk '{print $1}')
#echo ${tag}
# 実験のため固定値
echo "post/日記"
}
# addしたファイルの一覧取得
function getAddFiles () {
local -r files=$(git log -1 --name-status | grep "^A\s" | awk '{print $2}')
echo ${files}
}
# modifyしたファイルの一覧取得
function getModifyFiles () {
local -r files=$(git log -1 --name-status | grep "^M\s" | awk '{print $2}')
echo ${files}
}
# 投稿モード(公開 or ドラフト)の取得
function getPostMode () {
local -r tag=$(getTag)
echo ${tag} | grep "post/" > /dev/null
if [ $? -eq 0 ]; then
echo "post"
return 0
fi
echo ""
return 1
}
# 投稿カテゴリの取得
function getCategory () {
local -r tag=$(getTag)
local -r split=(${tag//\// })
echo ${split[1]}
}
# 投稿
function post () {
local -r endpoint="http://localhost/blog/" # $(echo ${WORDPRESS_ENDPOINT})
local -r post_endpoint="${endpoint}?rest_route=/wp/v2/posts"
local -r credential="" # "Basic $(echo ${WORDPRESS_CREDENTIAL})"
local -r title=$1
local -r category=$2
local -r category_id=$(curl ${endpoint}?rest_route=/wp/v2/categories | jq -r ".[] | select(.name == '${category}') | .id")
local -r request=$(cat << EOS
{
"title": "${title}",
"categories": ["${category_id}"],
"format": "standard",
"tags": [],
"status": "publish"
"content": "$(cat /tmp/output.html | sed -e 's/\"/\\"/g' | sed -e 's/\\\./\\\\\./')"
}
EOS
)
jq -n "$(echo "${request}")" . > /tmp/request.json
curl -X POST ${endpoint} -u "mattyan:${credential}" -H "Content-Type: application/json" --data @/tmp/request.json -v
}
function main () {
local -r post_mode=$(getPostMode)
if [ "${post_mode}" == "" ]; then
echo "ERR: タグが指定されていません"
return 1
fi
local -r addFileList=($(getAddFiles))
for file in ${addFileList[@]}; do
echo "${file}" | grep "\.[md]" > /dev/null
if [ $? -eq 0 ]; then
# mdファイルはhtml変換
pandoc -i "${file}" -o /tmp/output.html
# ファイル名取得
local -r title=$(basename "${file}" | sed -e "s/\.md//")
local -r category=$(getCategory)
if [ "${post_mode}" = "post" ]; then
# 新規投稿
post ${title} ${category}
fi
fi
done
}
main
gitのタグを見て投稿なのか下書きなのかを判断。ログを見てmdファイルが追加されてたらそのファイルをpandocで変換して、Wordposs REST APIにcurlでPOSTして投稿。
ホームページの新環境テスト用に組んだWordpressに投稿したところ、大体うまく行った。なんか投稿一覧が動かなくなったけど、これのせいなのか別の原因なのかが不明。(投稿削除しても直らない)
問題点
- mediaファイルをアップロードできない
- 更新ができない
- 更新に必要な情報を保存していない
- メタデータの管理がシェルスクリプトだと面倒
- 同じタグが並ぶ
- 「mdファイルを追加コミットしてから編集コミット」すると投稿できない
対処として
- カテゴリなどはメタデータで管理する
- メタデータは作成ツールを作ってそっちで管理する。
- プログラムはrustかなにかで書き直す
頑張るか