tateren’s diary

何か書きたくなった時に使う

Kindle本をブクログに自動登録する

経緯

booklog.jp

未読管理のために買った本全部ブクログに登録してるんだけど、できるだけ自動で登録したいよねという話。

ブクログにはISBN/ASINコードで本を一括登録する機能があるのでKindle本の注文メールからASINを抽出して投げてやればいけそうな感じがする。

いけた

Gmailを扱いやすそうだったのでGoogle Apps Scriptを使ってみた。

gistd24699fdfaabec9c971c3037279a753f

導入

wp.tech-style.info

Google Drive上に直接作成する」の方法でGoogle Apps Scriptを作成する。

上記のコードをコピペする。(よさげな公開方法がわからなかった)

「ファイル」→「プロジェクトのプロパティ」→「スクリプトのプロパティ」にブクログのログイン情報を設定する。

f:id:tateren:20161003023301p:plain

「リソース」→「現在のプロジェクトのトリガー」で「AutoRegistToBooklog」を適当な間隔で定期実行させる。

f:id:tateren:20161003023553p:plain

初回はGmailのアクセスとか外部リクエストの認証を求められるので、「実行」→「AutoRegistToBooklog」で動作確認してみてね。

まとめ

  • 今のところまとめ買いとかしても特に問題無く動いてる。
  • ログは実行毎に上書きされちゃうのでどっかに書き出したい。

色々と参考にさせて頂きました。

github.com

2016-10-16 追記

予約注文メールからASINを取得できてなかったので修正

2019-11-23 追記

POST時にRefererが必須になっていたので修正

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 '

f:id:tateren:20160607223951p:plain

f:id:tateren:20160607224000p:plain

よさそう

rtmpdumpが起動してるからって録音してるとは限らないって?

f:id:tateren:20160607225932j:plain

PostgreSQLで無から複数行の任意のデータをSELECTする

テーブルも何も無い所から一行の固定値をSELECT(複数カラムもいける)

postgres=# SELECT 'ゆゆ式' AS title, '三上小又' AS Author;
 title  |  author  
--------+----------
 ゆゆ式 | 三上小又
(1 行)

これはよくやる(?)気がするんだけど、何も無いところから複数行SELECTするのってどうやるんだっけと思ってちょっと調べたら…

VALUES

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™とやらがある

www.sony.jp

パケットキャプチャしながら動かしつつ眺めてたらどうやらこの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 .

f:id:tateren:20160303003140p:plain

なんか化けてる文字があったけど、[新][終][字]みたいな特殊文字のようだったので整形前に該当の文字を置換してあげる。

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}'

f:id:tateren:20160303004720p:plain

だいぶそれっぽくなったんじゃないでしょうか。

Launchyを使ってShift_JISでWEBを検索する

Windowsで使えるMacのAlfredみたいなコマンドラインランチャーを探してたらLaunchyというのが良さげだった。

Launchy: The Open Source Keystroke Launcher

デフォルトで入ってるWebyというプラグインで検索ランチャーとしても使える。

f:id:tateren:20160116095158g:plain

突然ゆゆ式の画像が必要になることってありますよね。

しかしこのプラグイン渡す文字列がUTF-8から変更できないっぽくて、ごく稀にShift_JISで書かれたサイトを検索したい時に対応できなくて困っていた。

なんとかした

SJISでURLエンコードして検索するスクリプトを叩かせれば良いんじゃね?

gist5bb5a1649aa4c95fd9ae

これを適当な場所に配置してプラグインのRunnerから実行する。

設定はこんな感じ。

f:id:tateren:20160116110639p:plain

動かしてみる。

f:id:tateren:20160116104654g:plain

powershellのコンソールが一瞬立ち上がるけど同じ使用感で実現できたので良いんじゃないでしょうか

検索ランチャーEurecaを触ってみた

愛用してる検索ランチャーアプリのseeq+がいつの間にかストアから消えてて公式から新アプリへの誘導があった。

Eureca - 超時短!検索ポータルアプリ

Eureca - 超時短!検索ポータルアプリ

  • VARY LLC.
  • ユーティリティ
  • 無料

vary-llc.com

デフォルトブラウザが選択できるようになったのは良いな〜と思ったんだけど有料オプションらしい。

課金しないで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アプリで検索」があったので使ってみると…

f:id:tateren:20151219190758j:plain

日本語の検索文字列が化けしてしまった。

アイテムを追加した時に設定された検索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_

f:id:tateren:20151219190904j:plain

ゴンさんで検索することに成功した。

他にも例えばiTunes Storeで検索するには…

itms://itunes.apple.com/WebObjects/MZStore.woa/wa/search?term=_Q_

これでいけた。

結局

検索アイテム未指定時の挙動を「chromegoogle検索」にしたかったんだけど、アプリの設定からデフォルトブラウザを変更する必要があったので課金した。