はてなブログAtomPub APIを使ってはてなブログの記事をエクスポートしたり投稿・編集を行うためのコマンドラインツール集です。

§1 ダウンロード

MIT X11ライセンスでのリリースとなります。 Windows+.NET Framework環境およびUbuntu Linux+Mono環境で動作することを確認しています。 未検証ですがMonoがインストールされていればMac環境でも動作すると思われます。

§1.1 最新版

§1.2 過去のバージョン

§2 使い方

パッケージ内には以下の実行ファイルが含まれています。

DumpAllEntries.exe
すべてのブロク記事をダンプ・エクスポートするツール
PostNewEntry.exe
ブログに新規記事を投稿するツール
ReplaceEntryContent.exe
ブログ内の全記事の内容を一括置換・削除するツール
ModifyCategory.exe
ブログ記事のカテゴリを一括変更するツール

すべてコマンドラインツールなので、コマンドプロンプトやバッチファイルを使って起動してください。

§2.1 DumpAllEntries.exe

すべてのブロク記事をダンプするツールです。 はてなブログからのエクスポートなどに使うことができます。

(2014-08-22) はてなブログにMovable Type形式でのエクスポート機能が追加されました。 (記事データをエクスポートできるようにしました。ブログのバックアップ等にご利用ください - はてなブログ開発ブログ) このツールでも引き続きMovable Type形式でのダンプを行うことはできますが、記事に付いたコメントなどは保存されず、また記事数が多い場合は処理に時間がかかります。 そのため、はてなブログのエクスポート機能を使うことをおすすめします。

使用例
DumpAllEntries.exe -id hatena -blogid hatena.hatenablog.jp -apikey xxxxxx -format mt 出力ファイル名
-id はてなID
必須。 はてなのユーザーIDを指定してください。
-blogid ブログID
必須。 記事をダンプするはてなブログのドメインを指定してください。
-apikey APIキー
必須。 ブログの詳細設定に記載されているAtomPubのAPIキーを指定してください。 (注意:§.APIキーの取り扱いについて)
-format 出力フォーマット
オプション。 mtを指定するとMovable Type形式、hatenaを指定するとはてなの日記データ形式で出力します。 省略した場合はAtomフィード形式で出力します。
出力ファイル名
オプション。 ダンプした結果を保存する際のファイル名を指定してください。 省略した場合、-を指定した場合は標準出力に書き出します。
-incat カテゴリ名
オプション、複数指定可。 指定されたカテゴリが設定されている記事のみを抽出してダンプします。 例として「-incat 日記 -incat お知らせ」と指定した場合は、記事に[日記]と[お知らせ]のどちらか一方でも設定されていれば抽出されます。 -incat-excatは同時に指定することはできません。
-excat カテゴリ名
オプション、複数指定可。 指定されたカテゴリが設定されている記事を除外してダンプします。 例として「-excat 日記 -excat お知らせ」と指定した場合は、記事に[日記]と[お知らせ]のどちらか一方でも設定されていれば除外されます。 -incat-excatは同時に指定することはできません。

このツールでは記事ごとの設定や記事に付けられたコメントはダンプされません(はてなブログAtomPubの仕様)。 そのため、このツールで出力された結果を再度インポートしても完全には記事を復元できないため、バックアップ用途に使うことはできません

その他、フォーマット毎の制限事項は以下のとおりです。

§2.2 PostNewEntry.exe

ブログに新規記事を投稿するツールです。 ファイルに書いた内容を投稿したり、他のツールが生成した結果を直接投稿したりすることができます。

使用例
PostNewEntry.exe -id hatena -blogid hatena.hatenablog.jp -apikey xxxxxx -title タイトル -category カテゴリ1 -category カテゴリ2 投稿文...
PostNewEntry.exe -id hatena -blogid hatena.hatenablog.jp -apikey xxxxxx -title タイトル -fromfile post.txt
-id はてなID
必須。 はてなのユーザーIDを指定してください。
-blogid ブログID
必須。 記事を投稿するはてなブログのドメインを指定してください。
-apikey APIキー
必須。 ブログの詳細設定に記載されているAtomPubのAPIキーを指定してください。 (注意:§.APIキーの取り扱いについて)
-title タイトル
オプション。 投稿する記事のタイトルを指定してください。 指定しなかった場合は、空欄のまま投稿します。
-category カテゴリ
オプション、複数指定可。 投稿する記事に設定するカテゴリを指定してください。
-fromfile ファイル
オプション。 指定されたファイルを読み込んでその内容を本文として投稿します。 -を指定すると標準入力から読み込みます。 指定しなかった場合は、コマンドライン引数で指定されているテキストを本文として投稿します。

