Because We Love Happy Coding

フリーライターからエンジニア × 講師。発信力だけあり余ってる感じ

はてなブログのATOM APIを利用して、VisualStudioCodeから記事を投稿するテスト

今日もまたコーディング。だって僕らはHappy Codingが大好きだから。

はてなブログにはAPIが用意されている。

developer.hatena.ne.jp

VisualStudioCodeで下書きしてそのままはてなブログにアップロードできたらいろいろ捗るだろうと思って、少しコードを書いている。使いやすく原稿を書いて、node.jsでさっとアップロードする想定だ。 今日はその前段階として、REST Client機能拡張を利用して、XMLファイルをアップロードしてみた。

VisualStudioCodeのREST Client機能拡張は拡張子.restのファイルを用意しておけばいつでもリクエストを送信できるので、あれこれリクエストのフォーマットを用意しておけるのが気に入っている。
一つのファイルの中で、###を使うと複数の設定を区切っておけるのもいい。

marketplace.visualstudio.com

basic認証を使うので、ユーザーID:パスワードbase64エンコードしたものを用意した。以下の例でsome_string_base64_encoded_aaaaaaaaaaaaaaaaazzzzzzzzzzzzzの部分。

@hatenaId=some_hatena_id
@blogId=some_blog_id
@root_endpoint=https://blog.hatena.ne.jp/{{hatenaId}}/{{blogId}}/atom
@passkey=some_string_base64_encoded_aaaaaaaaaaaaaaaaazzzzzzzzzzzzz
@h3_header=###
@h4_header=####
@h5_header=#####
@h6_header=######

GET {{root_endpoint}}/entry
Content-Type: application/xml
Authorization: Basic {{passkey}}

###
POST {{root_endpoint}}/entry
Authorization: Basic {{passkey}}

<?xml version="1.0" encoding="utf-8"?>
  <entry xmlns="http://www.w3.org/2005/Atom"
       xmlns:app="http://www.w3.org/2007/app">
    <author>
      <name>mogami74</name>
    </author>
    <title>記事のタイトル</title>
    <updated>2024-09-27T23:59:59+09:00</updated>
    <content type="text/x-markdown">
&#35;&#35;&#35; 見出しH3は実体参照で記述する
□□□□◆□□□□■
{{h3_header}}または、H3見出しを変数化する
□□□□◆□□□□■
</content>
    <category term="some_category_name" />
    <app:control>
      <app:draft>yes</app:draft>
      <app:preview>yes</app:preview>
    </app:control>
  </entry>

<category term="some_category_name" />は複数挿入することができるみたい。

ちょっと苦労したのは見出しで、私ははてなブログの形式をマークダウン形式に設定しているんだけど、###でXML内に記述すると、認識されず消えてしまう。
REST Clientの区切りまたはコメントとして認識されてしまうみたい。

バックスラッシュでエスケープすれば認識はされるのだが、マークダウン入力欄にそのままバックスラッシュも出力されてしまい、見出しにならない。
結局、実体参照ならちゃんと見出しとして認識されるとわかった。
ChatGPTに尋ねたら「変数化してみたら」との提案で、これもうまく見出しとして認識された。

マークダウン記法を全部試したわけではないので、もしかしたら他にも何かあるかも。

ともあれ、この形式で投稿できることはわかったので、これをテンプレートにしつつ、node.jsで記事を編集できるような体制を整えてみたい。

そのうちこのブログもVSCodeから直接書き込めるようになる……はずだ。