karing.jp iEPG service

このサイトはテレビ王国(https://tv.so-net.ne.jp/)のiEPGサービス終了にともない、それを補完するために個人的に運用されています。このiEPGサービスは「Version 1」のみを扱い、検証を目的とした実験的な公開も行なっています。このiEPGサービスは、地上デジタル放送およびBS放送のEPGデータをiEPGデータに変換しているため、また、テレビ王国との運用環境の違いにより、テレビ王国で運用されていたiEPGサービスとは若干異なる部分があります。

EPG(Electronic Program Guide)はかなり広い概念ですが、ここでは地上デジタル放送、BS放送などの放送波に含まれる番組情報およびその仕様等のことを意味しています。

このページは主に技術的な話題を取り扱っています。運用状況、連絡事項等はぴよぴよ痛信をご参照下さい。

このページは初版が2018-12-30に発行されましたが、その後、内容に変更があったため2020−01−01に改訂されました。初版

2020-01-01 よしのぶ  
e-mail:yoshino@rita.karing.jp 

1. 対応視聴地域
2. 当iEPGサーバへのアクセス法
3. EPGとiEPGの仕様上の差異について
4. テレビ王国のiEPGとの差異について
5. まとめ
6. 免責
7. 技術情報


1. 対応視聴地域
EPGデータの取得には電波の受信という物理的制約があるため、現在、当サイトの対応視聴地域は私が個人的に受信環境を持つ山形、東京、BSになります(神奈川県の非公式対応は終了しました 2021-02-14)。また、受信環境の状態により各放送局のデータの一部または全部が欠損する場合があります。この場合、欠損部分に関しては番組表およびiEPGサービスが利用できません。


2. 当iEPGサーバへのアクセス法
URL http://malva.karing.jp/iepg.tvpi?id=012345012301010101
各番組のidは最初の6文字(012345)が放送局の個別ID、その後に番組の開始時刻である西暦月日時分の12文字(012301010101)が続き、合計18桁の数字で表現されます。

iEPGサービスへのリンクを持つ番組表もあります。
http://malva.karing.jp/iepg/epg.00.0.html
http://malva.karing.jp/iepg/week.00.012345.html
epg.00.0.htmlは、00が地域コード、次の0が日付を表し、0は当日、1は1日後(明日)、以下7まで続きます。week.00.012345.htmlは、00は地域コード、012345は放送局の個別IDでその放送局の1週間の番組表になります。これらの番組表では番組毎のリンクがiEPGになっています。また、マウスを番組に合わせるとその番組の詳細情報が表示されます。

これらの番組表は毎朝6時頃に更新されます。

現実的には番組表とiEPGが連携しないとサービスとして完成しないと思われますが、個人的にiEPGに正式対応した機器を所持していないため、実際どのようなサービスが展開されていたのか未知の部分が多く、それらの対応に関しては今後の課題としています。

当サイトの場合、過去の番組表やiEPGデータにもアクセスは可能ですが、過去データの消去やその他の処理は管理上の問題として扱い、それらに関し予告や公表は行わず、一切の保証はありません。過去のiEPGデータの取得は過去の日付で指定するだけで通常通り可能です。要求した過去のデータが存在しなければエラーになります。番組表については、http://malva.karing.jp/iepg/pref.00/epg.YYYYmmdd.00.w.htmlでアクセスできます。pref.00およびepg.YYYYmmdd.00.w.htmlの00は地域コード、YYYYmmddはその番組表の公開日(西暦月日)で、wはその日を0として以後7日間の番組表であることを表しています。また、http://malva.karing.jp/iepg/pref.00/week.YYYYmmddHHMM.00.012345.htmlでは、時刻YYYYmmddHHMM(西暦月日時分)に作成された地域コード00でID012345を持つ放送局の8日間の番組表であることを表しています。

過去の番組表にアクセスするCGIも実装しています。右枠の「過去の番組表」で日付を合わせ、[go]をクリックして下さい。その日付の番組表が表示されます。また、その番組表の放送局名の横にあるチャンネルナンバーまたは「*」がその放送局のその日付を起点とする週間番組表へのリンクになっています。


3. EPGとiEPGの仕様上の差異について
当サイトのiEPGデータはEPGデータを可能な限りそのまま変換したものです。iEPGはソニーの独自規格であり、その名称の印象とは異なり、EPGを拡張したものでも簡素化したものでもありません。よって、iEPGとEPGには仕様上の差異が存在します。また、現状の運用環境においてはEPGではiEPG Version 1と同程度の情報量であるためここで扱うiEPGもVersion 1となっています。

・時間の単位がEPGでは秒単位、iEPGでは分単位になります。テレビ王国でどう対応していたのかはわかりませんが、当サイトでは分未満は切り捨てにしています。元データであるEPGの開始時刻等が秒単位で設定されている場合には開始時刻等が1分弱早まることになります。

・EPGでは文字コードはUTF-8ですが、テレビ王国のiEPGはShift-JISであり、文字コード変換の過程で文字化けする可能性があります。iEPGには文字コードの明示的な指定項目があるのでそれをShift-JISからUTF-8に変更する対応も考えられますが、現段階ではテレビ王国の仕様に準拠します。

・各番組を分類するジャンルが現行のEPGでは事実上9通りしかなく、subgenreも設定されているiEPGとはジャンルの対応に大きな齟齬が生じています。単純にはジャンル分けが粗くなるという問題ですが、実際はジャンルの仕様上の問題以前に、EPGではジャンル分け自体が機能していない放送局(特にBS)が多いという運用上の問題こそが最大の問題です。なお、当サイトのiEPGのsubgenreは、EPGには対応する値がないので空文字列になっています。

・EPGとテレビ王国iEPGの番組情報(詳細な文字情報)は異なります。同じ場合もありますが、同異の差が何に起因するのかは不明です。

・EPGでは放送波からデータを取り出すという特性上、相互通信によるエラー補正などの機能はなく、電波状況により、一部または全部の番組情報を取りこぼすことがあります。ネット上で完結するiEPGよりは信頼性で劣ります。全部の情報が欠損した場合にはそれが何らかのエラーであることはすぐわかりますが、一部欠損した場合には、それが一部データの欠損なのか放送休止中で番組自体が存在しないのかを識別する確実な方法はありません。当サイトの番組表では「unknown program」と表示されている状態がそれに該当します。深夜であれば放送休止中、そうでなければ一部データの欠損と判断し、その時間帯は「unknown program」という擬似番組のiEPGデータを返すようになっています。

・データ通信の信頼性で劣るEPGですが、EPGには一次データとしての即時性があります。もっとも、iEPGもやる気になればEPGに即座に追随することぐらいできるのではないかと思いますが、実際にはそうなっていません。多くの録画機器は録画を開始する数分前くらいにEPGデータを確認し、開始時刻の確認後、録画を開始します。このように個別の録画機器では実際の録画に合わせてEPGデータの確認を行うだけで番組時間の変更に対応できますが、不特定多数に向けたサービスであるiEPGが番組時間の変更に対応するには、随時、元データの確認を要します。もしくは、番組情報の変更に際し即座に情報提供を受けるような仕組みが必要です。しかし、テレビ王国のiEPGではそのような対応をしておらず、一日毎に番組情報を更新するのみとなっています。なお、当サイトのiEPGはEPGデータを録画サーバの余剰リソースによって取得しているため随時EPGデータを確認、更新することは困難です。そのため、当サイトのiEPGの更新も1日1回(毎朝6時頃、更新)となっています。

放送番組を受信できる録画できるということはEPGデータも取得できるということであり、本来、現在のテレビや録画機器にiEPGは不要であって、iEPGが廃れたのも当然と言えるのでしょう。当サイトがiEPGに対応しているのはアナログ放送の時代から複数のビデオサーバを運用しており、その番組情報はiEPGに依存していたためで、デジタル放送に移行しても互換性の維持を優先したためです。また、個人運用なので複数のビデオサーバが個別に番組情報を持つよりiEPGとして一元管理できた方が何かと便利と考えたからです。


4. テレビ王国のiEPGとの差異について
当サイトのiEPGと本家テレビ王国のiEPGには若干の差異があります。当サイトのiEPGは基本的にはテレビ王国の拡張になっていますが、互換性に問題が出た場合には修正することも予想されるので、下記の差異は後に変更される可能性があります。

・当サイトのiEPGはVersion 1のみです。Version 2(iEPG Digital, iEPG 1seg)には対応していません。Version 2では番組毎にユニークIDを設定する必要があり、そのデータを何らかの方法で取得するか、または番組のユニークIDを自己管理するかする必要がありますが、現状、どちらも困難な状況です。

・iEPGデータの取得に関し、エラーが生じた場合には、テレビ王国iEPGのエラー出力はテレビ王国全体で用いられている汎用のhtmlページ(sorry_notfound.html)となります。iEPGのContent-typeはapplication/x-tv-program-infoですが、エラー時にはtext/html(404 not found)で返すという仕様になっています。これに倣い、当サイトのiEPGでエラーが生じた場合にもhtmlファイルを返します。ただし、バグなどによる不正終了などを除き、ウェブサーバのエラー(404 not found)としては扱わず、正常終了(200)としてエラーページ(text/html)を出力します。その場合のエラーページは本家と同一のhtmlファイルではなく、エラーの状況を解析するための諸数値を含んだ独自のものとなっています。また、テレビ王国ではブラウザなどでエラーが生じるとエラーページへと遷移させられますが、当サイトでは現状を維持します。

・テレビ王国のiEPGでは番組の正確な開始時刻でリクエストしないとエラーになります。つまり、テレビ王国のiEPGではiEPGデータを取得するためには事前にその番組の開始時刻を知っている必要があります。当サイトのiEPGでは開始時刻である必要はなく、その時間に放送中の番組情報を返します。

・テレビ王国のiEPGでは過去の番組のiEPGデータを取得することができません(sorry_notfound.html)が、当サイトのiEPGでは元データが残っている限り、過去のiEPGデータも取得可能です。ただし、過去のデータに関しては管理運用の観点から削除される場合があります。

・テレビ王国のiEPGではUser Agentによるアクセス制限があります。通常のブラウザでアクセスする場合には問題にならないと思いますが、非対話的で簡易なユーティリティ(wgetなど)を利用する場合、適切なUser Agentで偽装しないとエラーになります。このエラーは前述したsorry_notfound.htmlではなく、障害を示すsorry.htmlで返されます。当サイトにはこのようなアクセス制限はありません。

・iEPGで返される放送局名とテレビ王国の番組表に表示されている放送局名は必ずしも一致しません。この放送局名の扱いに関して当サイトはテレビ王国と同一の対応をしています。また、テレビ王国の番組表ではBSのいくつかの放送局でiEPGのリンクがありません。ただし、リンクがなくともiEPGデータの取得は可能であり、この場合には原因は不明ですが、iEPGデータの放送局名が空文字列になっています。当サイトでは全ての放送局でiEPGへのリンクを設定し、かつ、テレビ王国のiEPGでは空白だった放送局名も独自に出力しています。この場合の放送局名はBSDT2XX(2XXは放送局IDの下三桁)という形式になっています。これは他のBS局の慣例に倣ったものです。


5. まとめ
テレビ放送は完全にデジタルへと移行し、EPGが標準装備となった今、iEPGは過去の遺物となりました。もっとも、EPGデータのデータとしての有用性はあいかわらず酷いもので各放送局のEPGに対する冷たい態度がよくわかります。とはいえ、放送局が自己の商品である番組の情報を他者に預け、勝手に評価批評される状況は極力避けたいと考えるのも企業本能としては理解できます。一般的に「まとめサイト」は企業側の利益に相反する場合が少なくなく、番組の「まとめサイト」であるiEPGもまた同じ危険をはらみます。その元凶にもなりえるEPGに企業側が消極的なのは当然で、放送局にとって番組情報は自己のサイトで独占的に扱うのが理想なのでしょう。

しかし、だからこそ一種の「まとめサイト」であるiEPGには意味があるわけです。一方通行で流される情報や情報の独占に対する抵抗、そして放送波では成し得ない相互通信による付加価値の創造、iEPGには夢がありました。もっとも、現実的にはテレビ王国は企業側の存在でしかありえず、それはまさに夢想でしかなかったわけですが…。

ただ、そこまでは仕方がないとして、iEPGもVersion 2では機能的にいろいろと進んでおり、消えるのがもったいないと思わせるぐらいの結末にはなりました。EPGにはさらに進んで欲しいと願っているのですが、現状の放置ぶりを見るに期待すべくもないのでしょう。新幹線は技術以上にその運用こそが素晴らしいと言われますが、4K8Kで騒いでいるだけの放送界にも少しはマネしてほしいものです。いずれにせよ、テレビ放送というメディアの限界が垣間見える昨今、その行く末をぼんやり眺めながらできるだけ長く、このiEPGサイトを維持して行きたいと思っております。


6. 免責
当サイトのiEPGサービスでは、EPGおよびiEPGの仕様、データ等についてはパブリックドメインとして扱っています。ただし、この方針は、これらの仕様やデータ等はパブリックドメインである、あるべきであると主張しているわけではありません。当サイトは何人の利益も侵害しない運用を目指しています。

また、当サイトのiEPGサービスは利用、複製等も自由ですが、それらによって生じた損害、障害等については何ら責任を負いません。


7. 技術情報
当サイトのiEPGサービスは、Linux上のWebサーバ(apache)により運用されています。このiEPGサーバは受信環境を有しておらず、EPGデータを山形および東京に設置されたビデオサーバに依存しています。各ビデオサーバはそれぞれ放送波からEPGデータを取得、xmlファイルを生成し、それを共有領域に書き込みます。iEPGサーバは共有領域に書き込まれたxmlファイルのEPGデータを参照し、すべての処理を行ないます。このEPGデータの更新は、iEPGサーバが各ビデオサーバにCGIリクエストを送ることにより実行され、更新終了後、番組表が新規作成されます。iEPGサービスはxmlファイルが更新されると直ちにその更新が有効になります。この更新は毎朝6時頃に実行されます。

以下、実際に使用されているCGIスクリプト、ユーティリティツールです。すべてシェルスクリプトで書かれています。

iepg.tvpi
このiEPGサービスのメインプログラムであるCGIスクリプト。EPGのxmlファイルを参照し、指定された番組のEPGデータをiEPGデータとして出力する。

mkepgtab.sh
EPGのxmlファイルを参照し、番組表を作成するプログラム。

テレビ王国における地域設定一覧 

上記、iepg.tvpiおよびmkepgtab.shはxmlデータを加工するだけのプログラムなので多少の汎用性がありますが、以下のtsファイルからxmlファイルを生成する一連のプログラムは当環境と不可分なためもっぱら汎用性はありません。

setiepg.malva.sh
iEPGサーバで実行され、ビデオサーバにEPGデータの更新を指示するプログラム。更新終了後、mkepgtab.shを実行し、番組表を更新する。その指示は、CGIリクエストによって行われる。cronにより毎朝6時頃に実行されている。

mkts2xml.cgi
ビデオサーバがsetiepg.malva.shからのCGIリクエストを受け、mkts2xml.shを実行するCGIスクリプト。認証やxmlデータ生成中のビデオサーバのシャットダウン防止などを担当している。

mkts2xml.sh
TVキャプチャデバイスからtsファイルを取り出し、EPGのxmlファイルを生成するスクリプト。xmlファイルは共有領域に書き込まれ、即時にiEPGサーバから利用可能になる。

check_xml.sh
tsファイルから生成されたxmlファイルのEPGデータに欠損がないかを調べるスクリプト。EPGデータの欠損は、放送休止のために番組情報(EPGデータ)が存在しないのか、本当にEPGデータが欠損しているのかを確定させる方法がないので経験的に判断している。

merge_xml.sh
EPGデータに欠損がある複数のxmlファイルを合わせて一つの欠損のないxmlファイルを生成するスクリプト。


このiEPGサーバは専用機ではなく、当ネットワーク(山形)のメインサーバであり、他にも様々な処理を行なっています。なお、インターネット接続に関し、このサーバのIPアドレスは約一週間に一度変更され、その変更後、DDNSの更新が完了するまでのおよそ30分程度接続できなくなる時間帯が存在します。また、広汎なアクセス制限として、404 not found errorを一時間に三回以上出すとそのIPからの接続を、一定時間、受けつけなくなります。


iEPG server(malva.karing.jp)
CPU Intel Core 2 Duo E6600 2.40GHz
M.B. FOXCONN 45CM-S
chip set i945GC+ICH7
RAM DDR2 SDRAM 1024MBx2
on board video i945GC
on board ethernet RealTek RTL8139
on board sound Intel HD Audio
PCI USB2.0 CARD IO data 1394US2-PCI
HDD HITACHI HDT72502 250GB
HDD WDC WD10EACS-00D 1TB
Software RAID(HDD case) MARSHAL MAL-3035SBKU3
HTSG 2TBx4 4TB(RAID5+1spare)
DVD-RAM MATSHITA DVD-RAM SW-9587S
OS Vine Linux 6.5


ビデオサーバは2台ともPT3の二枚刺しです。BSは主に山形で受信しています。このビデオサーバについてはpt3 on Vine Linux 6.2で詳解しています(記述に差異がある場合はこのiEPGのページの方が新しく正しい記述です)。

video server in Yamagata(asagao.karing.jp)
CPU Intel Core i3 4130 3.40GHz
M.B. GIGABYTE GA-H81M-D3V
chip set Intel H81
RAM DDR3 SDRAM 2048MBx2
video card NVIDIA GeForce 6200
on board ethernet RealTek RTL8168
on board sound Intel HD Audio
TV caputure card Earth soft pt3 x2
HDD HITACHI HDS721616PLA380 160GB
HDD Seagate MB2000ECWCR 2TB
DVD-RAM HL-DT-ST DVDRAM GH24NSB0
OS Vine Linux 6.5

video server in Tokyo(nadesico.karing.jp)
CPU Intel Core 2 Duo E8400 3.00GHz
M.B. ASUSTeK P5Q-EM
chip set Intel G45
RAM DDR2 SDRAM 2048MBx2
onboard video GMA X4500HD
on board ethernet RealTek 8111C
on board sound Realtek ALC 1200
TV caputure card Earth soft pt3 x2
HDD WDC WD2500JD 250GB
HDD Seagate ST2000DM001 2TB
DVD-RAM HL-DT-ST DVDRAM GH20NS10
OS Vine Linux 6.5




iEPG番組表


2020-01-01 Wed 18:22