VARDIA 予約メール送信プログラムを正式(?) にフリーソフトとして公開した.
RD-iEPG
下に書いたスクリプトにいくつか機能追加されている.
SMTP 認証・FireFox 設定は,トラックバックをいただいた「ぷじょ~る君」様の記事を参考にさせていただきました.ありがとうございます!
以下は過去に書いた記事.
-----
あけおめ.
PC から VARDIA RD-S1004K の録画予約を,ONTV を使ってやる環境は完成したけど,ONTV のサイトがイマイチ使いにくいのと,この方法はメールフォワードスクリプトが置ける環境の人しか使えないなぁ,というわけで,普通の iEPG 番組をクリックしたら予約メールを生成して VARDIA に送信するスクリプトを書いてみた.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//*** メール送信設定 ********************************************************* | |
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 ); | |
} |
関連付けが,レジストリを直接いじらないとできないので,
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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\"" |
(*.js スクリプトは C:\Program Files\rd-iepg\rd-iepg.js においてあるものと仮定)
いつも使い慣れている番組表サイトで予約できるので使いやすいヽ(´ー`)ノ
# RD-X9 とかでも使えるかどうかはわからんけど,たぶんつかえるんじゃ?
0 件のコメント:
コメントを投稿