Skip to content
はてなブログ用の「はてなダイアリーライター」的なコマンドラインツールになる予定
Ruby
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
HatenaBlogDownloader.rb
HatenaBlogWriter.rb
LICENSE
README-hbwdl.md
README.md
hbw.rb
hbwdl.rb

README.md

HatenaBlogWriter (v0.9.1)

概要

はてなブログ用の「はてなダイアリーライター」 的なコマンドラインツール。

必要なもの

  • ruby (たぶん 2.0 以降)
  • atomutil (0.1.5 以降)
    • 0.1.4 では正常に動作しません。
    • 0.1.4 で動作させる必要がある場合は v0.6 を使用してください。

使用法

はてなブログの設定

はてなブログの [設定 - 基本設定 - 編集モード] で、「はてな記法モード」を設定してください(他のモードでの動作は未確認)。

設定

カレントディレクトリの config.yml に以下のように設定します。

id: your_hatena_id
blog_domain: your_blog.hatenablog.com
api_key: your_api_key

API Key は、はてなブログの [設定 - 詳細設定 - AtomPub - APIキー] に表示されている文字列を記入します。

API Key が第三者の手に渡ると、第三者によるブログの改竄や削除が可能になってしまいます。config.yml をネット等に公開しないように注意してください。

エントリファイルの作成(new サブコマンド)

エントリファイルを作成するには以下のコマンドを実行します。

$ hbw.rb new
OK: エントリファイル '2017-02-12_01.txt' を作成しました。
$

{今日の日付}_{連番}.txt 形式のファイル名でエントリファイルが作成されます。

エントリファイルの編集

以下のような書式でエントリファイルを記述して、文字エンコーディングに UTF-8 を指定して保存します。

title: サンプルエントリ
date: 2017-02-12
category: プログラミング, はてな
draft: no

ここから本文です。
はてな記法で記述します。
この記事は投稿時に公開されます。

ヘッダの意味は以下の通りです。

ヘッダ 意味・書き方
title エントリのタイトルです。
date エントリの日付です。日付として表示される日時を「2017-02-12 01:56:00 +0900」のように記述します。時間やタイムゾーンは省略可能です。
category エントリのカテゴリです。複数のカテゴリを設定する場合は「,」(カンマ)区切りで列挙します。
draft 記事を下書きにするか公開するかを指定します。「yes」を指定すると下書きに、「no」を指定すると公開になります。省略した場合は公開になります。
delete 投稿済みの記事を削除する場合には「yes」を指定します。「yes」以外を指定した場合は無視されます。

投稿

hbw.rb を引数なしで実行すると、カレントディレクトリにある新規エントリをすべて投稿します。

$ hbw.rb
新規エントリファイルが 1 件あります。
OK: 2017-02-12_01.txt: エントリを投稿しました。
$

HatenaBlogWriter は、カレントディレクトリにあるファイルで、以下の条件を全て満たすものを新規エントリファイルとみなします。

  • {日付}_{番号}.txt 形式のファイル名を持つファイル
  • data ディレクトリに対応する投稿データファイル({エントリファイル名}.dat)が存在しないファイル

更新

一度投稿したエントリファイルの内容を修正してから、hbw.rb を引数なしで実行すると、修正したすべてのエントリファイルについて、それぞれの投稿先のエントリが更新されます。

$ hbw.rb
新規エントリファイルはありません。
修正されたエントリファイルが 1 件あります。
OK: 2017-02-12_01.txt: エントリを更新しました。
$

HatenaBlogWriter は、カレントディレクトリにあるファイルで、以下の条件を全て満たすものを修正されたエントリファイルとみなします。

  • data ディレクトリに対応する投稿データファイル({エントリファイル名}.dat)がある
  • ファイルの更新日時が投稿データファイルに記録された最終更新日時より新しい
  • ファイルの内容が実際に変更されている(SHA1ハッシュが投稿データファイルに記録されている投稿・更新時点でのSHA1ハッシュと一致しない)

エントリファイルの内容比較では、ヘッダの順番や余計な空白や改行の変更は無視されます。

削除

投稿済みのエントリを削除する場合は、エントリファイルに delete ヘッダを追加します。

title: 削除サンプル
date: 2018-09-08
category: プログラミング, はてな
draft: no
delete: yes

投稿済みのエントリです。
このエントリは削除されます。

上のようにエントリを修正して hbw.rb を引数なしで実行すると、修正したエントリが削除されます。

$ hbw.rb
新規エントリファイルはありません。
修正されたエントリファイルが 1 件あります。
OK: 2018-09-08_01.txt: エントリを削除しました。
$

高度な(?)使い方

post サブコマンド

エントリファイルを直接指定して投稿するには post サブコマンドを使用します。

$ hbw.rb post my_entry.txt
OK: my_entry.txt: エントリを投稿しました。
$

update サブコマンド

エントリファイルを直接指定して更新するには update サブコマンドを使用します。

