ubuntu20.04上のEPGStationでNicojCatchを使う
NicojCatchはEDCBの予約からNicoJK用のログを取得するソフトです。EPGStationの予約更新に合わせてEDCBの予約ファイルを作るスクリプトを作りました。
NicojCatchの動作用にwineを使います。スクリプト用にPython3,nkfを使います
手順
・Wine 32bit、python3, nkfを入れます
wine32を入れる
wine32配下のアプリを32bit設定する
winecfgで日本語対応フォントを入れる
.net45を入れる
・NicoJCatchを入れます
<例>
wineの設定で/home/share/がJ:ドライブとなるよう設定します
/home/share/nicoディレクトリを作り、中に以下のディレクトリを作ります
NicojCatch ..本体と設定ファイル格納先
Setting .. EDCB予約ファイル格納先
nicoJK .. nicoJKログ格納先
├── NicojCatch
│ ├── NicojCatch.exe
│ ├── NicojCatch.ini
│ ├── SuperSocket.ClientEngine.dll
│ ├── WebSocket4Net.dll
│ ├── ch_sid.txt
│ ├── jkl_on.txt
│ ├── official_jk.txt
│ └── readme.txt
├── Setting
│ └── Reserve.txt
├── nico.sh
├── nicoJK
├── nicojV2.py
└── nicojZ.py
NicojCatch.iniに下記のように設定します
; EDCBが生成するreserve.txtが存在するパス 例:"C:\Program Files\EpgDataCap_Bon\Setting\"
reservetxt_path = "J:\nico\Setting\"
; NicoJKのログが存在するパス 例:"C:\Program Files\TVTest\Plugins\NicoJK\"
nicojk_path = "J:\nico\nicoJK\"
※ログは別のwindowsPCから見えるようSAMBAを設定します
・予約ファイル作成スクリプトをEPGStationから見えるディレクトリに配置し、EPGStationのconfig.jsonを修正して予約更新と録画完了イベントで呼び出します
"reservationAddedCommand": "/bin/bash /home/share/nico/nico.sh",
"recordedEndCommand": "/bin/bash /home/share/nico/nico.sh",
#!/bin/bash
EDCB=/home/share/nico/Setting
CWD=$(cd $(dirname $0); pwd)
rm -f /tmp/reserve.tmp /tmp/Reserve.txt
python3 "$CWD"/nicojZ.py > /tmp/reserve.tmp
# UTF-8 -> UTF-8 with BOM, CRLF
nkf -w8 -c /tmp/reserve.tmp > /tmp/Reserve.txt
chmod 666 /tmp/Reserve.txt
mv -f /tmp/Reserve.txt "$EDCB"
rm -rf /tmp/reserve.tmp /tmp/Reserve.txt
変数EDCBには予約ファイル格納ディレクトリをセットします。スクリプト中ではpythonスクリプトを呼び出した後改行コードをWindows用に変換しています
pythonスクリプト EPGStation v1用(nicojZ.pyとします)
#!/usr/bin/env/python3
import sys
import json
import datetime
import requests
import codecs
#nicojZ.py
#EPGstationの予約更新時にEDCB形式Reserve.txtを更新する
#局名、TSIDなどはダミー
#######################################
# 予約1件分を変換する関数
#######################################
def mkLine(pg):
stt = pg["startAt"]
edt = pg["endAt"]
dt = datetime.datetime.fromtimestamp(stt//1000)
ed = datetime.datetime.fromtimestamp(edt//1000)
sdate = '%d/%02d/%02d' %(dt.year,dt.month,dt.day)
stime = '%02d:%02d:%02d'%(dt.hour,dt.minute,dt.second)
#開始日時
rval = '%s\t%s\t' %(sdate, stime)
pl = ed - dt
#長さ
rval += '%02d:%02d:%02d\t' %(pl.seconds//3600,(pl.seconds//60)%60,pl.seconds %60)
rval += '%s\t' % pg["name"]
rval += 'dmyChname\t'
#ネットワークID,ダミーTSID,サービスID,イベントID
rval += '%d\t%d\t%d\t%d\t' %(pg["networkId"],1234,pg["serviceId"],pg["eventId"])
#ダミーで予約後bat,録画ルールなど
rval += '1\t1\t1111\t1\t0\tc:\hoge.bat\t0\tstdRule\t'
#開始マージン、終了マージン
rval += '\t0\t0\t\t0\t30\t5\t48\t'
#予約時点の開始日時
rval += '%s\t%s\t' %(sdate, stime)
rval += '0\t0\t0\t0\t0\t0\t'
return rval
#######################
# EPGStationのWebAPI
API_URI = "http://192.168.xxx.xx:8888/api"
headers = {
'accept': 'application/json',
}
response = requests.get(API_URI + '/reserves', headers=headers)
rdata = response.json()
data = rdata["reserves"]
for idx in data:
line = mkLine(idx["program"])
print(line)
EPGStation v2の場合はnicojV2.pyと置き換えてください
#!/usr/bin/env python3
import json
import datetime
import requests
#EPGstationの予約更新時にEDCB形式Reserve.txtを更新する
#EPGstation V2用
#局名、TSIDなどはダミー
#######################################
# 予約1件分を変換する関数
#######################################
def mkLine(pg):
stt = pg["startAt"]
edt = pg["endAt"]
dt = datetime.datetime.fromtimestamp(stt/1000)
ed = datetime.datetime.fromtimestamp(edt/1000)
sdate = '%d/%02d/%02d' %(dt.year,dt.month,dt.day)
stime = '%02d:%02d:%02d'%(dt.hour,dt.minute,dt.second)
#開始日時
rval = '%s\t%s\t' %(sdate, stime)
pl = ed - dt
#長さ
rval += '%02d:%02d:%02d ' %(pl.seconds//3600,(pl.seconds//60)%60,pl.seconds %60)
rval += '%s\t' % pg["name"]
rval += 'dmyChname\t'
#ネットワークID,ダミーTSID,サービスID,イベントID
nid = pg["channelId"] // 100000
sid = pg["channelId"] % 100000
eid = pg["programId"] % 100000
rval += '%d\t%d\t%d\t%d\t' %(nid,1234,sid,eid)
#ダミーで予約後bat,録画ルールなど
rval += '1\t1\t1111\t1\t0\tc:\hoge.bat\t0\tstdRule\t'
#開始マージン、終了マージン
rval += '\t0\t0\t\t0 30 5 48\t'
#予約時点の開始日時
rval += '%s\t%s\t' %(sdate, stime)
rval += '0 0 0 0 0 0 '
return rval
#######################
# EPGStationのWebAPI
API_URI = "http://192.168.xx.xx:8888/api"
# EPGStationの予約取得
headers = {
'accept': 'application/json',
}
#v2
response = requests.get(API_URI + '/reserves?offset=0&type=normal&isHalfWidth=false', headers=headers)
rdata = response.json()
data = rdata["reserves"]
for idx in data:
line = mkLine(idx)
print(line)
・録画PCの起動時にNicoJCatchが起動するようにします
起動時にログインするようにした上で、~/.config/autostart/wine.desktopで自動起動しています
[Desktop Entry]
Type=Application
Exec=wine /home/share/nico/NicojCatch/NicojCatch.exe
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[ja_JP]=NicojCatch
Name=NicojCatch
Comment[ja_JP]=
Comment=
参考
Fushihara’s blog
EDCBのテキストファイルのフォーマットのメモ
https://fushihara.hatenadiary.jp/entry/2018/01/02/034508