3.xtne6f EDCB-Work-Plus-sでTwitter連携編 - TS抜き環境構築

DTV記事一覧
1.予備知識、ハードウェア、ドライバ編
TS抜きとは何か、何が必要なのか、共通の項目。
2'.TVTest0.7.23+EDCB人柱版10.66編(非対応)
・(非推奨)取り敢えず視聴、録画が出来る環境を構築する。
2.TVTest0.9.0+xtne6f版EDCB編
・(推奨)安定して視聴、録画が出来る環境を構築する。
2018年4月~BSトラポン移動によるTVTest、EDCBのバイナリ変更点
3.xtne6f EDCB-Work-Plus-sでTwitter連携編
Twitter連携はRubyTwitter API Gemを使用する。
4.FFmpeg自動エンコード+Googleフォトに無限保存編
・バッチ又はPowerShellからFFmpegで綺麗にエンコードし、Backup and Syncでアップロードする。
・音ズレさせない正しい処理や、ファイルの自動削除機能等も備えているため、完全放置が可能。
更新情報
2017/4
twitter api gemをインスコする行程を忘れてた
Twitter連携でSSL証明書が無くツイートできないのを修正
2017/5
・曜日を追加
・~~斧に自動ツイートスクリプトと自動エンコバッチをうp~~
2017/6
・#nhkみたいにハッシュタグを自動で付けられるようになった
2017/9
ハッシュタグ自動選択が上手く動作していなかったので修正
2017/10
・Ruby2.4でRubyInstaller2に変わったため手順を追記
2018/2
・視聴予約時は実行しない
2018/3
・ツイート時にテキストファイルではなく環境変数を渡すようにした
・EpgTimerSrvをサービス登録しても正常に動作する為に環境変数Pathの使用を廃止
ハッシュタグ判別機能が要らない場合の説明が間違っていたので修正
2018/5
・devkitが必要なことを追記

Twitterのアプリケーション登録

1.予め通知用のTwitterアカウントを作っておく。
2.↑と本垢等でFFになって、スマホで↑のプロフィールから投稿通知を受け取るように設定。
3.https://dev.twitter.com/apps でCreate New Appからアプリケーション登録を行う。
※アカウントに電話番号が登録され認証されている必要があります。
Nameはtwitterクライアント内でクライアント名として表示されるので中二病患者はお気をつけください。
Website、Callback URLは今回使わない情報なのでhttp://example.com/とかでも構わない。
Access levelはRead and writeに設定。

Ruby環境を構築する

1.https://rubyinstaller.org/downloads/ のRubyInstallersからインストーラーをDL。
~2.3.xはWITHOUT DEVKITとDEVELOPMENT KIT (OLD)から。Ruby 2.3.3 (x64)で動作確認。
2.4~はWITH DEVKITから。Ruby+Devkit 2.5.1-1 (x64)で動作を確認。
2.インストーラ実行。「Rubyの実行ファイルへ環境変数PATHを設定する」「.rbと.rbwファイルをRubyに関連づける」(英語かもしれない)にチェック。
3.インストールされたかruby -vで確認。rubyのバージョンみたいなのが出てくればおk
※ruby2.4~
4'.そのままRubyInstaller2が起動するので、「1」「2」「3」の順に入力する。

   1 - MSYS2 base installation
   2 - MSYS2 system update
   3 - MSYS2 and MINGW development toolchain
Which components shall be installed? If unsure press ENTER [1,2,3] 1
…
Which components shall be installed? If unsure press ENTER [] 2
…
Which components shall be installed? If unsure press ENTER [] 3
…
Which components shall be installed? If unsure press ENTER [] (Enter)

ruby~2.3.x
4.https://rubyinstaller.org/downloads/ のDEVELOPMENT KITから適切なDevelopmentKitをDL。
5.↑を実行.C:\devkit\に展開すること。
6.以下のコマンドを実行してインストール。INFOっぽいのがちょろっと出てくればおk。

cd C:\devkit\  
ruby dk.rb init  
ruby dk.rb install  

ツイート用Rubyスクリプト