$ hbw.rb update my_entry.txt
OK: my_entry.txt: エントリを更新しました。
$

check サブコマンド

実際には投稿・更新せずに、新規エントリファイルや修正されたエントリファイルを確認するには check サブコマンドを使用します。

$ hbw.rb check
新規エントリファイルが 1 件あります。
2017-02-13_01.txt
修正されたエントリファイルが 1 件あります。
2017-02-12_01.txt
$

version サブコマンド

hb.rb のバージョンを確認するには version サブコマンドを使用します。

$ hbw.rb version
HatenaBlogWriter v0.8.3
$

fix_data サブコマンド

HatenaBlogWriter のバグ等で投稿データファイルにSHA1ハッシュ値が間違った値で記録されていた場合、バグが修正されたバージョンの HatenaBlogWriter で fix_data サブコマンドを使用して修正することができます。

$ hbw.rb fix_data
2019-01-30_01.txt の内容は前回投稿時と変更ありませんか? (yes/No)
yes
投稿データファイルを更新しました。
$

注意 : fix_data サブコマンドは修正されたエントリファイルがない状態で実行してください。

fix_data_url サブコマンド

バージョン 0.9 より前の HatenaBlogWriter で投稿したエントリの投稿データファイルにはエントリのURLが記録されていません。

何らかの処理のために投稿データファイルからエントリファイルとエントリのURLの対応表を生成したい場合は、必要に応じて fix_data_url サブコマンドを使用して、古い投稿データファイルを更新してください。

$ hbw.rb fix_data
2018-10-09_06.txt: エントリのURLを取得しています。
投稿データファイルを更新しました。
$

注意事項

  • v0.9 までで一度もエントリを投稿していない状態で check/fix_data/fix_data_url サブコマンドを実行するとエラーになるというバグがありました。v0.9.1 以降では修正されています。
  • v0.8.2 まででエントリ本文先頭に HTML タグが書かれたエントリファイルを正常に投稿できないバグがありました。該当するエントリを正常に投稿し直すには、エントリファイルにダミーの修正を加えた上で v0.8.3 以降でエントリを更新し、その後修正を戻してから再更新してください。
  • v0.8.2 までで category ヘッダの末尾に空白がある場合、投稿されたエントリのハッシュ値とエントリファイルから計算したハッシュ値が異なってしまうというバグがありました。v0.8.3 以降で fix_data サブコマンド(引数なし)を実行して投稿データファイルを修正してください。
  • v0.8, v0.8.1 で Ruby 2.3 またはそれ以前で削除機能が動作しない不具合がありました。2.3 以前の ruby を利用している方は v0.8.2 以降を使用してください。
  • v0.2〜v0.7 で date ヘッダを省略したエントリのSHA1ハッシュ値がエントリファイルの更新日時によって変わってしまうバグがありました。該当バージョンで投稿・更新したエントリファイルに date ヘッダを省略したものがある場合は v0.8 以降で fix_data サブコマンド(引数なし)を実行して投稿データファイルを修正してください。
  • v0.7 以降では atomutil 0.1.5 以降が必要になります。atomutil 0.1.4 を使用し続ける必要がある場合は v0.6 を使用してください。
  • v0.5 まででエントリ本文に書かれた文字実体参照(<等)が投稿されたデータ内で展開済の文字に置き換えられてしまうバグがありました。このバグの影響を受けた投稿済みエントリの修復は v0.6 以降で update サブコマンドを使って当該エントリのエントリファイルを指定してエントリを直接更新してください。
  • v0.2〜v0.3 で投稿・更新した際、投稿データファイルにSHA1ハッシュに間違った値が記録されるバグがありました。エントリファイルを修正して更新しようとした時に「{ファイル名} の内容は前回投稿したものと同じでした。」の表示が出て修正済みファイルと認識されなくなった場合は fix_data サブコマンド(引数なし)を実行して投稿データファイルを修正してください。
  • 投稿先のエントリの内容はチェックしていません。最初の投稿後、はてなブログの編集画面で更新したエントリでも、警告無く上書きします。
  • エントリファイルのあるディレクトリの下に data ディレクトリを作成します。この下に投稿済みエントリの投稿データファイル(拡張子 .dat のファイル)が保存されます。消さないようにしてください。
  • v0.2 から投稿時にエントリファイルの末尾に投稿済み情報を書き込まないように仕様を変更しました。v0.1 で投稿したファイルは v0.2 では新規エントリファイルとして扱われます。
  • draft ヘッダを更新して下書きを公開することはできますが、公開したエントリを下書きに戻すことはできません。下書きに戻すにははてなブログの編集画面から設定してください。

TODO

  • 投稿先エントリの更新日時をチェックして上書きを抑止する機能
  • 投稿先のエントリの更新日時をチェックしてエントリファイルと同期する機能
  • v0.1 のエントリファイルから v0.2 形式への移行機能(要望があれば)
You can’t perform that action at this time.