2010年2月10日水曜日

VARDIA RD-S1004K iEPG 録画予約(2)

2010/4/3 追記:
VARDIA 予約メール送信プログラムを正式(?) にフリーソフトとして公開した.
RD-iEPG

下に書いたスクリプトにいくつか機能追加されている.
SMTP 認証・FireFox 設定は,トラックバックをいただいた「ぷじょ~る君」様の記事を参考にさせていただきました.ありがとうございます!

以下は過去に書いた記事.
-----

あけおめ.

PC から VARDIA RD-S1004K の録画予約を,ONTV を使ってやる環境は完成したけど,ONTV のサイトがイマイチ使いにくいのと,この方法はメールフォワードスクリプトが置ける環境の人しか使えないなぁ,というわけで,普通の iEPG 番組をクリックしたら予約メールを生成して VARDIA に送信するスクリプトを書いてみた.
//*** メール送信設定 *********************************************************
var Msg = new ActiveXObject( "CDO.Message" );
var CDO = "http://schemas.microsoft.com/cdo/configuration/";
// ★VARDIA のメール予約パスワードを記述します
VardiaPasswd = "password";
// ★VARDIA の録画オプションをお好みで記述します
VardiaOpt = "RT1 YX KY CPY";
// ★送信元メールアドレスを記述します
var From = "from@hoge.com";
// ★VARDIA のメールアドレスを記述します
Msg.To = "vardia@hoge.com";
// ★SMTP サーバ名・ポート番号を指定します
Msg.From = From;
Msg.Configuration.Fields.Item( CDO + "smtpserver" ) = "smtp.gmail.com";
Msg.Configuration.Fields.Item( CDO + "smtpserverport" ) = 465;
Msg.Configuration.Fields.Item( CDO + "smtpauthenticate" ) = 1;
Msg.Configuration.Fields.Item( CDO + "sendusername" ) = From;
Msg.Configuration.Fields.Item( CDO + "sendpassword" ) = "smtp_passwd";
Msg.Configuration.Fields.Item( CDO + "smtpusessl" ) = 1;
//*** ★放送局→CH番号テーブル ***********************************************
// 以下の書式で,iEPG放送局名 と VARDIAチャンネル番号 の対応を記述します.
// iEPG放送局名は,全角・半角・スペース等を正確に記述する必要があります.
//
// 書式: "iEPG放送局名" : "VARDIAチャンネル番号",
// station: BSDT??? になってるやつは自動的に変換するので,ここで指定する必要はない
var Channel = {
//-- INSERT NEW CHANNEL --
"DFS0B400" : "D011-1", // NHK総合(関西)
"DFS00808" : "D021", // NHK教育(関西)
"DFS00810" : "D041", // 毎日放送
"DFS00818" : "D061", // ABCテレビ
"DFS00820" : "D081", // 関西テレビ
"DFS00828" : "D101", // 読売テレビ
"DFS0A430" : "D051-1", // 京都テレビ
"DFS0B430" : "D031", // びわ湖放送
"NHK総合" : "D011-1", // NHK総合(関西)
"NHK教育" : "D021", // NHK教育(関西)
"毎日テレビ" : "D041", // 毎日放送
"ABCテレビ" : "D061", // ABCテレビ
"関西テレビ" : "D081", // 関西テレビ
"読売テレビ" : "D101", // 読売テレビ
"KBS京都" : "D051-1", // 京都テレビ
"びわ湖放送" : "D031" // びわ湖放送
};
//*** 以下は変更の必要はありません *******************************************
main();
function main(){
var EOL = "\r\n";
if( WScript.arguments.length < 1 ){
WScript.echo( "iEPG ファイルが指定されていません" );
return;
}
// オブジェクト初期化
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
// iEPG ファイルパース
var fp = fso.OpenTextFile( WScript.arguments( 0 ), 1/*ro*/ );
var Prog = new Object();
Prog[ "program-subtitle" ] = "";
while( fp.AtEndOfStream == false ){
str = fp.ReadLine().replace( /[\x0D\x0A]/, "" );
if( str.match( /^([^:]+):\s*(.*)/ )){
Prog[ RegExp.$1 ] = RegExp.$2;
}
}
fp.Close();
fso.DeleteFile( WScript.arguments( 0 ));
// ChCode 取得
var ChCode;
if( !( ChCode = GetChCode( Prog ))) return;
// program-id キャッシュ取得
var TitleCacheFile = WScript.ScriptFullName.replace( /[^\.]+$/, "dat" );
var TitleHit = 0;
var TitleList = [];
var Title = Prog[ "program-title" ]
.replace( /\[.*?\]/g, '' )
.replace( /[  ]+/g, '' );
try{
fp = fso.OpenTextFile( TitleCacheFile, 1, 0 );
while( fp.AtEndOfStream == false ){
var title_tmp = fp.ReadLine().replace( /[\x0D\x0A]/, "" ).split( "\t" );
if( title_tmp[ 0 ] == Prog[ "program-id" ]){
TitleHit = 2;
}else if( title_tmp[ 1 ] == Title ){
TitleHit = 1;
}else{
TitleList.push( title_tmp );
}
}
fp.Close();
}catch( e ){}
// open hoge prog add 20091214 2045 2046 D012
str = "open " + VardiaPasswd + " prog add " +
Prog.year + Prog.month + Prog.date + " " +
Prog.start.replace( /:/, "" ) + " " + Prog.end.replace( /:/, "" ) +
" " + ChCode +
" " + VardiaOpt + EOL +
Prog[ "program-title" ] + EOL +
Prog[ "program-subtitle" ] + EOL;
// 確認
shell = WScript.CreateObject( "WScript.Shell" );
// -1=自動で閉じない、4=はい&いいえ
ret = shell.Popup((
TitleHit == 2 ? "★★★予約済み★★★\n" :
TitleHit == 1 ? "☆☆☆予約済みかも?☆☆☆\n" : ''
) + str, -1, "RD-iEPG - 予約しますか?", 4 );
if( ret != 6 ) return;
// program-id キャッシュ書き込み
fp = fso.OpenTextFile( TitleCacheFile, 2/*w*/, 1/*create*/ );
fp.WriteLine( Prog[ "program-id" ] + "\t" + Title );
for( var i = 0; i < 99 && i < TitleList.length; ++i ) fp.WriteLine( TitleList[ i ][ 0 ] + "\t" + TitleList[ i ][ 1 ]);
fp.Close();
// メール送信
Msg.Subject = "RD-iEPG";
Msg.Configuration.Fields.Item( CDO + "smtpconnectiontimeout" ) = 60;
Msg.Configuration.Fields.Item( CDO + "sendusing" ) = 2;
Msg.Configuration.Fields.Update();
Msg.TextBody = str;
Msg.Send();
}
function GetChCode( Prog ){
if( Channel[ Prog.station ] ){
return Channel[ Prog.station ];
}
if( Prog.station.match( /^[BC]SDT/ )){
return Prog.station.replace( /DT/, "" );
}
// 放送局→ch 番号 が未登録
var ChCode = InputBox( "「" + Prog.station + "」の VARDIA でのチャンネル番号を入力してください\n例: D011 D021-1 BS101 等", "RD-iEPG", "" );
if( typeof( ChCode ) == "undefined" || ChCode == "" ) return undefined;
//WScript.echo( '"' + ChCode + '"' + WScript.ScriptFullName );
// 旧スクリプトリネーム
fso.MoveFile( WScript.ScriptFullName, WScript.ScriptFullName + ".old" );
// スクリプトに ch 定義を追加する
var fpIn = fso.OpenTextFile( WScript.ScriptFullName + ".old", 1 );
var fpOut = fso.CreateTextFile( WScript.ScriptFullName, 1 );
while( fpIn.AtEndOfStream == false ){
str = fpIn.ReadLine();
fpOut.WriteLine( str );
if( str.match( /INSERT\sNEW\sCHANNEL/ )){
fpOut.WriteLine( '\t"' + Prog.station + '"\t: "' + ChCode + '",' );
}
}
fpIn.Close();
fpOut.Close();
fso.DeleteFile( WScript.ScriptFullName + ".old" );
return ChCode;
}
function InputBox( msg, title, init ){
//JScriptからVBSのInputBox関数を実行
var oSC = new ActiveXObject( "ScriptControl" );
oSC.Language = "VBScript";
oSC.AddCode(
'Function InBox( prompt, title, default )\n' +
' InBox = InputBox( prompt, title, default )\n' +
'End Function\n'
);
return oSC.Run( "InBox", msg, title, init );
}
view raw rd-iepg.js hosted with ❤ by GitHub
このスクリプトを *.js で保存して,★でコメント書いてる内容を適宜修正して,*.tvpi にこの *.js を関連付ければ OK.

関連付けが,レジストリを直接いじらないとできないので,
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.tvpi]
@="tvpifile"
[HKEY_CLASSES_ROOT\.tvpid]
@="tvpifile"
[HKEY_CLASSES_ROOT\tvpifile]
@="iEPG ファイル"
[HKEY_CLASSES_ROOT\tvpifile\shell\open\command]
@="wscript.exe \"C:\\Program Files\\rd-iepg\\rd-iepg.js\" \"%1\""
view raw rd-iepg.reg hosted with ❤ by GitHub
を hoge.reg として保存して W クリックすれば関連付けできる.
(*.js スクリプトは C:\Program Files\rd-iepg\rd-iepg.js においてあるものと仮定)

いつも使い慣れている番組表サイトで予約できるので使いやすいヽ(´ー`)ノ

# RD-X9 とかでも使えるかどうかはわからんけど,たぶんつかえるんじゃ?

0 件のコメント:

コメントを投稿