Hiroto's diary

プログラミングとか色々

nanaco ギフト ID を完全自動登録するスクリプトを書いた

セブンイレブンで使える電子マネーnanaco はギフト券を福利厚生で安く買える. 自分のバイト先はベネフィット・ステーションを使っていて, ベネフィット・ステーションだと 1000円のギフトが 980円と 2% オフになる.

セブンイレブンでの普通の買い物は nanaco を直接使うよりも QUICPay (nanaco) を使うのが一番なので, 基本的に nanaco の残高は必要ないけど, 収納代行などで使う際には当然残高が必要になる.

bs.benefit-one.co.jp

セブンイレブンで税金などの収納代行や, iTunes Card などの POSA カード類の支払い, 切手の購入などをする際には, 現金だけでなく nanaco も使える (ただしポイントは付与されない) ので, 福利厚生を上手く利用すれば税金や POSA カードのを少し安く支払える. iTunes Card はたまにボーナスもやってるので更に安くなるし, Amazon ギフト券の現金チャージ では Amazon のポイント分も付与されて 4.5% (2.5% + 2%) も安くなる.

www.nanaco-net.jp

で一番の問題がギフト ID の登録が死ぬほど面倒という点. ベネフィット・ステーションでは 1000円のギフト券が 980円で買えて 2% オフだけど, 1000円以外のは全て 1% オフになる. 10000円分必要な時は 2000円を5枚ではなく, 1000円を10枚買う必要がある.

枚数が増えれば増えるほど面倒だし, こんなのを手動でやるのはあまりにもアホすぎるので, ささっと自動登録するのを作ってみた. nanaco ギフトの自動登録ツールは検索すれば出てくるけど, 何故かどれも VB + IE で実装されてて使い物にならないので, TypeScript + Puppeteer で実装した. Puppeteer が動けばどこでも動くので, Chrome 周りをセットアップしたDocker でも動くはず.

github.com

実際の動作. 9 個のギフト ID を登録した.

Gmail で実行すると yarn run start に渡すギフト ID を取り出すブックマークレットも作ったので, 一切の労力を掛けずに登録できる.

ブックマークレットでギフト ID 抽出とコマンド実行だけすれば後はよしなにしてくれるので, ギフト登録が大分楽になった.

Raspberry Pi 4 で録画サーバーを作った (Mirakurun + EPGStation)

ブログは移動したので,最新のを見る場合は下記のリンクを参照。

scrapbox.io


Raspberry Pi 4 で録画サーバーを作った.

f:id:Hiroto-K:20200303210122j:plain
録画サーバー周りの様子, 超コンパクト

使用したハードウェア

Raspberry Pi 4 Model B 4GB

メモリの使用量的には 2GB モデルでも平気だと思うけど, とりあえず 4GB なら間違いない. 2GB モデルの値段が安くなったけども, メモリが余る分には困らないし, 4GB がおすすめ.

www.switch-science.com

Miuzei Raspberry Pi 4 ケース

電源なしのを購入. 1000 円ちょっとで ケース + ファン + ヒートシンクが揃っていい感じ.

PLEX PX-Q1UD

TV チューナー. 4 チャンネル同時視聴・録画可能な方 (PX-Q1UD) を買ったけど, そもそもテレビあんま見ないし 1 チャンネルの (PX-S1UD) でも良かったかも.

NTTCom SCR3310

B-CAS カードの読み取りに使う. Raspberry Pi で動作してる IC カードリーダーは他にもあるし動けば何でもあり.

B-CAS カード

使ってないテレビから拝借.

HDD

ファイルの保存用. 30分アニメを H.264 の mp4 にエンコードして 1GB 前後なので, デカい容量の方がいい.

自分は取りあえず RT-AC68U の Samba で共有している HDD を使ったので準備してない.

使用したソフトウェア

  • Mirakurun
  • EPGStation

github.com

github.com

Raspberry Pi 本体のセットアップ

