EDCBNotifier
EDCB から LINE・Discord・Twitter に通知を送るツール
Install / Use
/learn @tsukumijima/EDCBNotifierREADME
<img alt="Logo" src="EDCBNotifier/EDCBNotifier.png" height="26"> EDCBNotifier

EDCB から LINE・Discord・Twitter に通知を送れるツールです。
About・Feature
- LINE (LINE Notify)
- Discord (Discord Webhook)
- Twitter (ツイート)
- Twitter (ダイレクトメッセージ)
に、EDCB からのさまざまな通知を送れるツールです。
xtne6f 版 EDCB のバッチファイル実行機能を利用しているため、xtne6f 版、または tkntrec 版 などの xtne6f 版をフォークした EDCB が必要です。
EDCB Material WebUI が使える EDCB をお使いであれば、すぐに使えると思います。
本家の EDCB に実装されていた Twitter 機能 (Twitter.dll) の代替としても利用できます。
たとえば、EDCB で録画が開始されたときに番組名を添えて LINE に通知したり、EPG 自動予約で追加された予約を通知で確認することができます。
私自身何年も使っていますが、予約や録画状況を通知で確認できるのは地味にかなり便利です。
LINE へは LINE Notify を使い通知します。
LINE Notify は、アプリケーションからの通知を、指定したユーザーやグループに送れるサービスです。
通知メッセージは LINE Notify の公式アカウントか、任意のグループ LINE で受信できます。一度使ってみたほうが理解しやすいかも。
Discord へは Discord Webhook を使い通知します。
管理者権限を持つサーバーであれば、各テキストチャンネルの設定から簡単に Webhook を設定できます。
自分用のサーバーを作成して、そこに Webhook を設定してみるのが一番手っ取り早いです。
Twitter へはツイートでの通知に加え、ダイレクトメッセージでの通知も可能です。
ダイレクトメッセージは自分宛てに送ることも、ダイレクトメッセージを送信できる他のアカウントに送ることもできます。
たとえば、録画通知用の Twitter アカウントとメインのアカウントと相互フォローにして、録画通知用のアカウントからメインアカウント宛てに通知を送ることもできます。
通知できるイベントは、
- 予約を追加したとき (PostAddReserve.bat が実行されたとき)
- 予約を変更したとき (PostChgReserve.bat が実行されたとき)
- 録画を開始したとき (PostRecStart.bat が実行されたとき)
- 録画を終了したとき (PostRecEnd.bat が実行されたとき)
- 更新通知が送られたとき (PostNotify.bat が実行されたとき)
の 5 つです。
それぞれのイベントは、個別に通知するかどうかを設定できます。
更新通知が頻繁に送られてきてうるさい、といったときに [更新通知が送られたとき] のイベントだけ通知しないことも可能です。
通知するメッセージは 5 つのイベントごとに自由に変更できます。
EDCB から取得したマクロに加えて、チャンネル名から取得したハッシュタグや更新通知タイプ、チャンネル名や番組名の英数字の半角変換など、独自のマクロも用意しています。
デフォルトのメッセージでも十分に使えますが、必要に応じてメッセージをカスタムしてみても良いでしょう。
Migration
EDCBNotifier V2 では、V1 と比較して大幅な改善や変更が行われています。おもな変更点は以下のとおりです。
いくつか互換性のない変更がありますが、いずれもすぐ移行できる程度のものです。
- Discord に通知できるようになりました!
- Discord Webhook の機能を使い、EDCB からのさまざまな通知を Discord にも送れるようになりました!
- 管理者権限を持つサーバーであれば、各テキストチャンネルの設定から簡単に Webhook を設定できます。自分用の Discord サーバーに通知させるようにしてみると便利かもしれません。
- LINE や Twitter への通知と同時に Discord に送信することもできます。
- EDCBNotifier を実行ファイルにまとめたことで、Python や依存パッケージのインストールが不要になりました!
- Nuitka という Python プログラムを実行ファイル (.exe) にまとめるツールを使い、EDCBNotifier.exe 単独で通知できるようになりました!
- これで開発時以外は Python の実行環境や依存パッケージのインストールが不要になり、より導入しやすくなりました。
- ファイルを配置した後、EpgTimer Service を再起動して設定ファイルを編集するだけで導入できます。
- ただし、Nuitka 側の問題なのか、残念ながら Windows 7 では EDCBNotifier.exe が正常に動作しません。
- もし Windows 7 で使いたい方は V1 以前と同じように Python 3.8 の実行環境をインストールし、バッチファイルを適宜書き替える必要があります。Python 3.9 以降は Windows 7 では動作しません。
- 三大都市圏すべてのチャンネルのハッシュタグに対応しました。
- チャンネル名のハッシュタグのマクロ (
$ServiceNameHashTag$) を三大都市圏すべてのチャンネルで使えるようにしました。 - ほかに対応してほしいチャンネルがあれば、Issue か Pull Request をいただければ実装します。
- チャンネル名のハッシュタグは Utils.getServiceNameHashtag() で定義されています。
- チャンネル名のハッシュタグのマクロ (
- 一部のマクロの名前を変更しました。
$HashTag$を$ServiceNameHashTag$に、$HashTagTitle$を$TitleHashTag$に変更し、他のマクロとの表現の一貫性を高めました。- 通知メッセージで上記のマクロをお使いの場合は、マクロの置き換えが必要になります。
- 設定ファイルを config.py から EDCBNotifier.yaml に移行しました。
- Python のソースコードで設定内容を記述するのは汎用性が高いとはいえず、記法も比較的複雑で、初心者の方が記法を間違えてエラーになってしまう可能性があったためです。
- EDCBNotifier の exe 化にあたり、Python コードを exe 化するとほかの .py ファイルを読み込めないという制限があったという事情もあります。
- YAML は記法のゆれに寛容なほか、JSON ライクに書くこともできて書きやすいため採用しました。
- これにともない、設定ファイルの書き直しが必要になります。
- 設定できる内容は V1 とほぼ同じなので、そこまで大変な作業ではないはずです。
- Python のソースコードで設定内容を記述するのは汎用性が高いとはいえず、記法も比較的複雑で、初心者の方が記法を間違えてエラーになってしまう可能性があったためです。
開発者向け資料
開発時には Python 3.9 と pipenv が必要になりました。
コードを編集される際は、事前に以下のコマンドを実行し、pipenv の仮想環境を作成しておく必要があります。
cd C:\DTV\EDCB\EDCBNotifier
pip install pipenv
$env:PIPENV_VENV_IN_PROJECT = "true"
pipenv sync
EDCBNotifier.py の実行をテストする際は、pipenv shell で pipenv の仮想環境に入った後、python EDCBNotifier.py PostAddReserve のように実行してください。
PostAddReserve の部分はバッチファイルの名前です。直接実行した場合は EDCB から環境変数で渡されるイベントの情報が取得できないため、実行時刻以外の情報がすべて -- になった状態で通知されます。
EDCBNotifier.exe をビルドする場合は、pipenv run build を実行してください。
ビルドには数分~十数分ほど時間がかかります。また、初回は MinGW64 などのダウンロードを求められることがあります。
Setup
録画後実行 bat に対応する EDCB をお使いであればセットアップは簡単です。
ファイルを配置して EpgTimerSrv を再起動し、最後に設定ファイルを各自の環境に合わせて編集すれば、あとは放置しておくだけで EDCB からの通知が届きます。
1. ダウンロード・配置
こちら のリンクから、EDCBNotifier.zip をダウンロードします。
ダウンロードできたら解凍し、中に入っているすべてのファイルを EDCB 本体 (EpgTimerSrv.exe) のあるフォルダに配置します。
EpgTimerSrv.exe のあるフォルダに EDCBNotifier フォルダと PostAddReserve.bat・PostChgReserve.bat・PostRecStart.bat・PostRecEnd.bat・PostNotify.bat が配置されていれば OK です。
Warning
Windows Defender などのウイルス対策ソフトにより、EDCBNotifier.exe がウイルスやマルウェアとしてブロックされてしまう事例が報告されています。
一般に Python プログラムを exe 化した実行ファイルは、残念ながらウイルスやマルウェアとして誤検知されてしまうことが多いです。
EDCBNotifier では、特に誤検知率の高い PyInstaller の代わりに Nuitka というツールで実行ファイル (.exe) にコンパイルしています。ただ、Nuitka でも完全に誤検知されなくなる訳ではありません。
適宜、ウイルス対策ソフトの保護対象から除外するなどの対応をお願いします。
2. 設定ファイルの作成
EDCB 内に配置した EDCBNotifier フォルダ内の EDCBNotifier.example.yaml は、設定ファイルのひな形になるファイルです。
EDCBNotifier.example.yaml を EDCBNotifier.yaml にコピーします。 事前にコピーしておかないと、設定が読み込めず動きません。
EDCBNotifier.example.yaml 自体をリネームしてもかまいませんが、設定をミスったときのために EDCBNotifier.example.yaml は残しておくことを推奨します。
3. EpgTimerSrv の再起動
バッチファイルの追加を EDCB に反映するためには、EpgTimerSrv (EpgTimer Service) の再起動が必要です。
事前に、EpgTimer.exe を終了させておいてください。また、録画中や録画が近づいているときは絶対に作業を行わないでください。
EpgTimerSrv をタスクトレイに入れて運用している場合は、EpgTimerSrv を一度終了したあと、もう一度起動させてください。
EpgTimerSrv を Windows サービス として運用している場合は、EpgTimer Service の再起動が必要です。
[サービス] アプリから EpgTimer Service を探して、サービスを再起動させてください。
コマンドプロンプトや PowerShell から net stop "EpgTimer Service" && net start "EpgTimer Service" と実行することでも可能です。
[サービス] アプリは Windows の検索窓に「サービス」と入力すると出てきます。それぞれの項目を右クリックすると各サービスの起動・停止・再起動ができます。
最悪、PC 自体を再起動してしまえば確実に反映されます。どうしても分からない場合は PC を再起動してみてください。
これでインストールは完了です!
Usage
EDCBNotifier の設定は、EDCBNotifier フォルダ内の EDCBNotifier.yaml を編集することで行えます。
- LINE への通知は LINE Notify のアクセストークンが必要です。
- アクセストークンは LINE のアカウントがあればすぐに取得できます。
- Discord への通知には Discord Webhook の URL が必要です。
- テキストチャンネルの編集権限に加え、Webhook の作成権限があるサーバーであれば通知できます。
- EDCBNotifier の通知専用のテキストチャンネルを作っておくと良いでしょう。
- Twitter への通知には Twitter API アプリとのアプリ連携が必要です。
- V1 では Twitter の開発者登録など手順が煩雑でしたが、デフォルトで設定されているキーを使いアプリ連携をすれば、以前よりも大幅に手順を減らせるようになりました。
- 今まで通り、各自で用意した Twitter API アプリを使って通知を送ることも可能です。
1. 設定
EDCBNotifier.yaml を編集します。<u>文字コードは UTF-8 (BOM なし)・改行コードは LF で保存してください。</u>
できれば VSCode などのシンタックスハイライトのあるエディタでの編集を推奨します。
EDCBNotifier.yaml のコメントにも説明や記述例が記載されていますので、そちらも参考にしてみてください。
通知タイプ (notify_type) では、LINE (LINE Notify)・Discord (Discord Webhook)・Tweet (ツイート)・DirectMessage (ダイレクトメッセージ) から通知先を選択します。
デフォルト … 全てに通知する (['LINE', 'Discord', 'Tweet', 'DirectMessage'])
通知を行うイベント (notify_event) では、通知するイベントのオン・オフを設定できます。
ここで設定したイベントだけが通知されます。設定しなかったイベントは通知されません。
デフォルト … 全てオン (['PostAddReserve', 'PostChgReserve', 'PostRecStart', 'PostRecEnd', 'PostNotify'])
通知時に同時に送信する画像 (notify_image) では、通知時に同時に送信する画像を指定できます。
null に設定した場合は画像を送信しません。画像のファイルサイズが大きすぎると送れない場合があるので注意してください。Discord は 8MB までです。
デフォルト … 画像を送信しない (null)
番組名に対応するハッシュタグ (title_hashtag) では、$TitleHashTag$ マクロの値に利用する、番組名に対応するハッシュタグを定義します。
ここで定義された番組名が $TitleHankaku$ マクロ (半角の番組名) と部分一致した場合にハッシュタグが利用されます。
ログをファイルに保存するかどうか (logging) では、実行したときのログをファイルに保存するかどうかを設定します。
true に設定した場合は、ログを EDCBNotifier.yaml と同じフォルダの EDCBNotifier.log に保存します。前回のログは上書きされます。
false に設定した場合は、ログを保存せず、代わりに標準出力 (コンソール) に出力します。
うまく通知されないときは、この設定を true にしてログを確認してみてください。
デフォルト … ログをファイルに保存する (true)
2. 通知するメッセージを編集する
通知イベントごとにメッセージを編集できます。
通知するメッセージの設定は EDCBNotifier.yaml の [メッセージ] セクションにあります。
EDCB/Document/Readme_EpgTimer.txt と EDCB/Document/Readme_Mod.txt に記載されている EDCB のマクロが使えます。
マクロは $$ で囲んでください (ex: $ServiceName$)。また、配列の要素ごとに改行されます。
PostRecEnd の $Drops$ / $Scrambles$ / $Result$ など、特定のイベントでのみ利用できるマクロもあります。
また、独自にいくつかのマクロを追加しています。
$NotifyName$…$NotifyID$から取得した更新通知タイプ (1: EPGデータ更新, 2: 予約情報更新, 3: 録画結果情報更新)$ServiceNameHashTag$… チャンネル名から取得したハッシュタグ (ハッシュタグは Utils.getServiceNameHashtag() で定義)$TitleHashTag$… 番組名から取得したハッシュタグ(ハッシュタグは上記の title_hashtag で定義)$ServiceNameHankaku$…$ServiceName$(チャンネル名) の英数字を半角に置換した値$TitleHankaku$…$Title$(番組名) の英数字を半角に置換した値$Title2Hankaku$…$Title2$(番組名から [] で囲まれている部分を削除したもの) の英数字を半角に置換した値$TimeMM$… 実行時刻の2桁固定の月 (ex: 01 (月)) ・$TimeM$… 実行時刻の月 (ex: 1 (月))$TimeDD$… 実行時刻の2桁固定の日 (ex: 03 (日)) ・$TimeD$… 実行時刻の日 (ex: 3 (日))$TimeW$… 実行時刻の曜日 (ex: 火 (曜日))$TimeHH$… 実行時刻の2桁固定の時 (24時間) (ex: 09 (時))$TimeH$… 実行時刻の日 (ex: 9 (時))$TimeII$… 実行時刻の2桁固定の分 (ex: 05 (分)) ・$TimeI$… 実行時刻の分 (ex: 5 (分))$TimeSS$… 実行時刻の2桁固定の秒 (ex: 09 (秒)) ・$TimeS$… 実行時刻の分 (ex: 9 (秒))
メッセージは配列形式で記述されています。改行を入れる場合は新しい行に周囲の行と同じフォーマットで記述してください。
文字列はシングルクオート (') で囲うことを推奨しますが、なくても動くとは思います。
マクロが存在しないか、マクロの値が空のときは値が -- になります。バッチファイルを直接実行した場合は EDCB から渡される環境変数が取得できないため、全てのマクロの値が -- になります。
デフォルトで設定されているメッセージのように、絵文字も一緒に送信できます。
ただし、新しい絵文字だと一部のスマホでは表示できないことがあるため注意してください。このほか、絵文字によっては Discord などの背景色と判別しづらい色で表示されてしまう事もあります。
3. LINE Notify
LINE Notify へ通知しない場合は必要ありませんが、さほど手間もかかりませんし、一緒にやっておくことをおすすめします。
LINE Notify にアクセスし、右上の [ログイン] から LINE へログインします。いつも使っているアカウントで構いません。
ログインできたら、右上のメニューから [マイページ] に移動します。
