SmartVision 2.1でADAMS-EPGの番組データを取得する, AEPGDec.dllのCOMインターフェイスについて詳説する.
なお, 製品版のVC++で実用プログラムを作成する場合, AEPGDec.hは不要で, ソースに次のように書けば十分.
#import "C:\Program Files\NEC\SmartVision\AEPGDec.dll"
テレビ局の情報を表す.
long uPreset; // SmartVision上でのチャンネル番号(1〜12). ないときは0. long uReal; // 受信チャンネル番号(1〜62). ないときは0. long fEnable; // 1→有効, 0→無効. [*1] long fVBIType; // 不明. 必ず0が返る. int nSCode; // テレビ局コード. BSTR szSName; // テレビ局名. [*2]
[*1] この有効・無効はSmartVision上での表示・非表示を示すもので, 無効でも番組データ自体は取得可能.
[*2] BSTR型であるが, 実際の中身はShift_JISなので注意.
ジャンルのデータ. SmartVisionが表示するものより, ずっと詳細な分類である.
BSTR szKc; // ジャンル記号. "B*","B1","B0","C*","C1","C2",...等. [*1] BSTR szCat; // ジャンル名. [*1]
取得できたジャンルの一覧:
B*:ドラマ
B1:ドラマ
B0:その他
C*:映画
C1:邦画
C2:洋画
D*:スポーツ
D1:サッカー
D2:野球
D3:ゴルフ
D4:相撲
D5:モータースポーツ
D6:テニス
D7:バスケットボール
D8:柔道
D9:ボクシング
DA:プロレス
DB:陸上
DC:バレーボール
DD:ラグビー
DE:スポーツ&ニュース
D0:その他
E*:芸能
E1:歌舞伎・能・狂言
E2:演芸・落語・漫才
E3:演劇
E0:その他
F*:音楽
F1:クラシック
F3:その他
G*:バラエティー
G1:バラエティー
G2:クイズ
G3:トーク
H*:教養
H1:科学
H2:歴史
H3:芸術
H4:教育・講座
H5:幼児教育
I*:アニメ・人形劇
I1:アニメ
I3:特撮・ヒーロー
J*:社会・報道
J1:ドキュメンタリー
J2:報道
J3:討論
J4:ワイドショー
J5:ニュース
J6:海外ニュース
J7:政治・経済
J0:その他
K*:趣味・暮らし
K1:探訪・紀行
K2:暮らし
K3:趣味
K4:グルメ
K5:健康
K6:福祉
K7:料理
K8:釣り
K9:情報番組
K0:その他
L*:その他
L1:ショッピング
B*, C*等は大分類であり, 実際に番組表や.sviファイルに現れるのはB1, C2等である.
これらの分類は変更される可能性が高いと思われる.
[*1] BSTR型であるが, 実際の中身はASCII・Shift_JISなので注意.
番組表放送時間帯.
DATE dBegin; // 開始時刻. [*1] DATE dEnd; // 終了時刻. [*1]
[*1] DATE型であるが, 日付のデータはなく, 1日を1.0に換算して表した時刻のdouble型数値.
テレビ局の情報を表す.
int nSCode; // テレビ局コード. DATE dBroadcast; // 番組を放送する日付. [*1] DATE dEdit; // 番組表を作成した日付と思われる. [*1] BSTR szSName; // テレビ局名. [*2] [*3]
[*1] DATE型であるが, 時分秒は全て0.
[*2] BSTR型であるが, 実際の中身はShift_JISなので注意.
[*3] この文字列をSysFreeString()で解放しようとするとなぜかエラーになる. GetPrg()のhdrは内部データを直接指しているのかもしれない.
番組表の個々の番組のデータを表す.
DATE dBegin; // 開始時刻. [*1] DATE dEnd; // 終了時刻. [*1] double id1; // 不明. 必ず0.0が返る. double id2; // 不明. 必ず0.0が返る. BSTR szKc; // ジャンル記号. ないときは"". [*2] long scr; // 不明. 必ず0が返る. long ext; // 不明. 必ず0が返る. BSTR szInfo; // 番組名. [*2] [*3] [*4] BSTR szCmm; // 詳細情報. ないときはNULL. [*2] [*4]
[*1] DATE型であるが, 日付のデータはなく, 1日を1.0として表した時刻のdouble型数値. 時刻の範囲は4:00〜33:00位のようである. なお, 秒は必ず0になる.
[*2] BSTR型であるが, 実際の中身はASCII・Shift_JISなので注意.
[*3] 文章中, TABを使って特殊な意味を表す:
'\t2': 二, '\tB': 多, '\tC': 司, '\tF': 新, '\tM': 映, '\tN': N,
'\tR': 再, '\tS': ス, '\tT': 字, '\tV': 声, '\tW': 天
[*4] 文章中, タグを使って一部の人名を特別に表すことがある:
例. 出演者: '<pp坂東英二;ばんどうえpp>'
例. スタッフ: '<ss吉田剛;よしだss>'
振り仮名は5文字以内.
HRESULT SetDecodeKey(BSTR szKey); [in] szKey: AEPGDec.dllを使うのに必要なキー. [out] SetDecodeKey(): 0→成功, 1→失敗.
SetDecodeKey()は最初に呼び出し, 初期化を行うものと推測される.
HRESULT GetAllStation(short * pcMax, struct tagSTATION * * pprgs); [out] pcMax: テレビ局数. [out] pprgs: テレビ局のデータ. [out] GetAllStation(): 0→成功, 1→失敗.
一覧されるのは, SmartVisionで「設定ウィンドウ→番組表→TV表示チャンネル」として左右に表示されるもの全て.
HRESULT GetAllDate(short * pcMax, DATE * * ppdates); [out] pcMax: 日付の数 [out] ppdates: 日付の一覧 [out] GetAllDate(): 0→成功, 1→失敗.
番組データが取得可能な日付の一覧を返す. DATE型だが時分秒は全て0.
ADAMS-EPGで受信できるのは当日以降の分だが, 番組表は一週間程度保存される. したがって, 取得できるのは当日を含んだ約二週間分になることが多い.
HRESULT GetMtn(BSTR szMtn); [out] szMtn: ADAMS-EPGの問い合せ先の情報. [out] GetMtn(): 0→成功, 1→失敗.
返るのはBSTR型であるが, 実際の中身はShift_JISなので注意.
単に次のファイルの内容を返すだけと思われる:
C:\Documents and Settings\All Users\Application Data\NEC\SmartVision\ADAMS-EPG\MA000001.MTT
HRESULT GetKca(short * pcMax, struct tagKCA * * ppkcas); [out] pcMax: 全ジャンル数 [out] ppkcas: 全ジャンル一覧 [out] GetKca(): 0→成功, 1→失敗.
詳細なジャンルの一覧を返す. SmartVisionではジャンルは十数種類しかないように見えるが, ADAMS-EPGでは実際にはもっと細かく, 合計約60種類に分類されている.
.sviファイルには詳細な分類が保存される.
HRESULT GetTch(short * pcMax, struct tagTCH * * pptchs); [out] pcMax: 番組表放送時間帯の総数. [out] pptchs: 番組表放送時間帯. [out] GetTch(): 0→成功, 1→失敗.
ADAMS-EPG番組表の放送時刻を返す. 放送する時刻であって, 実際に受信するかどうかの設定は無関係.
HRESULT GetPrg(DATE date, int nCode, struct tagHDR * * hdr, BSTR * szMsg, short * pcMax, struct tagPRG * * ppprgs); [in] date: 日付. [in] nCode: テレビ局コード. [out] hdr: テレビ局の情報. [out] szMsg: 不明. ""しか返ってこない. [out] pcMax: 番組数. [out] ppprgs: 全番組のデータ. [out] GetPrg(): 0→成功, 1→失敗.
日付・テレビ局コードで指定された全番組のデータを返す.
HRESULT GetPrgByTime(DATE date, long nCh, struct tagPRG * * ppprgs); [in] date: 日時. [in] nCh: チャンネル(1〜12). [out] ppprgs: 番組データ. [out] GetPrgByTime(): 0→成功, 1→失敗.
指定された日時・チャンネルに当たる番組のデータを返す.
HRESULT RequestUpdate(long hWnd, long Msg); [in] hWnd: [in] Msg:
調査したが仕様不明.
HRESULT CancelUpdate(long hWnd); [in] hWnd:
未調査.
HRESULT RequestConnection();
未調査.
HRESULT RequestDisconnection();
未調査.
HRESULT GetMaxPresetChannel(int * pnMaxCh); [out] pnMaxCh: 最大チャンネル数
最大チャンネル数を返すと思われる. 必ず12が返る.
HRESULT IsEnablePresetChannel(long uPreset, char * pbEnableCh); [in] uPreset: チャンネル番号(1〜12). [out] pbEnableCh: 1→有効, 0→無効.
各チャンネルの受信が有効か無効かを返す. これはチャンネル設定ユーティリティの設定情報である.
CATVについては取得できないようだ.
HRESULT GetPresetChannel(int nCode, long * puPreset); [in] nCode: テレビ局コード. [out] puPreset: チャンネル番号(1〜12). ない場合は0. [out] GetPresetChannel(): 0→成功・該当あり, 1→失敗, 2→成功・該当なし.
テレビ局コードに対応するチャンネル番号を返す.
HRESULT GetStationCode(long uPreset, int * pnCode); [in] uPreset: チャンネル番号(1〜12). [out] pnCode: テレビ局コード. ない場合は0.
チャンネル番号に対応するテレビ局コードを返す.
HRESULT GetLastUpdateDate(DATE * pLast); [out] pLast: 最終更新日時. [out] GetLastUpdateDate(): 0→成功, 1→失敗.
最後に番組表を更新した日時を返す. ADAMS-EPGを受信した時刻やADAMS-EPG+でアクセスした時刻になる.
1分未満は切り捨ての様子.
HRESULT SetADAMSEPGDirectory(BSTR szDirName); [in] szDirName: フォルダ名.
ADAMS-EPGのデータがある場所を指定する. 標準では次の場所にある:
C:\Documents and Settings\All Users\Application Data\NEC\SmartVision\ADAMS-EPG\
末尾に「\」をつけることと, ASCII・Shift_JISにすることに注意.
HRESULT ChangeEPGFileName();
ADAMS-EPG受信時やADAMS-EPG+アクセス時に使われるようだが, 具体的な役割は不明.