このツールを使って複数の記事を投稿する場合は1日あたりに投稿できる記事数の制限にご注意ください。 2013-12-03現在では1日あたり100件まで投稿できます。 (1日の記事数と、1記事あたりのコメント数の制限を緩和しました - はてなブログ開発ブログ)

§2.3 ReplaceEntryContent.exe

ブログ内の全記事を検索して内容を一括置換するツールです。 定型文、文末の署名やリンクなどを一括して書き換えたりする目的で使えるほか、記事内の特定の文字列を削除するためにも使うことができます。

使用例
ReplaceContentText.exe -id hatena -blogid hatena.hatenablog.jp -apikey xxxxxx -from "置換したい文字列" -to "置換後の文字列"
ReplaceContentText.exe -id hatena -blogid hatena.hatenablog.jp -apikey xxxxxx -from "置換したい文字列" -to "置換後の文字列" -v -n
ReplaceContentText.exe -id hatena -blogid hatena.hatenablog.jp -apikey xxxxxx -from "削除したい文字列"
ReplaceContentText.exe -id hatena -blogid hatena.hatenablog.jp -apikey xxxxxx -regex -from "置換したい文字列の正規表現" -to "置換後の正規表現"
-id はてなID
必須。 はてなのユーザーIDを指定してください。
-blogid ブログID
必須。 編集するはてなブログのドメインを指定してください。
-apikey APIキー
必須。 ブログの詳細設定に記載されているAtomPubのAPIキーを指定してください。 (注意:§.APIキーの取り扱いについて)
-from 文字列
必須。 置換または削除したい文字列を指定してください。
-to 文字列
オプション。 置換後の文字列を指定してください。 -toの指定を省略した場合は、-fromで指定した文字列を削除(空文字に置換)します。
-regex
オプション。 -fromおよび-toに指定された文字列を正規表現として解釈します。 正規表現を使った置換を行いたい場合はこのオプションを使用してください。 なお、正規表現は複数行モードで処理されます。
-v
オプション。 置換前後の内容を表示します。 置換された結果を確認したい場合に使います。
-n
オプション。 実際に置換は行わずに終了します。 置換される内容の確認など動作テストの際に使います。

置換に際しては-v-nオプションを使って置換される内容を事前に確認することをおすすめします。

-regexオプションを指定した場合は、-toオプションで$1などの正規表現を指定することにより-fromでキャプチャした文字列に置換することができます。 -regexオプションで使用できる正規表現は.NET Frameworkで使用できる正規表現を参照してください。

§2.4 ModifyCategory.exe

ブログ記事のカテゴリを一括変更するツールです。 カテゴリの削除・新規設定・統合に使うことができます。

(2013-12-04) はてなブログにカテゴリ編集機能が追加されました。 (年の瀬にはブログも大掃除! カテゴリーを編集できるようにしたほか、記事を管理しやすくしました - はてなブログ開発ブログ) このツールでも引き続きカテゴリ編集を行うことはできます。 しかし、このツールでは記事のデータを取得・再投稿することでカテゴリの変更を行うため、記事数が多い場合は変更に時間がかかります。 そのため、カテゴリの名前を変更もしくは削除を行いたい場合は、はてなブログのカテゴリ編集機能を使うことをおすすめします。

使用例
ModifyCategory.exe -id hatena -blogid hatena.hatenablog.jp -apikey xxxxxx "旧カテゴリ:新カテゴリ"

コマンドラインオプションは次のとおりです。

