Markdownでblog書いてみた2

前回書いた、「「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かなにかで書き直す

頑張るか

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です