1.gem install twitterTwitter API gemをインストールする。devkit必須。
2.https://curl.haxx.se/ca/cacert.pem からSSL証明書をDL。cacert.pemという名前を付けてEpgTimerSrvと同じディレクトリに保存。
3.テキストエディタで以下コードを記述。https://dev.twitter.com/apps のKeys and Access Tokensからコピペしtweet.rb(拡張子.rb)でEpgTimerSrvと同じディレクトリに保存。

#180313
require 'twitter'

#キーとかトークンとか
client = Twitter::REST::Client.new do |config|
  config.consumer_key        = "Keys and Access Tokensからコピペ"
  config.consumer_secret     = "Keys and Access Tokensからコピペ"
  config.access_token        = "Keys and Access Tokensからコピペ"
  config.access_token_secret = "Keys and Access Tokensからコピペ"
end

#ツイート
client.update(ENV['TWEET_CONTENT'].encode("utf-8"))

ツイート用バッチ

ファイル名 好みの名前.bat PostHoge.bat/ps1
実行条件 個別に録画後実行batにパスを設定
※自動予約登録で既に予約一覧にあるものにもバッチのパスを適用させるには
1.自動予約登録ウィンドウ内の予約を一旦削除
2.batのパスを通す
3."自動予約登録条件を変更"を押下して再度予約一覧に追加
EpgTimerSrv.exeと同じディレクトリに設置
実行タイミング 録画終了時 PostAddReserve:予約追加
PostChgReserve:予約変更
PostRecStart:録画開始
PostRecEnd:録画終了
PostNotify:通知cf.
途中から録画、録画中にキャンセルした場合 EpgTimerSrv.iniのSETにErrEndBatRun=1を追加すれば実行cf. 実行
番組によって処理を変えるには 別のバッチを録画後実行bat登録する バッチ内の処理で条件分岐する
拡張命令cf. 動作内容
_EDCBX_BATMARGIN_={bat実行条件(分)} このマージン以上録画予定がないときに実行(デフォルト:0)
_EDCBX_HIDE_ ウィンドウ非表示
_EDCBX_NORMAL_ ウィンドウを最小化しない
_EDCBX_DIRECT_ マクロを$置換$ではなく%環境変数%で渡して直接実行する
PowerShellスクリプトでは常に有効
・EpgTimerSrv.exeのあるフォルダに"EpgTimer_Bon_RecEnd.bat"を作らない
・EpgTimer.exeを経由する間接実行はしない
・カレントディレクトリはそのバッチのあるフォルダ
_EDCBX_FORMATTIME_ 日時についてのマクロ($SDYY$など)をISO8601形式の$StartTime$と$DurationSecond$に単純化する
PowerShellスクリプトでは常に有効

テキストエディタで以下スクリプトをコピーし、EpgTimerSrvと同じディレクトリにPostRecStart.batで保存。
環境変数設定でパスを自分の環境に合わせること。rubyのパスはユーザ環境変数にあると思うので、echo %path%とかで調べる(EpgTimerSrvをサービス登録して実行する環境に対応)。
set tweet_content=に続くEpgTimerから受け渡されるマクロについてはcf.
rem _EDCBX_DIRECT_$->%rem _EDCBX_HIDE_で非表示(指定しなければ最小化)。確認するために止まってほしい場合はexitの一つ前の行にpause

ハッシュタグ自動判別無し

rem 180316
rem _EDCBX_DIRECT_
rem _EDCBX_HIDE_
rem 視聴予約なら終了
if "%RecMode%" == "4" (
    goto :eof
)

rem ====================環境変数設定====================
rem ruby.exeのパス
set "ruby_path=C:\Ruby24-x64\bin\ruby.exe"
rem tweet.rbのパス
set "tweet_rb_path=C:\DTV\EDCB\tweet.rb"
rem SSL証明書のパス
set "ssl_cert_file=C:\DTV\EDCB\cacert.pem"

rem ====================ツイート====================
set "tweet_content=%SDYY%/%SDM%/%SDD%(%SDW%) %STHH%:%STMM%~%ETHH%:%ETMM% %Title% %ServiceName%"
"%ruby_path%" "%tweet_rb_path%"
exit

