はてなブログ API では予約投稿ができない
はてなブログ API を使ってみたが、クソほど充実していない。
目次
はてなブログ API を使う
はてなブログ API を使ってみようーと思うと、公式の不親切な OAuth がどうしたこうしたみたいなリファレンスが飛んでくる。
なんやねんこの OAuth 1.0 ってのは。結局 curl じゃやれんのかいな。メンドクサ。
と思ってよくよく調べると、もっと簡単なやり方があった。
自分のブログの「設定」→「詳細設定」の下部に「AtomPub」という項目がある。ココの
- ルートエンドポイント :
https://blog.hatena.ne.jp/neos21/neos21.hatenablog.com/atom
- API キー : xxxxxxxxxx
を控えておく。
ルートエンドポイントは、ユーザ ID とブログ URL から組み立てるだけなのでバレても良いが、API キーはパスワードと同等なのでバラさないように。
curl でやるなら、以下のように -u 【ユーザ ID】:【API キー】
を指定すればアレコレできる。
# 公開済の記事を取得する例
$ curl -X GET -u 'neos21:xxxxxxxxxx' 'https://blog.hatena.ne.jp/neos21/neos21.hatenablog.com/atom/entry'
# 投稿する
$ curl -X POST -u 'neos21:xxxxxxxxxx' -d '<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app">
<title>エントリタイトル</title>
<author><name>neos21</name></author>
<content type="text/x-markdown">__エントリ本文__
# ほげふが</content>
<updated>2021-01-01T08:00:00+09:00</updated>
<category term="Scala" />
<app:control><app:draft>yes</app:draft></app:control>
</entry>' \
'https://blog.hatena.ne.jp/neos21/neos21.hatenablog.com/atom/entry'
記事取得は GET、記事投稿は POST だ。
下書き投稿はできるが予約投稿はできない
そんで本題。POST で記事を投稿する時、
<app:control><app:draft>yes</app:draft></app:control>
とすれば下書き投稿され、
<app:control><app:draft>no</app:draft></app:control>
app:draft
の値を yes
から no
に変えれば、実際に投稿できる。
一方で、updated
要素では記事の投稿時刻を指定できる。
<updated>2021-01-01T08:00:00+09:00</updated>
ということは、未来日付を指定しつつ下書き保存したら、予約投稿になるのか? と思ったが、予約投稿にはならない。
以下の記事も同じことを検証し、そう結論づけていた。
結局、日付を指定しようがしまいが、「下書き」or「実際に投稿」しか選べないし、日付はどちらにせよ「投稿日時」として利用されるだけなのだ。コレは API で作った下書き投稿をブラウザで開いてみれば分かる。
予約投稿はどう実現されている?
じゃあブラウザで見ている公式の記事投稿画面では、どうやって「予約投稿する」処理をしているのか。
開発者ツールで見てみると、/edit
への POST 時に、フォームパラメータとして draft: 予約投稿する
という情報を投げているようだった。
それならと思って
<app:control><app:draft>予約投稿する</app:draft></app:control>
というパラメータで POST してみたが、コレは yes
扱いになってしまい即投稿されてしまった。
結論 : API からは予約投稿できない
ということで結論。
- はてなブログの AtomPub API を使うには、面倒臭そうな OAuth とかは不要で、API キーさえあれば GET や POST ができる
- はてなブログの AtomPub API では、未来日の投稿日時を指定しても、下書きと即投稿しか出来す、予約投稿はできない
いちいちブラウザでポチポチしたくないんだけど、仕方なさそう…。
参考文献
- 公式
- API のラッパー
- API を使用してみた