デスクトップ用途では使わないので, ヘッドレスの Raspbian をインストールした. 別記事に書いた内容をほぼそのまま実行.

hiroto-k.hatenablog.com

チューナーの準備

今回は PLEX PX-Q1UD を使っているので, PLEX のサイトからドライバをダウンロードして Raspberry Pi/lib/firmware/ に入れる. PX-Q1UD の中身は, 1 チャンネルモデルの PX-S1UD が USB ハブで 4 つ繋がってるのと同じ感じなので PX-S1UD のドライバをそのまま使う.

$ wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip
$ unzip PX-S1UD_driver_Ver.1.0.1.zip
$ sudo cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware

再起動して dmesg を実行すると PX-S1UD Digital TV Tuner が 4 つ見えるはず.

$ dmesg | grep PX-S1UD

カードリーダーの準備

ビルドツールや諸々をインストールする.

$ sudo apt install build-essential pcscd libpcsclite-dev libccid pcsc-tools

B-CAS カードを読み取れているかを確認する.

$ sudo pcsc_scan

Japanese Chijou Digital B-CAS Card (pay TV) みたいなのが出てれば OK.

B-CAS デコード用のライブラリをインストール

stz2012/libarib25 をインストールする.

github.com

$ sudo apt install cmake g++
$ git clone https://github.com/stz2012/libarib25
$ cd libarib25
$ cmake .
$ make
$ sudo make install

録画用コマンドをインストール

recdvb を使うのでインストール.

$ sudo apt install automake
$ wget http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.2.tgz
$ tar xvzf recdvb-1.3.2.tgz
$ cd recdvb-1.3.2
$ ./autogen.sh
$ ./configure --enable-b25
$ EXTRA_SID=1 make
$ sudo make install

recdvb --b25 --strip --dev 0 20 10 test.m2ts みたいなのを実行すれば録画できてるはず. (物理チャンネル 20 を 10 秒間録画して test.m2ts に保存.)

Node.js をインストール

Mirakurun と EPGStation が動作するバージョンの Node.js をインストールする. Node.js をインストールする方法は無限にあるけど動けばなんでもいい.

Mirakurun をインストール

Dockerを使ってインストールする方法と直接インストールする方法がある.

自分は最初に作ったときは直接インストールしたけど,後からDockerに移行した. Dockerの使い方さえ分かればDockerでやる方が簡単だと思うのでおすすめ.

Docker を使ってインストール

別の記事に書いたのを参照

hiroto-k.hatenablog.com

直接インストール

Mirakurun のドキュメント に従ってインストールする.

github.com

プロセスマネージャーに pm2 を使うのでインストールする必要がある.

$ sudo npm install pm2 -g
$ sudo npm install mirakurun -g --unsafe --production

チューナーの設定. sudo mirakurun config tuners を実行すると /usr/local/etc/mirakurun/tuners.yml が開かれるので設定する.

$ sudo mirakurun config tuners

YAML をこんな感じに. PX-Q1UD は PX-S1UD が 4 つあるのと同じ感じなので, 4 個書く.

- name: PX-Q1UD-1_1
  types:
    - GR
  command: recdvb --b25 --strip --dev 0 <channel> - -

- name: PX-Q1UD-1_2
  types:
    - GR
  command: recdvb --b25 --strip --dev 1 <channel> - -

- name: PX-Q1UD-1_3
  types:
    - GR
  command: recdvb --b25 --strip --dev 2 <channel> - -

- name: PX-Q1UD-1_4
  types:
    - GR
  command: recdvb --b25 --strip --dev 3 <channel> - -

sudo mirakurun restart で一回再起動する.

次に channels.yml を設定. これは API を使うと自動スキャンでよしなにしてくれるので curlAPI 叩いて待つ.

$ curl -X PUT "http://localhost:40772/api/config/channels/scan"

終わったら sudo mirakurun restart で再起動する.

EPGStation をインストール

EPGStation のセットアップマニュアル に従ってインストールする.

