はじめに
はてなブログではAPIを利用することで自動投稿/更新が可能です。
そんなAPIを利用したもの中で、PythonやJavaの上で実装したものは既に他記事でありましたが、curlコマンドを用いたものは見当たりませんでした。
特に追加でインストールが不要であること、ワンライナーで動くこと等、一部には需要があるかと思い今回は要点を記事にしました。
動作確認環境
Mac OS X | 10.12.6 |
---|---|
curl | 7.54.0 |
はてなブログAPIについて
詳細は以下の開発チームの記事にありますが
はてなブログAtomPub - Hatena Developer Center
自動投稿/更新はXMLデータの送付で行います。
今回は更新を例に解説します。
更新処理を行うには、対象のブログのエントリーIDに対してXML文書をPUTします。
まずはcurlとid/keyの動作検証も兼ねて
# curl -u {ブログID}:{AtomPubAPIキー} https://blog.hatena.ne.jp/{はてなID}/{ブログID}/atom/entry/
とターミナルで打ってみてください。
下書き含め、記事の情報がずらずらと標準出力から取得できます。
また、後ほど使う記事の{entry_id}もここで確認できます。
見つからなければ自動更新したい記事のHTMLを確認してみてください。20桁あたりの数字があります。
<article class="entry hentry ".... id="entry-XXXXXX"..
uオプションは認証のためのオプションです。
ここを指定しないと、またはIDとキーが一致しないと
<p class="error-box">Authorization required</p>
または
<p class="error-box">Invalid login</p>
というエラーが返ってきます。
自動更新のcurlコマンド
実際に記事を更新するためのコマンドは以下です。
cat test.xml | curl -X PUT -H "Content-type: text/xml" --data-binary @- -u {ブログID}:{AtomPubAPIキー} https://blog.hatena.ne.jp/{はてなID}/{ブログID}/atom/entry/{entry_id}
@-と指定することで、標準入力のxmlをPUTできます。
そのxmlファイルのサンプルは以下に記載しておきます。
<?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>name</name></author> <content type="text/plain"> ブログ本文 </content> <category term="ブログカテゴリ" /> <app:control> <app:draft>no</app:draft> </app:control> </entry>
ブログタイトル、ブログ本文、ブログカテゴリを編集してください。
<category term="ブログカテゴリ1" /> <category term="ブログカテゴリ2" />
とすれば複数カテゴリも設定できます。
また、--data-binaryを指定している理由は、ブログ本文に改行が入っている場合にそれを正しくPUTするためです。
実際にコマンド発行に成功すれば
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 40550 0 40550 0 0 22316 0 --:--:-- 0:00:01 --:--:-- 22317 <?xml version="1.0" encoding="utf-8"?> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app"> ....
このように送り込まれるXMLファイルが標準出力に出てきます。
終わりに
この記事が後続の方の参考になれば幸いです。
おまけ
以下の記事はこの仕組みで自動更新しています。