ライブドアブログに markdown で投稿する
◆ 管理画面のエディタをほとんど使ってないので それなら一切使わなくていいようにできるかも
◆ 普段から別記法で書いて HTML 変換して投稿してたので そのままの形で投稿できるようにしてみる
◆ とりあえず markdown をアップロードして記事はそれを参照して表示時に HTML 化して DOM を作る
◆ 普段から別記法で書いて HTML 変換して投稿してたので そのままの形で投稿できるようにしてみる
◆ とりあえず markdown をアップロードして記事はそれを参照して表示時に HTML 化して DOM を作る
普段このブログに投稿する内容を書くときにブログ管理画面のエディタはほとんど使ってません
独自の記法で書いてそれを HTML 化して投稿しています (記法は違うものの扱い的には markdown みたいなものです)
基本的に記事を後から修正することはほぼ無いので その記法のテキストは使い捨てで 投稿したら削除してます
なので少し修正したいとかがあれば標準のエディタで修正するくらいです
別にそれでも困ってなかったのですが ふと直接投稿できるようにして管理画面開かなくていいようにできないかなと思いました
一応 API は用意されていたので 思いつきですが少し試してみました
記法は変換できればなんでもいいので とりあえず一般的な markdown を使うことにしました
ファイルが多くなったのでリポジトリに置いてます
https://gitlab.com/nexpr/ldmd
試すために用意したサブブログはこれです
https://void-0.blog.jp/
試すために作っただけで残す必要はないので いつか消すかもしれません
実際に使うには config.js で投稿先のブログ名や API キーを指定する必要があります
投稿時に HTML 化して HTML として投稿することもできるのですが 今回は生の形式のままサーバに保存して表示時に HTML 化するようにしました
HTML 化して投稿だと HTML の方を直接編集できてしまい 次の更新時に直接編集していた部分が元に戻るということが出てくることがありますからね
あと毎回 HTML 化の処理を通すので後から一括して調整したいときにやりやすいです
markdown だとドキュメントのタイトルや著者みたいなメタデータを書く記法があると思ってましたが これは標準ではなく記法もいくつかあるようで markdown パーサでは対応してないのが多いようです
別のメタデータパーサでメタデータと本文を分離する前処理が必要になるようです
今回は VSCode のプレビューに合わせたくて markdown-it を使っていて このパーサだとサポートしてないみたいだったので メタデータ記法は使わないようにしました
代わりに HTML コメントを使って JSON を入れるという方法にしました
という感じです
JSON の title が記事タイトルになるようにしています
タグも入れるつもりだったのですが 投稿するための API が古いせいかタグ情報はなくて対応してないみたいでした
https://help.blogpark.jp/archives/52491176.html
https://help.blogpark.jp/archives/52372407.html
ファイルマネージャの方は比較的新しいので JSON 形式です
ただ リクエストは multipart/form-data を使ってアップロードする必要がありました
面倒だなーと思ったものの 最近の Node.js だと blob を FormData に入れて fetch の body に渡せば細かいところは勝手にやってくれました
さらに面倒だったのは記事本体の方です
AtomPub というものでした
名前は聞いたことありましたが 使ったことはなく昔のものという印象です
リクエストもレスポンスも XML です
ググってもあまり情報がなく 見つかるのも 10 年以上は前のものでした
この API のリリース時期が 2013 年らしいですし
もっと新しくて使いやすいものにしてほしいですね
実際タグの投稿はできなかったですし 「続きを読む」 に表示する部分の投稿もできません
管理画面で使われる内部 API を使ったほうができることが多くていいのかもしれないです
markdown はパーサがいろいろあって 同じソースでも使うところによって異なる HTML になることは少なくないです
他にも機能は少なめだったりと問題点は多いと思います
類似の記法でもっとしっかりとしたものもあるので そこまで流行らず次のがすぐ出るだろうなーくらいに思ってました
しかし それから長く経ちますが相変わらずあちこちで使われています
むしろ使われてるところが増えてきているくらいです
これまで使っていたのは自作の独自記法な分 自由に拡張できるようにして色々機能入れたりしましたが 実際のところほとんど使ってませんし 複雑化しすぎて使い方を覚えてないです
プレビューはできるもののシンタックスハイライトは面倒で用意していないので 長くなってきたり複雑なものになると見づらいです
markdown 記法を使わざるをえない場所にコピペできず書き換えが必要になります
markdown はエディタ (VSCode) 標準で使えてプレビューもできるくらいですし いっそ markdown にしてしまっていいのかなという気もしてきています
内部の記事の扱いや表示方法も変わるので こういう方法にするなら新ブログにしたいです
ただ それならもうライブドアブログにこだわる必要もなく Github や Gitlab の pages など静的ファイルホスティングサービスで良い気もします
それに上の通り markdown に切り替えも考えるところで もし markdown なら Gist とかもっと手軽なものもあります
ですが 一番の問題はサイトが増えていくと後々検索したいときに面倒ということなので なんだかんだこのままの可能性が高いです
独自の記法で書いてそれを HTML 化して投稿しています (記法は違うものの扱い的には markdown みたいなものです)
基本的に記事を後から修正することはほぼ無いので その記法のテキストは使い捨てで 投稿したら削除してます
なので少し修正したいとかがあれば標準のエディタで修正するくらいです
別にそれでも困ってなかったのですが ふと直接投稿できるようにして管理画面開かなくていいようにできないかなと思いました
一応 API は用意されていたので 思いつきですが少し試してみました
記法は変換できればなんでもいいので とりあえず一般的な markdown を使うことにしました
ファイルが多くなったのでリポジトリに置いてます
https://gitlab.com/nexpr/ldmd
試すために用意したサブブログはこれです
https://void-0.blog.jp/
試すために作っただけで残す必要はないので いつか消すかもしれません
投稿
リポジトリのルートで↓のようなコマンドを実行することで md ファイルを投稿しますnode control.js up articles/00001.md
実際に使うには config.js で投稿先のブログ名や API キーを指定する必要があります
export default {
livedoor_id: "",
blog_name: "",
atom_pub_password: "",
file_manager_password: "",
}
投稿時に HTML 化して HTML として投稿することもできるのですが 今回は生の形式のままサーバに保存して表示時に HTML 化するようにしました
HTML 化して投稿だと HTML の方を直接編集できてしまい 次の更新時に直接編集していた部分が元に戻るということが出てくることがありますからね
あと毎回 HTML 化の処理を通すので後から一括して調整したいときにやりやすいです
markdown だとドキュメントのタイトルや著者みたいなメタデータを書く記法があると思ってましたが これは標準ではなく記法もいくつかあるようで markdown パーサでは対応してないのが多いようです
別のメタデータパーサでメタデータと本文を分離する前処理が必要になるようです
今回は VSCode のプレビューに合わせたくて markdown-it を使っていて このパーサだとサポートしてないみたいだったので メタデータ記法は使わないようにしました
代わりに HTML コメントを使って JSON を入れるという方法にしました
<!--{
"title": "タイトル"
}-->
# h1
テキストテキスト
という感じです
JSON の title が記事タイトルになるようにしています
タグも入れるつもりだったのですが 投稿するための API が古いせいかタグ情報はなくて対応してないみたいでした
ライブドアブログ API
ライブドアブログの API はこの 2 つがあり ファイルマネージャと記事で分かれていますhttps://help.blogpark.jp/archives/52491176.html
https://help.blogpark.jp/archives/52372407.html
ファイルマネージャの方は比較的新しいので JSON 形式です
ただ リクエストは multipart/form-data を使ってアップロードする必要がありました
面倒だなーと思ったものの 最近の Node.js だと blob を FormData に入れて fetch の body に渡せば細かいところは勝手にやってくれました
const { Blob } = require("buffer")
const fs = require("fs")
const url = `https://livedoor.blogcms.jp/blog/${blog_name}/file_manager/upload`
const form_data = new FormData()
form_data.append("dir_id", dir_id)
form_data.append("name", name)
const blob = new Blob([fs.readFileSync(file_path)])
form_data.append("upload_data", blob)
const result = await fetch(url, {
method: "POST",
headers: {
"X-LDBlog-Token": file_manager_password,
},
body: form_data,
}).then(res => res.json())
console.log(result)
さらに面倒だったのは記事本体の方です
AtomPub というものでした
名前は聞いたことありましたが 使ったことはなく昔のものという印象です
リクエストもレスポンスも XML です
ググってもあまり情報がなく 見つかるのも 10 年以上は前のものでした
この API のリリース時期が 2013 年らしいですし
もっと新しくて使いやすいものにしてほしいですね
実際タグの投稿はできなかったですし 「続きを読む」 に表示する部分の投稿もできません
管理画面で使われる内部 API を使ったほうができることが多くていいのかもしれないです
markdown の理由
ところで markdown にした理由ですが 試しなのでとりあえずというのもそうですが 他にもあったりしますmarkdown はパーサがいろいろあって 同じソースでも使うところによって異なる HTML になることは少なくないです
他にも機能は少なめだったりと問題点は多いと思います
類似の記法でもっとしっかりとしたものもあるので そこまで流行らず次のがすぐ出るだろうなーくらいに思ってました
しかし それから長く経ちますが相変わらずあちこちで使われています
むしろ使われてるところが増えてきているくらいです
これまで使っていたのは自作の独自記法な分 自由に拡張できるようにして色々機能入れたりしましたが 実際のところほとんど使ってませんし 複雑化しすぎて使い方を覚えてないです
プレビューはできるもののシンタックスハイライトは面倒で用意していないので 長くなってきたり複雑なものになると見づらいです
markdown 記法を使わざるをえない場所にコピペできず書き換えが必要になります
markdown はエディタ (VSCode) 標準で使えてプレビューもできるくらいですし いっそ markdown にしてしまっていいのかなという気もしてきています
終わり
試しに作ってみましたが 思いつきをとりあえず試しただけなので 結局使うかは微妙なところです内部の記事の扱いや表示方法も変わるので こういう方法にするなら新ブログにしたいです
ただ それならもうライブドアブログにこだわる必要もなく Github や Gitlab の pages など静的ファイルホスティングサービスで良い気もします
それに上の通り markdown に切り替えも考えるところで もし markdown なら Gist とかもっと手軽なものもあります
ですが 一番の問題はサイトが増えていくと後々検索したいときに面倒ということなので なんだかんだこのままの可能性が高いです