EPGStation のドキュメント, 親切に書いてあるのでちゃんと読んで実行すればいい感じになる.

github.com

FFmpeg をインストール. Raspberry Pi にはビデオ入力用に H.264 のハードウェアエンコーダがあるのでそれを有効化した FFmpeg を使いたいんですけど, 今は手動ビルドしなくても apt から入る FFmpeg で既に有効化されているので, 普通にインストールした.

インストールして ffmpeg -encoders | grep h264 を実行すると h264_omx が見えるはず

$ sudo apt install ffmpeg

EPGStation をインストールして, 設定ファイルをコピーする.

$ git clone https://github.com/l3tnun/EPGStation.git
$ cd EPGStation
$ npm install
$ npm run build

$ cp config/config.sample.json config/config.json
$ cp config/operatorLogConfig.sample.json config/operatorLogConfig.json
$ cp config/serviceLogConfig.sample.json config/serviceLogConfig.json

config.json を書き換える. 設定の内容は全部 https://github.com/l3tnun/EPGStation/blob/master/doc/conf-manual.md に書いてある.

github.com

  • ffmpegffprobe の場所を指定する
    • which ffmpeg で場所を調べて config.jsonffmpegffprobe を書き換える
  • 録画関連のファイルの保存先を Samba に向けておく
    • 初期設定では microSD に保存される
    • recorded, recordedTmp, uploadTempDir, など
  • データベースに SQLite3 を使う場合, regexp.so をビルドする.

Samba をマウントする

今回は録画したファイルを Samba に保存するので, 適当な所にマウントする.

起動時にマウントして欲しいので, /etc/fstab に書き込む.

//192.168.1.1/TV-Rec /mnt/TV-Rec cifs username=username,password=password,rw,vers=2.0,file_mode=0755,dir_mode=0755,iocharset=utf8,defaults 0 0

sudo mount -a を実行すると /mnt/TV-Rec にマウントされる.

また, 起動時にネットワーク周りの設定を待つため, sudo raspi-config を実行して, 3 Boot Options -> B2 Wait for Network at Boot を実行して再起動.

EPGStation を起動する

下のコマンドで EPGStation を起動して, http://192.168.1.xxx:8888 (Raspberry Pi の IP アドレス) にアクセスする.

$ pm2 start dist/server/index.js --name "epgstation"
$ pm2 save

これで基本的な設定は終わり. 後は FFmpeg のオプションなどを調整しないと厳しい.

所感など

FFmpeg 関連はまだ研究中だけど, 少しオプションを調整して 30 分アニメのエンコードを実行したら 40~45 分で終了. まだ改善の余地ありかもしれないけど, 深夜アニメを録画して朝以降に見るくらいにしか使ってないので, 一旦これで運用中.

他に Raspberry Pi で録画鯖を作ろうとしてる人のために Webmin のダッシュボードのスクショを貼っておく. 構成は上の方に書いた使用したハードウェア, ソフトウェアの通り.

f:id:Hiroto-K:20200305234704p:plain
EPGStation で 1 番組録画 + VLC で M2TS 無変換のストリーム 2 個 を実行してる時のダッシュボード

f:id:Hiroto-K:20200306000752p:plain
30 分アニメを 1 本エンコード (ハードウェアエンコーダ使用) + VLC で M2TS 無変換のストリームを 2 個 を実行してる時のダッシュボード

家の中でしか使ってないのでリアルタイム視聴は M2TS 無変換で流してる. ほぼ負荷なしで詰まることなく流せるので, 家の中に限ってはオススメ.


Raspberry Pi 4, 録画するだけなら余裕だし, エンコードH.264 のハードウェアエンコーダを使えば結構行ける.

省電力での動作, ギガビットイーサネット対応, USB 3.0 対応, ハードウェアエンコーダ搭載というスペック, Raspberry Pi Foundation からの「録画鯖に使ってくれ」という熱いメッセージを感じる.

© 2015 hiroxto