はてなブックマークのタグを一括置換するコマンドラインツールを書いた
追記(2020-12-16): 公式で再実装されたようです。
はてなブックマークで自分のブックマークの既存のタグ名を変更した時に一括置換したいことがあります。 以前は公式のタグの一括置換/削除機能の追加がありましたが、ブックマーク一覧ページのリニューアル時に消えてしまったようです。
Firefoxのアドオン版でも同様の機能がありましたが、もう動かなくなっているので、はてなブックマークのタグを一括置換するコマンドラインツールを書きました。
hatenabookmark-rename-tags
hatenabookmark-rename-tagsははてなブックマーク REST APIとsearch.dataを使ってタグの一括置換を行います。はてなブックマークには自分の(privateを含めた)ブックマーク一覧を取得する方法はないため、このコマンドラインツールはpublicなブックマークのみを扱います。
また、REST APIを叩くためにOAuth認証をしたアクセストークンが必要なので、リポジトリにはアクセストークンを取得するElectronアプリもおいています。
使い方
次のステップでタグのリネームを行います。
- OAuth認証をしてアクセストークンを取得
-
hatenabookmark-rename-tags
でリネーム
1.OAuth認証をしてアクセストークンを取得
リポジトリをgit clone
して中に含まれているElectronアプリを実行します。
ロックファイルをおいているのでyarn推奨ですが、npmでも多分通ると思います。
git clone https://github.com/azu/hatenabookmark-rename-tags
cd hatenabookmark-rename-tags
yarn install
yarn run get-token
yarn run get-token
を実行するとElectronアプリが起動するので、リネームしたいはてなアカウントでログインすると次のアクセストークンが取得できます。
この2つのアクセストークンがリネームスクリプトで必要なので、コピーしておいてください。
HATENA_ACCESS_TOKEN
HATENA_ACCESS_SECRET
2. hatenabookmark-rename-tags
でリネーム
アクセストークンが取得できたら、 hatenabookmark-rename-tags
をインストールします。
hatenabookmark-rename-tags
は環境変数で先ほどのアクセストークンを渡して実行します。
(コマンドライン引数では渡せるようにまだしてないので、必要な人はPRお願いします。)
npm install -g hatenabookmark-rename-tags
HATENA_ACCESS_TOKEN="___" HATENA_ACCESS_SECRET="____" hatenabookmark-rename-tags [option]
hatenabookmark-rename-tags -h
でヘルプがでると思いますが、使い方は次の通りです。
CLI Usage:
Usage
$ hatenabookmark-rename-tags --user <user> --before <tag> --after <tag>
Options
--user Hatena User Name
--before a Tag name that is old name
--after a Tag name that is new name
--reload prune cache data and fetch your bookmarks if this flag is specified
Examples
$ HATENA_ACCESS_TOKEN="___" HATENA_ACCESS_SECRET="____" hatenabookmark-rename-tags --user test --before "js" --after "JavaScript"
# ignore cache data
$ HATENA_ACCESS_TOKEN="___" HATENA_ACCESS_SECRET="____" hatenabookmark-rename-tags --reload --user test --before "before" --after "after"
たとえば、js
タグをJavaScript
に一括置換したい場合は、次のように実行します。
アクセストークンとユーザー名は自分のものにしてください。
HATENA_ACCESS_TOKEN="___" HATENA_ACCESS_SECRET="____" hatenabookmark-rename-tags --user test --before "js" --after "JavaScript"
hatenabookmark-rename-tags
はsearch.dataの内容を.cache/search.data
にキャッシュしています。
そのため、実行以降に登録した新しくブックマークなども置換したい場合は--reload
オプションを使ってキャッシュを更新してください。(search.dataの取得は重たいので負荷防止のためです。)
Develop Notes
ElectronアプリでOAuthの部分は以前書いたelectron-authentication-hatenaを使っています。(GitHubやTwitterみたいに自分向けのアクセストークンを簡単に発行する方法はないのかな?)
はてなブックマーク REST APIの実行にはbouzuya/node-hatena-bookmark-apiを使っています。
おそらくはてなブックマークのサーバ側の問題だと思っていますが、REST APIでtags
に日本語のタグがあると401 Unauthorized
で登録/更新に失敗する気がしています。
んーなんではてなブックマーク更新すると401が変えるんだろ?
— azu (@azu_re) February 4, 2019
なんか特定のものだけ失敗する感じだけど、いまいち共通点がわからない…
API叩くのはこれ使ってるけど、サーバのレスポンスがおかしいのかな。https://t.co/pwArvRy0Au
1/4 ぐらいが更新に失敗する。
寝るhttps://t.co/yXgYOOxYzm pic.twitter.com/wVUxy1oIhB
2019-03-16追記: はてなブックマークAPI側で修正されました
これを回避するために、tags
クエリではなくコメントとしてタグを書くようにしています。
[tag][タグ]comment
のようなコメント形式でタグを書けば、日本語のタグも登録できました。
できたー。
— azu (@azu_re) February 5, 2019
tagクエリじゃなくて
[tag]comment
形式のメッセージならタグに日本語が含まれてもOKhttps://t.co/wy9fM8ITJy
はてなブックマークの更新API tagクエリバグってそう。
エンコード周り
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。