-id はてなID
必須。 はてなのユーザーIDを指定してください。
-blogid ブログID
必須。 編集するはてなブログのドメインを指定してください。
-apikey APIキー
必須。 ブログの詳細設定に記載されているAtomPubのAPIキーを指定してください。 (注意:§.APIキーの取り扱いについて)
-n
オプション。 実際に変更は行わず、変更されるカテゴリの一覧を表示して終了します。 変更される記事の確認など動作テストの際に使います。
旧カテゴリ:新カテゴリ
オプション、複数指定可。 全記事の旧カテゴリ新カテゴリに変更します。 このオプションは以下のように指定することができます。
カテゴリのリネーム
"old:new"と指定した場合、カテゴリ[old]を[new]に変更します。 カテゴリのリネームを行う場合は、はてなブログのカテゴリ設定画面の「名前を変更」を利用することをおすすめします。
カテゴリの削除
"old:"と指定することでカテゴリ[old]を削除します。 カテゴリの削除を行う場合は、はてなブログのカテゴリ設定画面の「削除」を利用することをおすすめします。
カテゴリのリネーム (AND条件でのリネーム)
"old1;old2:new1;new2"と指定した場合、カテゴリ[old1]と[old2]の両方が指定されている記事の場合のみそれぞれをカテゴリ[new1]と[new2]に置き換えます。
カテゴリの統合 (AND条件での変更)
"old1;old2:new"と指定した場合、カテゴリ[old1]と[old2]の両方が指定されている記事の場合のみそれらを統合してカテゴリ[new]に変更します。
カテゴリの削除 (AND条件での削除)
"old1;old2:"と指定した場合、カテゴリ[old1]と[old2]の両方が設定されている記事の場合のみそれぞれを削除します。
カテゴリの新規設定
":new"と指定した場合、カテゴリが設定されていない記事にカテゴリ[new]を新規設定します。 ":new1;new2"とすればカテゴリ[new1]と[new2]の二つを新規設定します。
カテゴリの分割
"old:new1;new2"と指定した場合、カテゴリ[old]を削除してカテゴリ[new1]と[new2]を設定します。
カテゴリ指定の構文
"a;b;c:A;B"と指定した場合、カテゴリ[a][b][c]のすべてが設定されている記事のみ、[a][b][c]を[A][B]に変更します。 "a;b;c:A;B" "d:D;E"のように複数の組み合わせを指定することもできます。 ;(セミコロン)はカテゴリの区切り文字、:(コロン)は変更前後のカテゴリグループの区切り文字として解釈されます。 なお、現在のバージョンでは:(コロン)、;(セミコロン)を含むカテゴリ名を指定した場合、正しく解釈することができません
動作例
$ mono ModifyCategory.exe -id hatena -blogid hatena.hatenablog.jp -apikey xxxxxx "テスト:test"
以下のカテゴリを変更します
[テスト] -> [test]

エントリを取得中 ...
以下のエントリのカテゴリが変更されます
2013-09-25T13:07:55+09:00 "test7" [テスト] -> [test]
2013-09-25T13:06:56+09:00 "test5" [新しいカテゴリ][テスト] -> [新しいカテゴリ][test]
2013-09-25T13:05:52+09:00 "テスト4" [テスト][新しいカテゴリ][VB] -> [test][新しいカテゴリ][VB]
2013-09-16T23:20:17+09:00 "test2" [テスト][新しいカテゴリ] -> [test][新しいカテゴリ]
2013-09-16T23:19:38+09:00 "test1" [テスト] -> [test]
変更しますか  (y/N)? y

変更を更新中: 2013-09-25T13:07:55+09:00 "test7" [test] ... 
変更を更新中: 2013-09-25T13:06:56+09:00 "test5" [新しいカテゴリ][test] ... 
変更を更新中: 2013-09-25T13:05:52+09:00 "テスト4" [test][新しいカテゴリ][VB] ... 
変更を更新中: 2013-09-16T23:20:17+09:00 "test2" [test][新しいカテゴリ] ... 
変更を更新中: 2013-09-16T23:19:38+09:00 "test1" [test] ... 
変更が完了しました


