Kindle本をブクログに自動登録する
経緯
未読管理のために買った本全部ブクログに登録してるんだけど、できるだけ自動で登録したいよねという話。
ブクログにはISBN/ASINコードで本を一括登録する機能があるのでKindle本の注文メールからASINを抽出して投げてやればいけそうな感じがする。
いけた
Gmailを扱いやすそうだったのでGoogle Apps Scriptを使ってみた。
gistd24699fdfaabec9c971c3037279a753f
導入
「Google Drive上に直接作成する」の方法でGoogle Apps Scriptを作成する。
上記のコードをコピペする。(よさげな公開方法がわからなかった)
「ファイル」→「プロジェクトのプロパティ」→「スクリプトのプロパティ」にブクログのログイン情報を設定する。
「リソース」→「現在のプロジェクトのトリガー」で「AutoRegistToBooklog」を適当な間隔で定期実行させる。
初回はGmailのアクセスとか外部リクエストの認証を求められるので、「実行」→「AutoRegistToBooklog」で動作確認してみてね。
まとめ
- 今のところまとめ買いとかしても特に問題無く動いてる。
- ログは実行毎に上書きされちゃうのでどっかに書き出したい。
色々と参考にさせて頂きました。
2016-10-16 追記
予約注文メールからASINを取得できてなかったので修正
2019-11-23 追記
POST時にRefererが必須になっていたので修正
PostgreSQLのDB名一覧を改行区切りで取得する
シェルスクリプト用にシンプルにDB名のみの一覧が取得したくなったんだけど、案外やり方が見つからなかった。
psql -Atc "select datname from pg_database"
Webラジオ録音中tmuxのステータスバーに通知を表示する
録音中にリブートかける悲しみを繰り返さないために。
rec_status.sh
#!/bin/sh if pgrep rtmpdump > /dev/null ; then echo 'REC●' fi
.tmux.conf(抜粋)
set-option -g status-right '#[fg=red]#(rec_status.sh)#[fg=green] %m月%d日(%a) %H:%M '
よさそう
rtmpdumpが起動してるからって録音してるとは限らないって?
PostgreSQLで無から複数行の任意のデータをSELECTする
テーブルも何も無い所から一行の固定値をSELECT(複数カラムもいける)
postgres=# SELECT 'ゆゆ式' AS title, '三上小又' AS Author; title | author --------+---------- ゆゆ式 | 三上小又 (1 行)
これはよくやる(?)気がするんだけど、何も無いところから複数行SELECTするのってどうやるんだっけと思ってちょっと調べたら…
VALUESを使えば良いのか。
postgres=# VALUES ('野々原'),('日向'),('櫟井'); --必要最小限の VALUES コマンド column1 --------- 野々原 日向 櫟井 (3 行)
こんな感じでVALUESだけでテーブルが返ってくるんだけど敢えてSELECT文に組み込むならFROM句の中で使ってこうなる。
postgres=# SELECT * FROM (VALUES ('野々原'),('日向'),('櫟井')) AS yuyushiki(name); name -------- 野々原 日向 櫟井 (3 行)
VALUES を FROM 句の中で使用する場合には、 AS 句が必須となることに注意しましょう。
テーブルなので、結合もできる。
postgres=# SELECT * FROM (VALUES ('野々原'),('日向'),('櫟井')) AS family(family_name), postgres-# (VALUES ('ゆずこ'),('縁'),('唯')) AS first (first_name); family_name | first_name -------------+------------ 野々原 | ゆずこ 野々原 | 縁 野々原 | 唯 日向 | ゆずこ 日向 | 縁 日向 | 唯 櫟井 | ゆずこ 櫟井 | 縁 櫟井 | 唯 (9 行)
なるほど…なるほど…
nasneの録画番組一覧を取得する
nasneのAPI叩いてHDD残量を確認するとかはよく見かけるんだけど、録画番組一覧を取得できたりしないかなーと思って調べてみた。
手掛かり
PC TV with nasne™とやらがある
パケットキャプチャしながら動かしつつ眺めてたらどうやらこのurlで番組一覧を取得してるらしい事が分かった。
http://{nasneのIP}:64220/recorded/titleListGet?searchCriteria=0&filter=0&startingIndex=0&requestedCount=0&sortCriteria=0&withDescriptionLong=0&withUserData=0
パラメータがいっぱいあるけどとりあえずこまけぇことは気にしない。
取得してみる
curlで取ってきたらjsonが返ってきたので整形したげると良い感じになった。
curl -s 'http://{nasneのIP}:64220/recorded/titleListGet?searchCriteria=0&filter=0&startingIndex=0&requestedCount=0&sortCriteria=0&withDescriptionLong=0&withUserData=0' \ | jq .
なんか化けてる文字があったけど、[新][終][字]みたいな特殊文字のようだったので整形前に該当の文字を置換してあげる。
Unicodeエスケープシーケンス | 対応文字 | 置換後 |
---|---|---|
\ue195 | □の中に終 | [終] |
\ue193 | □の中に新 | [新] |
\ue0fe | □の中に字 | [字] |
ついでに出力項目も絞ろう。
curl -s 'http://{nasneのIP}:64220/recorded/titleListGet?searchCriteria=0&filter=0&startingIndex=0&requestedCount=0&sortCriteria=0&withDescriptionLong=0&withUserData=0' \ | sed -e 's/\\ue195/[\\u7D42]/g' -e 's/\\ue193/[\\u65B0]/g' -e 's/\\ue0fe/[\\u5B57]/g' \ | jq -r '.item[] | { title: .title, description: .description}'
だいぶそれっぽくなったんじゃないでしょうか。
Launchyを使ってShift_JISでWEBを検索する
Windowsで使えるMacのAlfredみたいなコマンドラインランチャーを探してたらLaunchyというのが良さげだった。
Launchy: The Open Source Keystroke Launcher
デフォルトで入ってるWebyというプラグインで検索ランチャーとしても使える。
突然ゆゆ式の画像が必要になることってありますよね。
しかしこのプラグイン渡す文字列がUTF-8から変更できないっぽくて、ごく稀にShift_JISで書かれたサイトを検索したい時に対応できなくて困っていた。
なんとかした
SJISでURLエンコードして検索するスクリプトを叩かせれば良いんじゃね?
これを適当な場所に配置してプラグインのRunnerから実行する。
設定はこんな感じ。
動かしてみる。
powershellのコンソールが一瞬立ち上がるけど同じ使用感で実現できたので良いんじゃないでしょうか
検索ランチャーEurecaを触ってみた
愛用してる検索ランチャーアプリのseeq+がいつの間にかストアから消えてて公式から新アプリへの誘導があった。
デフォルトブラウザが選択できるようになったのは良いな〜と思ったんだけど有料オプションらしい。
課金しないでChromeで開く
カスタムアイテムはseeq+の時と同じように作れるので
googlechrome-x-callback://x-callback-url/open/?x-source=Eureca&x-success=eureca:&url={PercentEncodedURL}&create-new-tab
と検索URLを設定してあげればchromeが起動して新規タブで開いてくれる。
自分が一番使うのがkindleストアの検索で…
googlechrome-x-callback://x-callback-url/open/?x-source=Eureca&x-success=eureca:&url=http%3a%2f%2fwww%2eamazon%2eco%2ejp%2fgp%2faw%2fs%2fref%3dkina_tsf_%3fi%3ddigital%2dtext%26__mk_ja_JP%3d%e3%82%ab%e3%82%bf%e3%82%ab%e3%83%8a%26k%3d_Q_%26x%3d0%26y%3d0&create-new-tab
こんな感じにしてやればchrome上でストアの検索ができる。
他にもイメージ検索、自分のtwilogの検索、yahooリアルタイム検索等を設定している。
他のアプリで開く
目的の操作を行うURLスキームを指定すれば他のアプリを起動して検索を実行することもできる。
親切にもデフォルトで追加できるアイテムに「Amazonアプリで検索」があったので使ってみると…
日本語の検索文字列が化けしてしまった。
アイテムを追加した時に設定された検索URLはこれ
com.amazon.mobile.shopping://www.amazon.co.jp/s/ref=nb_sb_ss_i_0_4?__mk_ja_JP=%83J%83%5E%83J%83i&url=search-alias%3Daps&field-keywords=_Q_
最後の_Q_が検索文字列として渡される値で、UTF-8でエンコードされているはず。 seeq+の時は文字コードを指定できたので同じ要領で試しに_SJIS_に変更して検索してみると…
com.amazon.mobile.shopping://www.amazon.co.jp/s/ref=nb_sb_ss_i_0_4?__mk_ja_JP=%83J%83%5E%83J%83i&url=search-alias%3Daps&field-keywords=_SJIS_
ゴンさんで検索することに成功した。
他にも例えばiTunes Storeで検索するには…
itms://itunes.apple.com/WebObjects/MZStore.woa/wa/search?term=_Q_
これでいけた。
結局
検索アイテム未指定時の挙動を「chromeでgoogle検索」にしたかったんだけど、アプリの設定からデフォルトブラウザを変更する必要があったので課金した。