ハッシュタグ自動判別機能有り
if not defined HASHTAG set HASHTAG=%ServiceName%でリストにない場合はハッシュタグではなくそのままチャンネル名がツイートされる。

rem 180316
rem _EDCBX_DIRECT_
rem _EDCBX_HIDE_
rem 視聴予約なら終了
if "%RecMode%" == "4" (
    goto :eof
)

rem ====================環境変数設定====================
rem ruby.exeのパス
set "ruby_path=C:\Ruby24-x64\bin\ruby.exe"
rem tweet.rbのパス
set "tweet_rb_path=C:\DTV\EDCB\tweet.rb"
rem SSL証明書のパス
set "ssl_cert_file=C:\DTV\EDCB\cacert.pem"

rem ====================ハッシュタグ判別====================
rem 環境変数ServiceNameはChSet5.txt参照
rem 環境変数hashtagはTwitter参照
rem BS
if "%ServiceName%" == "NHKBS1" (
    set hashtag=#nhkbs1
) else if "%ServiceName%" == "NHKBSプレミアム" (
    set hashtag=#nhkbsp
) else if "%ServiceName%" == "BS日テレ" (
    set hashtag=#bsntv
) else if "%ServiceName%" == "BS朝日1" (
    set hashtag=#bsasahi
) else if "%ServiceName%" == "BS-TBS" (
    set hashtag=#bstbs
) else if "%ServiceName%" == "BSジャパン" (
    set hashtag=#bsjapan
) else if "%ServiceName%" == "BSフジ・181" (
    set hashtag=#bsfuji
) else if "%ServiceName%" == "BS11イレブン" (
    set hashtag=#bs11
) else if "%ServiceName%" == "BS12トゥエルビ" (
    set hashtag=#bs12
)
rem 地デジ
if "%ServiceName%" == "NHK総合1・東京" (
    set hashtag=#nhk
) else if "%ServiceName%" == "NHKEテレ1東京" (
    set hashtag=#etv
) else if "%ServiceName%" == "tvk1" (
    set hashtag=#tvk
) else if "%ServiceName%" == "チバテレ1" (
    set hashtag=#chibatv
) else if "%ServiceName%" == "日テレ1" (
    set hashtag=#ntv
) else if "%ServiceName%" == "テレビ朝日" (
    set hashtag=#tvasahi
) else if "%ServiceName%" == "TBS1" (
    set hashtag=#tbs
) else if "%ServiceName%" == "テレビ東京1" (
    set hashtag=#tvtokyo
) else if "%ServiceName%" == "フジテレビ" (
    set hashtag=#fujitv
) else if "%ServiceName%" == "TOKYO MX1" (
    set hashtag=#tokyomx
)
rem その他
if not defined hashtag (
    set "hashtag=%ServiceName%"
)

rem ====================ツイート====================
set "tweet_content=%SDYY%/%SDM%/%SDD%(%SDW%) %STHH%:%STMM%~%ETHH%:%ETMM% %Title% %hashtag%"
"%ruby_path%" "%tweet_rb_path%"
exit

こんな感じ

DTV記事一覧
1.予備知識、ハードウェア、ドライバ編
TS抜きとは何か、何が必要なのか、共通の項目。
2'.TVTest0.7.23+EDCB人柱版10.66編(非対応)
・(非推奨)取り敢えず視聴、録画が出来る環境を構築する。
2.TVTest0.9.0+xtne6f版EDCB編
・(推奨)安定して視聴、録画が出来る環境を構築する。
2018年4月~BSトラポン移動によるTVTest、EDCBのバイナリ変更点
3.xtne6f EDCB-Work-Plus-sでTwitter連携編
Twitter連携はRubyTwitter API Gemを使用する。
4.FFmpeg自動エンコード+Googleフォトに無限保存編
・バッチ又はPowerShellからFFmpegで綺麗にエンコードし、Backup and Syncでアップロードする。
・音ズレさせない正しい処理や、ファイルの自動削除機能等も備えているため、完全放置が可能。