$ mono ModifyCategory.exe -id hatena -blogid hatena.hatenablog.jp -apikey xxxxxx "test:" ":新しいカテゴリ"
以下のカテゴリを変更します
[test] -> (削除)
(新規設定) -> [新しいカテゴリ]

エントリを取得中 ...
以下のエントリのカテゴリが変更されます
2013/09/25 13:07:55 +09:00 "test7" [test] -> [新しいカテゴリ]
2013/09/25 13:06:56 +09:00 "test5" [テスト][test] -> [テスト]
2013/09/25 13:05:52 +09:00 "テスト4" [] -> [新しいカテゴリ]
2013/09/16 23:20:17 +09:00 "test2" [test][テスト] -> [テスト]
2013/09/16 23:19:38 +09:00 "test1" [] -> [新しいカテゴリ]
変更しますか  (y/N)? y

変更を更新中: 2013/09/25 13:07:55 +09:00 "test7" [新しいカテゴリ] ... 
変更を更新中: 2013/09/25 13:06:56 +09:00 "test5" [テスト] ... 
変更を更新中: 2013/09/25 13:05:52 +09:00 "テスト4" [新しいカテゴリ] ... 
変更を更新中: 2013/09/16 23:20:17 +09:00 "test2" [テスト] ... 
変更を更新中: 2013/09/16 23:19:38 +09:00 "test1" [新しいカテゴリ] ... 
変更が完了しました

変更を元に戻す機能はありません。 変更対象の記事が多い場合は、カテゴリを1つずつ確認しながら変更する、事前にサブブログを使って動作テストすることをおすすめします。

§3 その他特記事項

  • 本ツールは、はてなブログをより便利に使うための機能を提供することを目的としています。 特にDumpAllEntries.exeは、記事データをいつでも自分の手元にダウンロードできる手段を用意することにより、気軽にはてなブログを使い始め、また安心して使い続けられるようにすることを目的としています。
  • ウェブサービスではなくコマンドラインツールであるため、ユーザー自身とはてなブログ以外の第三者に認証情報や記事の内容を送信することはありません。 プライベートブログを運営している場合などでも安心してお使いいただけます。

§3.1 APIキーの取り扱いについて

APIキーを公開したり他の誰かに知られたりしないようにしてください。 APIキーが第三者に知られた場合、HatenaBlogToolsだけでなくAPIキーを使用する他のツールも実行可能な状態となり、ブログの記事内容の改竄や勝手な新規投稿を許すことにつながります。 誤ってAPIキーを公開してしまった場合には、ブログの詳細設定より古いAPIキーを破棄して新しいAPIキーを発行することができます。

なお、本ツールではAPIキーはコマンド実行時のみに使用し、コマンド終了時には破棄します。 ファイルやレジストリ等にAPIキーをキャッシュすることはありません。

§4 不具合・要望等

不具合・要望等は掲示板へどうぞ。

§5 変更履歴

§5.1 version 1.06 / 2014-09-26

  • atom:publishedおよびatom:updatedに不正な形式の日時が設定されている場合はその値を無視するようにした
  • DumpAllEntries.exe
    • 指定されたカテゴリの記事のみを抽出/除外してダンプできるようにした
    • atom:updatedに不正な形式の日時が設定されていた場合、Movable Type形式の場合はDATEメタデータを出力せず、はてな日記データ形式の場合はunix epochとみなして出力するようにした

§5.2 version 1.05 / 2014-08-23

  • DumpAllEntries.exe
    • Movable Type形式で出力する場合は、はてなブログでエクスポートされるものと同じ内容でBASENAMECONVERT BREAKSを出力するようにした

§5.3 version 1.04 / 2014-06-13

  • ModifyCategory.exe
    • 変更するカテゴリをAND条件で指定できるようにした
    • カテゴリの新規設定ができるようにした

§5.4 version 1.03 / 2014-02-02

  • ReplaceEntryContent.exeを追加

§5.5 version 1.02 / 2013-12-03

  • PostNewEntry.exeを追加

§5.6 version 1.01 / 2013-11-22

  • DumpAllEntries.exe
    • Movable Type形式・はてな日記データ形式でのダンプをサポート

§5.7 version 1.00 / 2013-11-18

  • 初版