🖋️2018-03-26 🔄2018-05-01
by shibanyan_1

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

FFmpeg

更新情報
2017-04-01
  • twitter api gemをインスコする行程を忘れてた
  • Twitter連携でSSL証明書が無くツイートできないのを修正
  • 2017-05-01
  • 曜日を追加
  • ~~斧に自動ツイートスクリプトと自動エンコバッチをうp~~
  • 2017-06-01
  • #nhkみたいにハッシュタグを自動で付けられるようになった
  • 2017-09-01
  • ハッシュタグ自動選択が上手く動作していなかったので修正
  • 2017-10-01
  • Ruby2.4でRubyInstaller2に変わったため手順を追記
  • 2018-02-01
  • 視聴予約時は実行しない
  • 2018-03-01
  • ツイート時にテキストファイルではなく環境変数を渡すようにした
  • EpgTimerSrvをサービス登録しても正常に動作する為に環境変数Pathの使用を廃止
  • ハッシュタグ判別機能が要らない場合の説明が間違っていたので修正
  • 2018-05-01
  • 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 twitterでTwitter 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
    

    こんな感じ